2 votos

"overlay_*" las funciones no funcionan en PyQGIS con la expresión getFeatures()

Estoy tratando de usar overlay_intersects() dentro de una expresión para recorrer las entidades de una capa objetivo que se intersectan con una entidad que tiene cierto "id".

request_string = "overlay_intersects(layer:='"+target_layer_name+"', filter:=id='"+matching_feature_id+"')"
features = current_layer.getFeatures(request_string)

for feat in features:
    print(feat.attribute('name')+" se intersecta con la entidad con id '"+matching_feature_id+"'")

Pero esto no funciona en un bucle, todas las entidades se evalúan como falsas en esta situación.

Si uso la misma expresión en la Calculadora de Campos y configuro un campo como matches con ella, funcionará como se espera: todas las entidades de la capa actual que se intersectan con la que tiene id matching_feature_id en la capa objetivo tendrán su campo matches configurado como true y las demás como false.

Campo matches (booleano) = overlay_intersects(layer:='target_layer_name', filter:=id='matching_feature_id')

  • QGIS: 3.22.7-Biaowiea
  • Python: 3.9.2

2voto

rmm Puntos 21

Debes crear un objeto QgsFeatureRequest() con tu expresión.

Intenta esto:

request_string = "overlay_intersects(layer:='target_layer_name', filter:=id='matching_feature_id')"
request = QgsFeatureRequest().setFilterExpression(request_string)
features = current_layer.getFeatures(request)

for feat in features:
    print(feat.attribute('name')+' intersecta con la característica que tiene el id "matching_feature_id"')

Consulta la documentación de Filtrar una capa con expresiones.

0voto

Steam gamer Puntos 562

Parece que fue causado porque las dos capas estaban utilizando dos proyecciones diferentes (es decir, EPSG4326 y EPSG2154). ¡Reproyecté la primera a EPSG2154 y funcionó!

Sin embargo, estaría feliz de recibir algunas sugerencias de la comunidad sobre por qué PyQGIS no pudo hacerlo mientras que la Calculadora de Campos no tuvo problemas para manejarlo. Me induje en error porque el panel mostraba puntos correctamente colocados uno sobre otro.

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