Utilizando o Geometry generator
tipo de camada de símbolo, desenho retângulos de dimensões @nv_bg_w
(largura) e @nv_bg_h
(altura) (variáveis do projeto) para os recursos da linha, seja nas coordenadas text_x, text_y
(atributos, se não estiverem NULL
) ou, alternativamente, no centro da linha pela seguinte expressão:
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 pode ser visto x(point_on_surface($geometry))
e y(point_on_surface($geometry))
ocorre com muita frequência. Pelo menos neste exemplo simples, isso torna o código mais difícil de ler do que deveria.
Então, minha pergunta é: Existe uma maneira de armazenar as últimas expressões em algumas variáveis temporárias, algo como (pseudocódigo):
@mx=x(point_on_surface($geometry))
@my=y(point_on_surface($geometry))
geom_from_wkt(
'POLYGON((' ||
... #and so on