Selección avanzada de rasgos con objetos de QgsExpression en PyQGIS

En el post anterior se trató el tópico relativo a la selección avanzada de rasgos con objetos de QgsFeatureRequest en PyQGIS. Allí, para la selección de rasgos, al método ‘getFeatures’ se le pasaba como argumento un objeto de la clase QgsFeatureRequest con base en un string (unicode) con sintaxis tipo SQL y relacionada a los campos de atributos.

Otra forma de realizar la selección de rasgos es transformar el string en un objeto de la clase QgsExpression y verificar para cada rasgo, mediante su método ‘evaluate’, si se cumple la condición tipo SQL. Esto produce un código más conciso; tal como se presenta a continuación:

layer = iface.activeLayer()

expression = QgsExpression( u'"area" > 2e8 AND "area" < 3e8' )

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)

Se va a aplicar al mismo vectorial del post anterior pero la consulta es un poco más compleja y basada en el campo de atributo ‘area’. Cuando se ejecuta el código en la Python Console de QGIS, tal como evidencia la imagen siguiente, los resultados son los esperados.

expression1

Las áreas de los rasgos obtenidos por la selección avanzada coinciden con los contenidos en la tabla de atributos.

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

Una respuesta a Selección avanzada de rasgos con objetos de QgsExpression en PyQGIS

  1. Pingback: Crear shapefile con rasgos seleccionados con base en los valores de un campo de atributos usando PyQGIS | El Blog de José Guerrero

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