QGIS – SELEZIONARE TRATTI di rete SPAZIALMENTE VICINE

Quesito posto sul gruppo Facebook GIS Italia:

Ciao a tutti. Chiedo il vostro aiuto. Ho uno shp di linee che rappresentano una rete di condotte gas metano, quindi la tabella attributi riporta record come materiale, tipo (bassa o media pressione) e lunghezza. C’è anche il campo che riporta l’informazione “in ispezione” che é un campo numerico dove 1 vuol dire tratto ispezionato e 0 non ispezionato. Ho tematizzato con colori differenti la rete ispezionata e quella non ispezionata a seconda della bassa e della media pressione. Adesso vorrei includere (quindi far avere lo stesso colore) ai tratti di rete più vicini spazialmente (ndr: hanno almeno un punto in comune) a quelli non ispezionati, perché devo raggiungere una percentuale sul totale delle lunghezze da far ispezionare. C’è un modo senza che io lo faccia con la selezione a mano?avete idee?grazie mille a chi mi risponderà.

Il quesito è molto interessante e allo stesso tempo non di rapida risoluzione con i normali strumenti messi a disposizione da un GIS desktop e per questo motivo consiglio sempre di utilizzare database, in particolare spatialite.

Non avendo a disposizione dei dati devo crearli da zero, seguendo il testo del quesito, ecco il risultato:

Immagine 5
rete

l’obiettivo è quello di selezionare i tratti di condotta che hanno un punto in comune (quindi spazialmente più vicini) con i tratti ispezionati (cioè valore in tabella attributi):

per risolvere il quesito, tutto all’interno di QGIS, utilizzo i virtual layer e creo il seguente strato:

Immagine 8
virtual layer


select distinct l2.id,l2.geometry, l1.ispezione
from
(select * from rete_gas_tratti where ispezione =1) l1,
(select * from rete_gas_tratti where ispezione =0) l2
where st_touches (l1.geometry, l2.geometry) =1

view raw

select.sql

hosted with ❤ by GitHub

ottengo un altro layer cosi fatto:

Immagine 9
tratti di rete non ispezionate ma spazialmente vicine

i tratti visualizzati nel nuovo layer rappresentano i tratti di condotta NON ispezionati ma spazialmente vicini (un vertice in comune) ai tratti ispezionati.

ora non ci resta che fare un semplice join tra il vettore iniziale (rete_gas_tratti) e il virtual layer, utilizzando il campo ID come campo unione e poi popolare il campo ispezione, del primo layer, con un valore (per esempio 2) in funzione del join; cosi facendo il campo ispezione risulta popolato da 1 = ispezionato e da 2= da ispezionare perché spazialmente vicino; ecco il risultato:

Immagine 14
risultato atteso

Non faccio tutti i passaggi cosi un mio caro amico resta contento.


NOTE FINALI: tutti questi passaggi sono ottimizzati per utilizzare solo QGIS, una alternativa sarebbe quella di importare i dati in un database, per esempio spatialite, e rendere il tutto più veloce.


 

Buon lavoro

dati e progetto QGIS 3.0

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.