Usando alcune "variabili temporanee" nell'espressione del tipo di livello simbolo del generatore di geometria QGIS?


10

Facendo uso del Geometry generatortipo di livello del simbolo, disegno rettangoli di dimensioni @nv_bg_w(larghezza) e @nv_bg_h(altezza) (variabili di progetto) per allineare le caratteristiche, a coordinate text_x, text_y(attributi, se non NULL) o in alternativa al centro della linea con la seguente espressione:

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

Come si può vedere x(point_on_surface($geometry))e y(point_on_surface($geometry))accadere molto spesso. Almeno in questo semplice esempio, questo rende il codice più difficile da leggere di quanto dovrebbe.

Quindi la mia domanda è: c'è un modo per memorizzare le ultime espressioni in alcune variabili temporanee, qualcosa come (pseudocodice):

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

Jochen, hai trovato una soluzione al problema descritto nella tua domanda? Sto affrontando un'esigenza simile e sto cercando la stessa cosa
iulian

Risposte:


4

Sì, c'è un modo in QGIS 3.x. È possibile impostare una variabile mediante la with_variable()funzione all'interno di un'espressione. Quindi mi aspetto che l'espressione qui sotto funzionerà per te.

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

Documentazione nella finestra di dialogo delle espressioni:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.