Unter Verwendung des Geometry generator
Symbolebene-Typs zeichne ich Rechtecke mit den Abmessungen @nv_bg_w
(Breite) und @nv_bg_h
(Höhe) (Projektvariablen) auf Linien-Features, entweder an Koordinaten text_x, text_y
(Attribute, falls nicht NULL
) oder alternativ in der Mitte der Linie mit dem folgenden Ausdruck:
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)))|| '))'
)
Wie man sieht x(point_on_surface($geometry))
und y(point_on_surface($geometry))
sehr oft vorkommt. Zumindest in diesem einfachen Beispiel ist der Code dadurch schwerer zu lesen als nötig.
Meine Frage lautet also: Gibt es eine Möglichkeit, die letzteren Ausdrücke in einigen temporären Variablen zu speichern, etwa (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
quelle
quelle
Antworten:
Ja, es gibt einen Weg in QGIS 3.x. Sie können eine Variable mithilfe einer
with_variable()
Funktion innerhalb eines Ausdrucks festlegen . Ich gehe davon aus, dass der folgende Ausdruck für Sie funktioniert.Dokumentation im Ausdrucksdialogfenster:
quelle