Korzystając z Geometry generator
typu warstwy symbolu, rysuję prostokąty o wymiarach @nv_bg_w
(szerokość) i @nv_bg_h
(wysokość) (zmienne projektu) do elementów linii, albo na współrzędnych text_x, text_y
(atrybuty, jeśli nie NULL
), albo alternatywnie na środku linii za pomocą następującego wyrażenia:
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)))|| '))'
)
Jak widać x(point_on_surface($geometry))
i y(point_on_surface($geometry))
występują bardzo często. Przynajmniej w tym prostym przykładzie powoduje to, że kod jest trudniejszy do odczytania niż musiałby.
Moje pytanie brzmi: czy istnieje sposób na przechowywanie tych ostatnich wyrażeń w niektórych zmiennych tymczasowych, na przykład (pseudokod):
@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
źródło
źródło
Odpowiedzi:
Tak, istnieje sposób w QGIS 3.x. Możesz ustawić zmienną za pomocą
with_variable()
funkcji w wyrażeniu. Więc oczekuję, że poniższe wyrażenie będzie dla ciebie działać.Dokumentacja w oknie dialogowym wyrażenia:
źródło