QGIS Geometri üreteci sembol katmanı tipi ifadesinde bazı 'geçici değişkenler' mi kullanıyorsunuz?


10

Yararlanarak Geometry generatorsembol tabaka tipi, Boyutların dikdörtgenler çizmek @nv_bg_w(genişlik) ve @nv_bg_hkoordinatlarında, ya çizgi özelliklerine (yükseklik) (proje değişkenler) text_x, text_y(eğer özelliklere NULL) ya da seçenek olarak, aşağıdaki ifade ile hattın merkezinde:

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

Görüldüğü x(point_on_surface($geometry))ve y(point_on_surface($geometry))çok sık görüldüğü gibi . En azından bu basit örnekte bu, kodun okunması gerekenden daha zor olmasını sağlar.

Yani sorum şu: İkinci ifadeleri (geçici kod) gibi bazı geçici değişkenlerde saklamanın bir yolu var mı:

@mx=x(point_on_surface($geometry))
@my=y(point_on_surface($geometry))
geom_from_wkt(
'POLYGON((' ||
... #and so on

Jochen, sorunuzda açıklanan soruna herhangi bir çözüm buldunuz mu? Benzer bir ihtiyaçla karşı karşıyayım ve aynı şeyi arıyorum
iulian

Yanıtlar:


4

Evet, QGIS 3.x'te bir yol var. Bir değişkeni, with_variable()bir ifadedeki işlev aracılığıyla ayarlayabilirsiniz . Bu yüzden aşağıdaki ifadenin sizin için çalışacağını umuyorum.

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

İfade iletişim penceresindeki belgeler:

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.