Используя Geometry generator
тип слоя символов, я рисую прямоугольники размеров @nv_bg_w
(ширина) и @nv_bg_h
(высота) (переменные проекта) для линейных объектов, либо в координатах text_x, text_y
(атрибуты, если нет NULL
), либо, в качестве альтернативы, в центре линии следующим выражением:
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)))|| '))'
)
Как видно x(point_on_surface($geometry))
и y(point_on_surface($geometry))
встречаются очень часто. По крайней мере, в этом простом примере это делает код труднее для чтения, чем он должен был бы.
Итак, мой вопрос: есть ли способ сохранить последние выражения в некоторых временных переменных, что-то вроде (псевдокод):
@mx=x(point_on_surface($geometry))
@my=y(point_on_surface($geometry))
geom_from_wkt(
'POLYGON((' ||
... #and so on
qgis
symbology
expression
geometry-generator
Йохен Шварце
источник
источник
Ответы:
Да, в QGIS 3.x есть способ. Вы можете установить переменную с помощью
with_variable()
функции в выражении. Поэтому я ожидаю, что приведенное ниже выражение будет работать для вас.Документация в диалоговом окне выражения:
источник