Memanfaatkan jenis Geometry generator
simbol layer, saya menggambar segi empat dimensi @nv_bg_w
(lebar) dan @nv_bg_h
(tinggi) (variabel proyek) ke fitur garis, baik pada koordinat text_x, text_y
(atribut, jika tidak NULL
) atau sebagai alternatif di tengah garis dengan ekspresi berikut:
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)))|| '))'
)
Seperti dapat dilihat x(point_on_surface($geometry))
dan y(point_on_surface($geometry))
terjadi sangat sering. Setidaknya dalam contoh sederhana ini, ini membuat kode lebih sulit dibaca daripada yang seharusnya.
Jadi pertanyaan saya adalah: Apakah ada cara untuk menyimpan ekspresi terakhir dalam beberapa variabel sementara, seperti (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
sumber
sumber
Jawaban:
Ya, ada cara di QGIS 3.x. Anda bisa mengatur variabel dengan
with_variable()
fungsi dalam ekspresi. Jadi saya berharap ungkapan di bawah ini akan bekerja untuk Anda.Dokumentasi di jendela dialog ekspresi:
sumber