Sử dụng Geometry generator
loại lớp biểu tượng, tôi vẽ các hình chữ nhật có kích thước @nv_bg_w
(chiều rộng) và @nv_bg_h
(chiều cao) (biến dự án) cho các tính năng của dòng, ở tọa độ text_x, text_y
(thuộc tính, nếu không NULL
) hoặc thay thế ở giữa dòng bằng biểu thức sau:
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)))|| '))'
)
Như có thể thấy x(point_on_surface($geometry))
và y(point_on_surface($geometry))
xảy ra rất thường xuyên. Ít nhất là trong ví dụ đơn giản này, điều này làm cho mã khó đọc hơn nó sẽ phải đọc.
Vì vậy, câu hỏi của tôi là: Có cách nào để lưu trữ các biểu thức sau trong một số biến tạm thời, đại loại như (mã giả):
@mx=x(point_on_surface($geometry))
@my=y(point_on_surface($geometry))
geom_from_wkt(
'POLYGON((' ||
... #and so on