¿Cómo crear una nueva capa vectorial vacía mediante programación?


21

Soy nuevo en Python y QGIS. He visto algunos tutoriales de scripts de python para QGIS. Todos ellos crean nuevas capas vectoriales y ráster con alguna fuente de datos existente. p.ej. shapefile o geotiff o tabla de base de datos postgis.

¿Es posible crear una capa QGIS a través de un script de Python, donde puedo crear / agregar / modificar nuevas características a través del script de Python, según sea necesario? Normalmente será una capa vectorial con datos de puntos y símbolos personalizados.

¿Será esto posible? ¿Hay algún ejemplo que pueda mirar?

Respuestas:


19

Eche un vistazo al proveedor de memoria como se describe en PyQGIS Cookbook .

El proveedor de memoria está destinado a ser utilizado principalmente por plugins o desarrolladores de aplicaciones de terceros. No almacena datos en el disco, lo que permite a los desarrolladores usarlo como un back-end rápido para algunas capas temporales.

# To avoid 'QVariant' is not defined error
from PyQt4.QtCore import *

# create layer
vl = QgsVectorLayer("Point", "temporary_points", "memory")
pr = vl.dataProvider()

# Enter editing mode
vl.startEditing()

# add fields
pr.addAttributes( [ QgsField("name", QVariant.String),
                QgsField("age",  QVariant.Int),
                QgsField("size", QVariant.Double) ] )

# add a feature
fet = QgsFeature()
fet.setGeometry( QgsGeometry.fromPoint(QgsPoint(10,10)) )
fet.setAttributeMap( { 0 : QVariant("Johny"),
                   1 : QVariant(20),
                   2 : QVariant(0.3) } )
pr.addFeatures( [ fet ] )

# Commit changes
vl.commitChanges()

Gracias por la respuesta, sin duda fue útil. Sin embargo, cuando uso el script obtengo el siguiente error. "NameError: el nombre 'QVariant' no está definido" Dejé la parte "addAttributes" y logré poner un punto en el mapa, así que funciona, gracias. Estoy usando Ubuntu 12.04 y QGIS 1.8.0-Lisboa Pero, ¿qué puede causar el error mencionado anteriormente?
Theuns Heydenrych

1
Parece que setAttributeMapya no es un método de clases QgsFeature, por lo que esta solución no funciona para el QGIS más reciente (2016).
Spacedman

4

Si desea guardar una nueva capa vectorial (.shp) en su Disco Duro, debe usar QgsVectorFileWriter () . Toma varios parámetros, la forma más simple es usar los parámetros del proyecto que está usando. Echa un vistazo a este sitio .

   cLayer = qgis.utils.iface.mapCanvas().currentLayer()
   provider = cLayer.dataProvider()
   writer = QgsVectorFileWriter( "output_path_and_name.shp", provider.encoding(), provider.fields(),QGis.WKBPolygon, provider.crs() )

1
Pero esto está creando el archivo .shp vacío. Si quiero guardar el archivo de forma existente en la ruta especificada, ¿cómo puedo hacer eso?
user99
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.