En utilisant le Geometry generator
type de couche de symboles, je dessine des rectangles de dimensions @nv_bg_w
(largeur) et @nv_bg_h
(hauteur) (variables de projet) pour aligner des entités, soit aux coordonnées text_x, text_y
(attributs, sinon NULL
) soit alternativement au centre de la ligne par l'expression suivante:
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)))|| '))'
)
Comme on peut le voir x(point_on_surface($geometry))
et y(point_on_surface($geometry))
se produire très souvent. Au moins dans cet exemple simple, cela rend le code plus difficile à lire qu'il ne le devrait.
Ma question est donc la suivante: existe-t-il un moyen de stocker ces dernières expressions dans certaines variables temporaires, quelque chose comme (pseudocode):
@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
la source
la source
Réponses:
Oui, il existe un moyen dans QGIS 3.x. Vous pouvez définir une variable au moyen d'une
with_variable()
fonction dans une expression. J'espère donc que l'expression ci-dessous fonctionnera pour vous.Documentation dans la fenêtre de dialogue d'expression:
la source