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
qgis
symbology
expression
geometry-generator
Jochen Schwarze
fonte
fonte
Respostas:
Sim, existe uma maneira no QGIS 3.x. Você pode definir uma variável por meio da
with_variable()
função dentro de uma expressão. Então, espero que a expressão abaixo funcione para você.Documentação na janela de diálogo de expressão:
fonte