Da Facebook Gruppo GIS Campania
Buongiorno a tutti! Sono alle prese con il seguente problema: ho un grigliato (esagonale ndr) a cui devo assegnare la classe di vegetazione più abbondante (in termini di mq). Ho eseguito un intersezione tra il grigliato e la mappa di vegetazione, ora però non riesco a capire come “dire” al calcolatore di campi di scegliermi la categoria di vegetazione più abbondante all’interno della stessa cella (griglia ndr), in quanto all’interno della stessa ci possono essere più poligoni rappresentanti diverse tipologie di vegetazione.
Non avendo a disposizione i dati ho preso come esempio un comune della Toscana e scaricato clc_1990 con il servizio WFS dal portale PNC.

intersezione tra grigliato e clc_1990:

la tabella degli attributi dello shapefile intersezione:

1 – id_esa: identificativo dello shapefile grigliato esagonale;
2 – livello3: campo di classificazione o categoria;
3 – id_clc: identificativo dello shapefile clc_1990;
4 – area_mq: area dei poligoni risultante dall’intersezione.
fin qui nulla di nuovo, sono i dati del quesito.
——–
La domanda, in realtà, è mal posta in quanto non è possibile utilizzare il ‘calcolatore di campi‘ per selezionare una categoria tra tante, il calcolatore di campi lavora sempre per singole righe e mai per raggruppamenti.
Per capire meglio la problematica ecco un esempio:

dalla tabella si evince che la griglia 59 (id_esa) compare 5 volte, cioè all’interno della griglia ci sono 5 categorie diverse (id_clc: 20,21,23,24 e 25); il problema richiede di selezionare la categoria che ha l’estensione maggiore, cioè area_mq più grande.
La soluzione proposta dallo scrivente (nel gruppo di Facebook) è stata quella di utilizzare un database che è lo strumento migliore per lavorare in questi casi.
Siamo davanti ad un caso in cui occorre fare un raggruppamento per attributo (in questo caso id_esa) e utilizzare una funzione di aggregazione (media, max, min ecc…) max. In QGIS è gia preinstallato il database Spatialite quindi basta importare lo shapefile intersezione in un database opportunamente creato.
Creiamo un database spatialite dal ‘browser panel’ di QGIS, poi attraverso il DBmanager importiamo lo shapefile intersezione (inter_esa_clc) all’interno del database; rimanendo in DBmanager eseguiamo la seguente query:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT "inter_esa_clc"."id_esa",Max("inter_esa_clc"."area_mq") as max_area,Count(*) as conteggio | |
FROM "inter_esa_clc" | |
GROUP BY "inter_esa_clc"."id_esa" |

la query restituisce tre campi: id_esa (che è l’identificativo dello shapefile griglia esagonale), max_area (che rappresenta l’area massima del poligono ricadente all’interno della griglia) e conteggio (che conta il numero di poligoni per ogni griglia).
La query può essere caricata come layer in QGIS (vedi immagine di sopra) ed utilizzata come tabella in join con lo shapefile griglia (con campo unione id_esa) e/o con lo shapefile intersezione (con campo unione id_esa) in quest’ultima caso otterremmo anche la categoria prevalente.

NB: solo a questo punto è possibile usare il calcolatore di campi per la selezione dei record di una tabella in quanto esiste, nelle stessa riga, un termine di paragono!!!
Note finali: è di fondamentale importanza tenere presente che il calcolatore di campi di QGIS lavora sempre per singole righe; per effettuare una selezione, utilizzando delle istruzioni condizionali, occorrono dei termini di paragone che devono trovarsi sempre nella stessa riga.
Buon lavoro!!
spiegato benissimo! grazie mille!
"Mi piace""Mi piace"
Ottimo tutorial! Grazie!
"Mi piace"Piace a 1 persona
Grazie a te per aver lasciato un commento!!!
"Mi piace""Mi piace"