QGISジオメトリジェネレーターシンボルレイヤータイプ式で「一時変数」を使用していますか?


10

Geometry generatorシンボルレイヤータイプを利用して、次の式で、座標(属性でない場合は属性)またはラインの中心のいずれかで、ラインフィーチャに寸法@nv_bg_w(幅)および@nv_bg_h(高さ)(プロジェクト変数)の長方形を描画します。text_x, text_yNULL

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

ヨチェン、あなたの質問で説明されている問題の解決策を見つけましたか?私は同様のニーズに直面しており、同じことを探しています
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.