Sử dụng một số 'biến tạm thời' trong biểu thức loại biểu tượng của trình tạo Hình học QGIS?


10

Sử dụng Geometry generatorloạ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))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

Jochen, bạn đã tìm thấy bất kỳ giải pháp cho vấn đề được mô tả trong câu hỏi của bạn? Tôi đang đối mặt với một nhu cầu tương tự và đang tìm kiếm điều tương tự
iulian

Câu trả lời:


4

Vâng, có một cách trong QGIS 3.x. Bạn có thể đặt một biến bằng phương tiện của with_variable()hàm trong một biểu thức. Vì vậy, tôi mong đợi các biểu thức dưới đây sẽ làm việc cho bạn.

with_variable( 'mx', x(point_on_surface($geometry)),
    with_variable( 'my', y(point_on_surface($geometry)),
        geom_from_wkt(
            'POLYGON((' ||
            COALESCE("text_x", @mx) ||' '||  COALESCE("text_y", @my) || ','||
            (to_real(COALESCE("text_x", @mx)+ @nv_bg_w )) ||' '||  COALESCE("text_y", @my) || ','||
            (to_real(COALESCE("text_x", @mx)+ @nv_bg_w  )) ||' '||  (to_real(COALESCE("text_y", @my))- @nv_bg_h ) || ','||
            COALESCE("text_x", @mx) ||' '||  (to_real(COALESCE("text_y", @my))- @nv_bg_h ) || ','||
            COALESCE("text_x", @mx) ||' '||  COALESCE("text_y", @my)|| '))'
        )
    )
)

Tài liệu trong cửa sổ hộp thoại biểu thức:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.