Haciendo uso del Geometry generator
tipo de capa de símbolo, dibujo rectángulos de dimensiones @nv_bg_w
(ancho) y @nv_bg_h
(alto) (variables de proyecto) para entidades de línea, ya sea en coordenadas text_x, text_y
(atributos, si no NULL
) o alternativamente en el centro de la línea mediante la siguiente expresión:
geom_from_wkt(
'POLYGON((' ||
COALESCE("text_x", x(point_on_surface($geometry))) ||' '|| COALESCE("text_y", y(point_on_surface($geometry))) || ','||
(to_real(COALESCE("text_x", x(point_on_surface($geometry)))+ @nv_bg_w )) ||' '|| COALESCE("text_y", y(point_on_surface($geometry))) || ','||
(to_real(COALESCE("text_x", x(point_on_surface($geometry)))+ @nv_bg_w )) ||' '|| (to_real(COALESCE("text_y", y(point_on_surface($geometry))))- @nv_bg_h ) || ','||
COALESCE("text_x", x(point_on_surface($geometry))) ||' '|| (to_real(COALESCE("text_y", y(point_on_surface($geometry))))- @nv_bg_h ) || ','||
COALESCE("text_x", x(point_on_surface($geometry))) ||' '|| COALESCE("text_y", y(point_on_surface($geometry)))|| '))'
)
Como puede verse x(point_on_surface($geometry))
y y(point_on_surface($geometry))
ocurrir muy a menudo. Al menos en este simple ejemplo, esto hace que el código sea más difícil de leer de lo que debería.
Entonces mi pregunta es: ¿Hay alguna forma de almacenar las últimas expresiones en algunas variables temporales, algo como (pseudocódigo):
@mx=x(point_on_surface($geometry))
@my=y(point_on_surface($geometry))
geom_from_wkt(
'POLYGON((' ||
... #and so on
qgis
symbology
expression
geometry-generator
Jochen Schwarze
fuente
fuente
Respuestas:
Sí, hay una manera en QGIS 3.x. Puede establecer una variable mediante la
with_variable()
función dentro de una expresión. Así que espero que la expresión a continuación funcione para ti.Documentación en la ventana de diálogo de expresión:
fuente