QGIS: minima distanza tra punti e linee

Con questo articolo rispondo al quesito posto su GIS Italia:

Buongiorno a tutti!
sono alle prese con il seguente dilemma:
Ho una serie di punti ed una serie di linee: voglio calcolare la distanza ortogonale tra ogni punto e la linea più’ vicina.

Un modo rapido per risolvere il problema all’interno di QGIS è attraverso l’uso dei virtual layer (occorre conoscere le basi del SQL e di SpatiaLite).

Prenderò come esempio gli assi stradali (layer: grafo_stradale) e dei punti della pubblica illuminazione (layer: punti):

N2
Screenshot QGIS

dopo aver importati i due i layer in QGIS, aggiungere un virtual layer:

N9
QGIS – virtual layer

si aprirà una maschera, importare i due layer presenti nella TOC e scrivere il seguente script SQL (NB: occorre personalizzare ID, che nel caso specifico è pk_uid):


select p.pk_uid, ST_ShortestLine (l.geometry, p.geometry) as geometry ,st_length (ST_ShortestLine (l.geometry, p.geometry)) as lungh_m
from punti as p, grafo_stradale as l
group by p.pk_uid
having min ( st_length(shortestline (p.geometry, l.geometry)))

la maschera:

N10
creare virtual layer

fare una ‘Prova‘, se compare un messaggio ‘NO error‘  cliccare su OK; ‘magicamente’ QGIS creerà, per ogni punto, un segmento di minima distanza (in rosso) tra punto e linea più vicina:

 

 

N11
magia del virtual layer

nello script di sopra viene calcolata anche la lunghezza del segmento minimo (cosa superflua, in quanto QGIS lo fa anche etichettando) che comparirà nella tabella attributi del virtual layer:

N12
tabella attributi virtual layer

output_BnqfzZ
gif

dati e progetto.

video:


Note finali: il virtual layer è uno strumento molto utile ma necessita la conoscenza di SQL, dialetto Spatialite o PostGIS. Esso rappresenta quello che in un DBMS viene chiamato vista o view, cioè una tabella virtuale che risiede solo in memoria e non nel disco fisso: questo ha dei vantaggi e svantaggi: uno per tutti, è un vettore dinamico che si aggiorna automaticamente al cambiar della geometria dei layer che usa; svantaggio più evidente, è lento se le feature sono molte.


Buon lavoro.

conQGIStando!!!

Pubblicità

Un pensiero su “QGIS: minima distanza tra punti e linee

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.