Crear shapefile con rasgos seleccionados con base en los ids mediante PyQGIS

Una selección (request) mediante PyQGIS, basada en los ids, emplea el método ‘setFilterFids’ de la clase QgsFeatureRequest. Para ejemplificarla vamos a usar el shapefile con 8 features de la imagen siguiente y a escoger arbitrariamente los ids 1, 5 y 7 como objeto de nuestra selección.

request1

El código siguiente permite realizar el proceso recomponiendo los rasgos seleccionados en una memory layer. Como los features ya tienen la geometría incluida no es necesario suministrarla y como se emplea un objeto de tipo provider para la capa de memoria tampoco es requerida una sesión de edición para añadir los rasgos.

layer = iface.activeLayer()

request = QgsFeatureRequest().setFilterFids([1, 5, 7])

iter = layer.getFeatures(request)

print iter

epsg = layer.crs().postgisSrid()

uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"

mem_layer = QgsVectorLayer(uri, 
                           'request',
                           'memory')

prov = mem_layer.dataProvider()

feats = [ feat for feat in iter ]

for i, feat in enumerate(feats):
    feat.setAttributes([i])

prov.addFeatures(feats)

QgsMapLayerRegistry.instance().addMapLayer(mem_layer)

Después de ejecutado en la Python Console el código anterior se obtiene la memory layer de la imagen siguiente cuyos rasgos corresponden a los simbolizados con el color verde.

request2

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