QGIS: raggruppamenti di record

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.

Immagine 5
Limiti amministrativi – clc_1990 – rete esagonale

intersezione tra  grigliato e clc_1990:

Immagine 5
intersezione

la tabella degli attributi dello shapefile intersezione:

Immagine 5
tabella attributi

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:

Immagine 10
shapefile intersezione

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:


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"

view raw

query_group.sql

hosted with ❤ by GitHub

Immagine 1
finestra di dialogo DBmanager – SQL

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.

Immagine 2
selezione tramite attributo – dopo query

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!!

Pubblicità

3 pensieri su “QGIS: raggruppamenti di record

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 Twitter

Stai commentando usando il tuo account Twitter. 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.