1 votos

Iteración sobre características seleccionadas en QGIS Processing

En la versión 2.0 podía iterar sobre las características seleccionadas utilizando el siguiente script.

import processing
features = processing.getfeatures(layer)
for feature in features:
  #Do whatever you need with the feature

Sin embargo, esto no parece funcionar cuando actualicé mi QGIS a v2.2. Hay alguna nueva forma de iterar vectores seleccionados?

3voto

GreyCat Puntos 146

Puede utilizar las soluciones dadas en Uso de algoritmos de procesamiento desde la consola :

Pero si nos fijamos en lo que hay en el módulo (versión 2.2):

import processing
dir(processing)

no más getfeatures() o getFeatures()

Puede controlar esto con una pequeña función adaptada de Script de Python para filtrar por patrón de texto los métodos de Clases en PyQGIS de José Guerrero

import re
def get_patt(keyword, L):
    return [item for item in dir(L) if re.search(keyword,item)]
get_patt("getfeatures",processing)
[]
get_patt("getFeatures",processing)
[]

pero lo hay:

get_patt("features",processing)
['features']

Así que el comando es:

features = processing.features(layer)

Pero para mí, es más fácil con:

sin procesar:

layer = qgis.utils.iface.activeLayer()

con procesamiento:

layer = processing.getObject("name_of_the_layer")

Todas las características:

for feat in layer.getFeatures():
     geom= feat.geometry()
     attr =feat.attributes()

Sólo funciones seleccionadas:

for feat in layer.selectedFeatures():
     geom= feat.geometry()
     attr =feat.attributes()

y, por ejemplo, una "solución universal":

if layer.selectedFeatureCount():
     geom = [feat.geometry() for feat in layer.selectedFeatures()]
else:
     geom = [feat.geometry() for feat in layer.getFeatures()]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X