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

18

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 algún origen de datos existente. p.ej. Tabla de base de datos shapefile o geotiff o 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 un ejemplo que pueda ver?

    
pregunta Theuns Heydenrych 25.07.2012 - 14:03

2 respuestas

15

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

  

El proveedor de memoria está destinado a ser utilizado principalmente por complementos o desarrolladores de aplicaciones de terceros. No almacena datos en el disco, lo que permite a los desarrolladores usarlos como backend 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()
    
respondido por el underdark 25.07.2012 - 21:16
3

Si desea guardar una nueva capa vectorial (.shp) en su disco duro, debe usar QgsVectorFileWriter () . Se necesitan varios parámetros, la forma más sencilla es utilizar los parámetros del proyecto que está utilizando. Eche 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() )
    
respondido por el G M 25.08.2013 - 09:38

Lea otras preguntas en las etiquetas