Cómo producir una memory layer copiando los rasgos y campos de otra capa mediante PyQGIS

Hasta ahora, todas las memory layer que hemos producido a lo largo de los posts de este Blog, utilizando PyQGIS, han creado sus campos a partir de una URI y se han poblado con valores utilizando el modo de edición directa de los features o, sin ella, con los métodos que pone a la disposición la clase QgsDataProvider. Empleando los recursos de esta última, vamos a clonar los features y los campos de una vector layer tipo polígono, conjuntamente con su tabla de atributos, y la vamos a copiar en una memory layer sin crear previamente los campos a través de la URI.

El código usado fue el siguiente:

input = "/home/zeito/pyqgis_data/polygon8.shp"

layer = QgsVectorLayer(input,"polygon","ogr")

feats = [ feat for feat in layer.getFeatures() ]

temp = QgsVectorLayer("Polygon?crs=epsg:32612", 
                      "result", 
                      "memory")

QgsMapLayerRegistry.instance().addMapLayer(temp)

temp_data = temp.dataProvider()

attr = layer.dataProvider().fields().toList()
temp_data.addAttributes(attr)
temp.updateFields()

temp_data.addFeatures(feats)

Cuando se ejecuta en la Python Consola para un vectorial tipo polígono, se obtienen los resultados esperados; tal como se presenta en la imagen siguiente:

memory1

Si se comentan la dos líneas siguientes; las cuales representan la copia de los campos de la capa original a una lista y su posterior adición a la memory layer:

attr = layer.dataProvider().fields().toList()
temp_data.addAttributes(attr)

se obtiene que la tabla atributiva de esta última deja de tener los valores de la capa original; tal como se observa en la imagen siguiente.

memory2

Con esto lo que se quiere resaltar es que con los métodos de la clase QgsDataProvider no se requiere una sesión de edición ni tampoco definir nuevos rasgos para la memory layer ni asignar su geometría.

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s