QGIS ज्यामिति जनरेटर प्रतीक परत प्रकार अभिव्यक्ति में कुछ 'अस्थायी चर' का उपयोग करना?


10

Geometry generatorप्रतीक परत प्रकार का उपयोग करना , मैं रेखाओं की विशेषताओं के आयाम @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

जोहान, क्या आपको अपने प्रश्न में वर्णित समस्या का कोई समाधान मिला? मैं इसी तरह की जरूरत का सामना कर रहा हूं और उसी चीज की तलाश कर रहा हूं
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)|| '))'
        )
    )
)

अभिव्यक्ति संवाद खिड़की में प्रलेखन:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.