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

En todos nuestros ejemplos de código, hasta ahora, se han seleccionado los rasgos de las vector layer empleando los métodos ‘getFeatures’ (selección total) o ‘getFeatures().next()’ (selección individual). Sin embargo, el método ‘getFeatures’ también admite como argumento un objeto de la clase QgsFeatureRequest sobre el cual se le puede pasar un string (unicode) con una consulta o requerimiento tipo SQL con base en los campos de atributos. Esto permitirá seleccionar solo aquellos rasgos que satisfagan el requerimiento.

Para probar el código se va a usar el vectorial tipo polígono de la imagen siguiente para el cual también se puede visualizar su tabla atributiva. El objetivo es seleccionar solo los rasgos que pertenezcan a la ‘class = 4’. El campo ‘area’ servirá para corroborar que la selección de rasgos fue la adecuada porque también se imprimirá con su id original.

request1

El código completo es el siguiente:

layer = iface.activeLayer()

request = QgsFeatureRequest().setFilterExpression (u'"class" = 4')

selected_feats = layer.getFeatures(request)

idx = [ feat.attributes()[0] for feat in selected_feats ]

selected_feats = layer.getFeatures(request)

feats = [ feat for feat in selected_feats ]

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

Al ejecutarlo en la Python Console de QGIS se tiene que las áreas impresas en ella, según el id, sugieren que este produjo los resultados esperados al comparalas con las de la tabla de atributos; tal como se observa en la imagen siguiente:

request2

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 QgsFeatureRequest en PyQGIS

  1. Pingback: Selección avanzada de rasgos con objetos de QgsExpression en 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