6 votos

Geometría por expresión en QGIS Modeller

Quiero utilizar Geometry by expression en un modelo en el que estoy trabajando pero no he podido averiguar cómo pasar el parámetro del nombre de la capa. Básicamente tengo dos capas de polígonos (A y B) y quiero hacer una diferencia característica por característica usando un atributo compartido. La expresión que tengo a continuación funciona fuera del modelador.

Dentro del modelador, como las dos capas son salidas intermedias, y no una entrada, no sé qué usar para el parámetro nombre de capa ( layerB ).

difference( $geometry, geometry( get_feature( 'layerB', 'attributeB', attribute($currentfeature, 'attributeA'))))

3voto

nuecaster Puntos 128

Me parece que el modelador de procesamiento extremadamente difícil trabajar con ella y no está tan bien documentada como me gustaría. Como mi primera sugerencia no funcionó, tengo un par de sugerencias más.

Esta fue mi primera sugerencia, que no funcionó:

Las capas intermedias de salida suelen denominarse 'Toolname of layername' . Por ejemplo, el resultado de ejecutar el programa clip herramienta en una capa llamada 'vectorlayer', probablemente se llame algo así como 'Clip of vectorlayer' . Puede encontrar el nombre exacto de un salida intermedia añadiendo cualquier algoritmo que le permita elegir la salida intermedia como entrada en un menú desplegable. Anote cómo se llaman las salidas intermedias, y utiliza ese nombre en tu difference() expresión.

Sugerencia número dos:

Me pregunto si el problema podría ser tan simple como que está esperando una cadena para 'LayerB', pero la cadena 'Difference' from algorithm 'Building_frontbuffer' porque tiene comillas simples en su interior. Así que si usas ''Difference' from algorithm 'Building_frontbuffer'' para 'LayerB', creo que se interpretaría como tres cadenas separadas, con un galimatías entre ellas.

  • primera cadena: ''
  • galimatías: Difference
  • segunda cadena: `' del algoritmo '
  • galimatías: Building_frontbuffer
  • tercera cuerda: ''

Si éste es el problema, debe escapar las comillas simples para que la expresión pueda comprender el nombre completo de la capa ( 'Difference' from algorithm 'Building_frontbuffer' ) como una sola cadena.

Según este Q&A, ¿Existe una opción de escape para las comillas simples y los apóstrofes en QGIS? puede poner comillas simples alrededor de una cadena que contenga comillas simples. No creo que funcione, pero vale la pena intentarlo:

''Difference' from algorithm 'Building_frontbuffer''

Observe que la cadena empieza y termina con dos caracteres de comillas simples, no con un carácter de comillas dobles. ( '' es ' dos veces, no " )

Si esto no funciona, pruebe a escapar las comillas simples con \ así:

'\'Difference\' from algorithm \'Building_frontbuffer\''

(Basado en las sugerencias de este Q&A en stackoverflow: Sustitución de un apóstrofo en una cadena .)

Sugerencia número tres:

Como solución, convierta la salida "diferencia" en una capa permanente. Defina el nombre de la capa y la ruta del archivo con una cadena de entrada. De esta forma sabrá exactamente cómo se llama la capa y podrá utilizar el nombre de capa correcto en la expresión.

Sugerencia final:

Si ninguna de las sugerencias anteriores funciona, y no puede encontrar una solución, sólo tiene que terminar el modelo en este punto. Haz que la salida final de tu modelo sea una capa permanente de 'Difference' del algoritmo 'Building_frontbuffer'. Pon el resto de tus pasos del modelo original en un nuevo modelo.

0 votos

Hola @csk, he probado tu sugerencia pero sigo sin conseguir que funcione lamentablemente. El nombre que se muestra para la salida intermedia es 'Difference' from algorithm 'Building_frontbuffer' comillas simples incluidas. He probado diferentes variaciones del nombre, incluso sin las comillas, pero no he tenido suerte.

0 votos

Hola @strythe, siento que mi primera sugerencia no funcionara. He actualizado mi respuesta con algunas sugerencias más. Si alguno de ellos funciona, por favor hágamelo saber cuál era, así que puedo actualizar esto a una respuesta final que podría ser útil a otras personas con un problema similar.

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