QGIS e la funzione $length

Una delle funzioni più usate in QGIS è quella che ci permette di calcolare la lunghezza di una linea (linestring), la funzione è $length: ma siamo sicuri di usarla bene?

Nella documentazione di QGIS troviamo questa definizione:

Restituisce la lunghezza di una linestring. Se hai bisogno della lunghezza del bordo di un poligono, utilizza invece $perimeter. La lunghezza calcolata da questa funzione rispetta le impostazioni sia dell’ellissoide sia delle unità di misura del progetto corrente. Per esempio, se è stato impostato un ellissoide per il progetto allora la lunghezza calcolata sarà ellisoidica altrimenti se non è stato impostato alcun ellissoide la lunghezza calcolata sarà planimetrica.

Le impostazioni di progetto di default sono rappresentate nello screenshot di sotto (ellissoide WGS84, unità di misura Metri):

impostazioni
impostazioni di progetto di default

Supponiamo di lasciare le impostazioni di default e di utilizzare uno strato lineare con geometria EPSG 4326, facciamo alcune prove:

calcolo lunghezza:

length1
calcolo lunghezza (geometria EPSG 4326)

nonostante la geometria sia in EPSG 4326 (quindi geografico) le impostazioni di progetto convertono la lunghezza in metri;

centroid linee, lungo le linee:

length2
centroid linee

l’espressione usata è:

geom_to_wkt( line_interpolate_point( $geometry, $length/2) )

i punti generati NON sono quelli attesi (centroid) ma, come si evince dallo screenshot, sono all’inizio della linea, questo è dovuto alle impostazioni di progetto: nella espressione, $lenght è in metri mentre la $geometry è in gradi (EPSG 4326).

Per ottenere le coordinate attese (cioè centroid lungo la linea) occorre modificare le impostazioni di progetto nel seguente modo:

length3
modifico impostazioni di progetto

aggiungo altro campo ‘coord_WKT2’ e popolo con la stessa espressione di prima:

length4
centroid lungo le linee

questa volta il punto è quello atteso.

PS: una alternativa che trascura le impostazioni di progetto

geom_to_wkt( line_interpolate_point( $geometry, length($geometry)/2) )

 


NOTE FINALI:  questo esempio fa capire come alcune funzioni dipendono dalle impostazioni di progetto e che questi puo’ influenzare molto l’esito dei nostri calcoli, quindi occhio alle definizioni delle funzioni qui trovate una guida sul calcolatore di campi e tutte le sue funzioni.


 

Buon lavoro

Progetto e dati

Pubblicità

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.