Tutorial

Esempio di utilizzo dei Virtual Layer in QGIS

I Virtual Layer sono stati introdotti in QGIS dalla versione 2.14. Essenzialmente si tratta di costruire dei vettori a partire da interrogazioni avanzate tramite il linguaggio SQL avendo la possibilità di utilizzare come input, i vettori caricati in QGIS. I vantaggi risiedono nel fatto di non dover per forza passare attraverso un database spaziale (Spatialite, PostGIS, ecc.) per creare le interrogazioni.

Veniamo all’esempio. Sul gruppo Facebook GIS ITALIA è stato posto il seguente quesito:

Buongiorno, avrei bisogno di un consiglio. Io ho 4 layer puntuali che possiedono gli stessi identici campi, tranne che per un campo, denominato “X” in ognuno dei layer, che contiene dati parziali in ciascun layer… Solo integrando i 4 campi “X” parziali potrei avere il campo “X” completo. Come posso fare? (perdonate la povertà della spiegazione)

Nei commenti successivi si è intuito che i 4 layer hanno la stessa geometria (i punti sono uguali) e i medesimi campi. L’unica differenza è che per un campo le informazioni sono contenute in modo sparso nei 4 layer e quindi si vuole trovare un modo per unirli riducendo al massimo i passaggi.

Per la soluzione abbiamo pensato che una possibile via consiste nell’utilizzo dei Virtual Layer. Abbiamo creato un dataset di punti di esempio contenete 4 layer (layerA, layerB, layerC, layerD) con le medesime geometrie (19 punti). Tutti e 4 i layer hanno il campo in comune ID_PUNTO e il campo parziale X.

Per creare un Virtual Layer bisogna recarsi in Layer->Crea Vettore->Nuovo Layer Virtuale. Nella schermata che si presenta bisogna inserire la query SQL.

SELECT a.*, b.X, c.X, d.X
FROM layerA as a
JOIN layerB as b ON (a.ID_PUNTO=b.ID_PUNTO)
JOIN layerC as c ON (a.ID_PUNTO=c.ID_PUNTO)
JOIN layerD as d ON (a.ID_PUNTO=d.ID_PUNTO)

La query opera nel seguente modo: Seleziona dalla tabella a (FROM layer A as a) tutte le colonne (l’asterisco indica tutte le colonne), dalle tabelle b-c-d solo la colonna X attraverso un join dove il campo ID_PUNTO di a è uguale al campo ID_PUNTO di b, il campo ID_PUNTO di a è uguale al campo ID_PUNTO di c e il campo ID_PUNTO di a è uguale al campo ID_PUNTO di d. Clicchiamo su Aggiungi e verrà creato un layer virtuale che è il risultato della nostra interrogazione. Aprendo la tabella attributi possiamo verificare il risultato.

Il layer virtuale ha 19 records (19 punti) ha tutti i campi del layerA che sono in comune con gli altri layer e ha 4 campi X con le informazioni derivanti da tutti e 4 i layer. I Virtual Layer ricalcano in qualche modo il concetto di VIEW di SQLITE e quindi non sono modificabili. Per operare ulteriormente sul layer è necessario esportarlo come Shapefile (es. layerSOMMA.shp). Per riunire il campo X in un unico campo basta aprire il calcolatore campi dello shapefile appena salvato, aggiungere un nuovo campo di tipo testuale chiamato XSOMMA e digitare la seguente espressione:
concat( "X" , "X_1" , "X_2" , "X_3" )

Il risultato finale:

N.B. Si potevano fare dei join multipli anche direttamente in QGIS, ma è tutto un po’ più meccanico perché quando si ha a che fare con diversi layer (decine e decine) è molto più pratico modificare un codice che eseguire passaggi manuali.

Alla prossima!

 

Please follow and like us:

What others say about this post? (1 Comments)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

×