Haciendo uso del Geometry generatortipo 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