Crear shapefile con rasgos seleccionados con base en los valores de un campo de atributos usando PyQGIS

En un post anterior se consideró la selección avanzada de rasgos con objetos de QgsExpression en PyQGIS. En este vamos a utilizar la herramienta para hacer la consulta sobre un campo de la tabla de atributos de un vectorial tipo polígono y con los rasgos seleccionados (features) se va a crear una memory layer.

El vectorial a usar es el de la imagen siguiente. La base de la consulta es el campo ‘values’ y se van a seleccionar los rasgos con ‘values’ entre 30 y 50 (ambos inclusive).

layer1

El código ejecutado en la Python Console de QGIS se encuentra a continuación:

layer = iface.activeLayer()

expression = QgsExpression( u'"values" >= 30 AND "values" <= 50' )

idx = [ feat.attributes()[0] for feat in layer.getFeatures() 
        if expression.evaluate( feat ) ]

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

for feat in feats:
    area = feat.geometry().area()
    print u"area{:.0f} = {:.2f}".format(idx[feats.index(feat)], area)

crs = layer.crs()

epsg = crs.postgisSrid()

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

new_layer = QgsVectorLayer(uri, 
                           'class1', 
                           'memory')

QgsMapLayerRegistry.instance().addMapLayer(new_layer)

prov = new_layer.dataProvider()

n = len(feats)

for i in range(n):

    feats[i].setAttributes([i, feats[i].geometry().area()])

prov.addFeatures(feats)

Después de la ejecución del código anterior se obtiene como resultado el vectorial con una simbología de color azul de la imagen siguiente. Esta selección concuerda con lo esperado; tal como se desprende del análisis de las áreas y los ids correspondientes a los features que se encuentran en la tabla de atributos y en la ventana de resultados de la Python Console de QGIS.

layer2

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