QGIS 지오메트리 생성기 심볼 레이어 타입 표현식에서 일부 '임시 변수'를 사용하십니까?


10

의 사용 메이커 Geometry generator심볼 층형를, I는 크기의 사각형 그릴 @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

Jochen, 질문에 설명 된 문제에 대한 해결책을 찾았습니까? 나는 비슷한 요구에 직면하고 있으며 같은 것을 찾고 있습니다
iulian

답변:


4

예, QGIS 3.x에는 방법이 있습니다. with_variable()표현식 내에서 함수를 사용하여 변수를 설정할 수 있습니다 . 따라서 아래 표현이 도움이 될 것으로 기대합니다.

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)|| '))'
        )
    )
)

표현식 대화 상자의 문서 :

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.