Usar parámetro de entrada como variable en expresión

Sep 04 2020

En mi proyecto tengo una capa vectorial y una capa ráster. Quiero eliminar todas las características de la capa vectorial donde la ubicación de la característica tiene un valor de altura de 0 en la misma ubicación en la capa ráster.

Esto funciona bien usando "Seleccionar por expresión" y usando la siguiente expresión:

raster_value('layerid' ,1,make_point(x($geometry),y($geometry))) = 0

y luego reemplazándolo 'layerid'con el ID de la capa ráster.

Quiero automatizar un flujo de trabajo largo con el modelador gráfico, donde esta es una de las tareas.

Actualmente tiene este aspecto:

Estoy tratando de usar "Extraer por expresión", con la misma expresión anterior, y funciona siempre que layeridse cambie el parámetro antes de ejecutar el modelo; sin embargo, quiero usar la entrada de la capa ráster heightmappara obtener la ID. Al igual que:

Esto no funciona. La expresión devuelve nulo cada vez. También intenté usar eval(@heightmap), pero no tuve suerte.

Como un intento de solución, he intentado usar el algoritmo "Cargar capa en el proyecto" y luego usar su variable de salida en la expresión, pero esto hizo lo mismo.

¿Cómo puedo poner el layerid de la heightmapentrada en la expresión correctamente?

Respuestas

1 henrikx Sep 07 2020 at 04:09

No he encontrado una solución al problema de hacer referencia a una entrada de modelo en la expresión, sin embargo, encontré una solución que resolvió lo que estaba tratando de hacer.

El algoritmo "Estadísticas zonales" puede agregar atributos a cada característica de la capa vectorial que puede contener el valor medio de la capa ráster para el área poligonal.

Esto me permitió usar ese campo como valor de comparación en el algoritmo "Extraer por expresión"

Para garantizar que las "Estadísticas zonales" se ejecuten antes que "Extraer por expresión", las "Estadísticas zonales" se pueden configurar como una dependencia.

Tenga en cuenta que también puede utilizar "Extraer por atributo" en lugar de "expresión".