Cerco un centro di gravità permanente, per rappresentare il pendolarismo tra i Comuni italiani

Come generare/ricavare un punto che rappresenti il centro abitato di un comune e non il suo confine

Andrea Borruso
tantotanto

--

Ho il privilegio di frequentare lo stesso “bar dietro al router” di Günter Richter. L’ultima volta, dopo esserci seduti, mi ha chiesto:

Ciao Andrea, secondo te, c’è un .csv o geojson con tutti comuni, codice ISTAT ma le coordinate sull'edificato e non il baricentro del confine? Pensavo che forse Open Street Map lo ha, ma non lo trovo. Saluti Guenter; — — e viva le arancine e gli arancini !

Gli voglio bene, anche perché riesce a tenere uniti il baricentro di un confine comunale e le arancine e gli arancini.

Il focus è proprio il baricentro, che come si vede sotto non è il centro di Bari 🤣🤣 (chi continua a leggere da qui in poi, lo fa proprio rischio; Massimo Zotti è la mia musa).

Il baricentro — o centroide — di una figura bidimensionale è la “posizione media” di tutti i suoi punti, ovvero la media aritmetica delle posizioni di ciascuno di essi (fonte Wikipedia). Il centroide del limite comunale di 1) Bari cade fuori dal suo centro abitato; la cosa è ancora più evidente per 2) Bitonto il cui centroide è lontano circa 10 km dal centro città.

L’obiettivo di Günter (che sta facendo qualcosa di bello con il caro Vincenzo Patruno — EDIT, qui il frutto del loro lavoro) è quello di trovare un modo per rappresentare i dati aperti sul pendolarismo in Italia, a cura di ISTAT. È un file che contiene i dati sul numero di persone che si spostano tra comuni — o all’interno dello stesso comune — classificate per il motivo dello spostamento, il sesso, il mezzo di trasporto utilizzato, la fascia oraria di partenza e la durata del tragitto.

Una modalità classica è una mappa con delle linee che uniscono punti di partenza e destinazione, con uno stile che dia conto dei “percorsi” di pendolarismo più frequenti.
Sotto ad esempio una mappa per la Sicilia occidentale, in cui il punto di maggior evidenza è il capoluogo regionale (Palermo).

immagine di Guenter Richter

Da dove fare partire le linee? Cosa usare per rappresentare come punto ciò che è un’area (parliamo infatti di dati sui Comuni)?

Una possibilità è quella di usare i centroidi dei limiti comunali, che si possono generare con i software che gestiscono dati geografici.
Però si rischia di avere una visualizzazione un po’ falsata e/o errata. Nel caso dell’immagine di sopra, due esempi forti:

  1. uno di questi punti di partenza/destinazione è a mare (a Ovest). Rappresenta il centroide del Comune di Favignana, il cui territorio corrisponde all'arcipelago delle isole Egadi;
  2. l’area costiera del Comune di Marsala, in cui si svolge gran parte della “vita” di quel territorio, sembra esclusa dal pendolarismo.

In entrambi i casi avviene perché il centroide è il frutto di un calcolo che dipende soltanto dalla forma del limite poligonale comunale. Non è “pesato” su dove vivono le persone.

Creare un punto di riferimento basato sull’”edificato”

Una risposta (anzi diverse risposte) a Günter sono nella sua domanda: per rappresentare meglio il pendolarismo ci si potrebbe basare su un punto di riferimento calcolato sull'edificato e non sul centroide dei limiti amministrativi.

Sono allora necessari i dati sulle caratteristiche di copertura e uso del territorio (in questo caso per tutto il territorio italiano), le cosiddette “carte sull'uso del suolo”.
Come quelle basate sui dati aperti del progetto Corine Land Cover, attivo da quasi 30 anni, con aggiornamenti nel 2000, 2006, 2012, e 2018, in cui l’uso è distinto in 44 classi.
Questi dati sono uno degli output del meraviglioso progetto Copernicus, il programma di osservazione della Terra dell’Unione europea, dedicato a monitorare il nostro pianeta e il suo ambiente a beneficio di tutti i cittadini europei.

NOTA BENE: con l’associazione onData abbiamo lanciato un concorso per articoli giornalistici basati su dati del progetto Copernicus https://ondata.it/j4c.html

Qui sotto un esempio di mappa basata su dati Corine, in cui con i toni “rossastri” sono rappresentati i codici della classe “Urban fabric” (le aree urbane), che contiene al suo interno le sottoclassi “Continuous urban fabric” (con codice 111) e "Discontinuous urban fabric" (codice 112).
Sono le aree in cui vive la maggior parte delle persone: utilizzare dei punti di riferimento basate su queste, per disegnare una mappa come quella di sopra, produrrebbe una rappresentazione migliore (il punto per il Comune di Favignana ad esempio non sarebbe a mare e alla zona costiera del Comune di Marsala verrebbe data la dovuta evidenza).

Quindi per generare questi punti a partire dal layer dei limiti comunali di ISTAT e da quello dell’uso del suolo del progetto Corine, si potrebbe procedere in questo modo:

  • si “ritaglia” l’uso del suolo, basandosi sui limiti comunali;
  • si associa ai poligoni dell’uso del suolo “ritagliato”, il codice comunale corrispondente;
  • si estraggono i poligoni con uso 111;
  • per ogni comune si prende il poligono 111 di area maggiore;
  • per ogni comune, si crea un punto che ricade nel poligono 111 estratto.

In maniera semplificata, per un solo comune, è quanto visualizzato sotto:

È una procedura replicabile con molti strumenti GIS. Per questo tipo di processi trovo di gran comodità lo straordinario mapshaper, con cui ho creato questo script di esempio.

Rispetto a quanto descritto sopra, nello script si tiene in considerazione anche dei poligoni con codice 112 ("Discontinuous urban fabric"), perché ci sono tantissimi comuni italiani in cui non è presente alcun area classificata come "Continuous urban fabric".

In output:

  • i punti che rappresentano le aree “abitate”, per quei comuni per i quali è stato possibile generarli in questa modalità (sono 6700);
  • i poligoni dei comuni associabili a questi punti;
  • i poligoni dei comuni non associabili a questi punti;
  • [EDIT 1] i punti che derivano dalle “località” ISTAT (vedi sotto);
  • [EDIT 2] i centroidi delle sezioni di censimento ISTAT che contengono il Municipio (vedi sotto).

Risultati

La procedura descritta, i dati utilizzati e lo script creato non risolvono pienamente il problema, perché non producono un output per tutti i comuni di Italia. In ogni caso Günter dopo averli ricevuti mi ha scritto:

Comunque i tuoi punti funzionano molto bene, ho comparato in alcune zone con geonames, è i tuoi vincono, mi sa perché sono oggettivi e satellitari :)

In questo modo non è possibile associare un punto a ogni comune di Italia, per varie ragioni:

  • i dati Corine che ho utilizzato hanno una Minimum Mapping Unit (MMU) di 25 ettari. In Italia ci sono comuni minuscoli (con meno di 100 abitanti);
  • ci sono comuni (beati gli abitanti) per i quali non esistono aree classificate (sempre in relazione ai dati qui usati) come “Urban fabric”.

Inoltre questa procedura, anche quando produce un risultato, può creare dei punti comunque problematici.
Un caso è ad esempio legato alla stagionalità. Ci sono comuni di Italia, lontani dal mare, che hanno delle propaggini molto grandi sviluppate lungo costa, a cui corrisponde molto “cemento”; in questo caso l’area di “Urban fabric” più grande potrebbe non corrispondere all'edificato del comune, ma alla sua “espansione marina”. Vale ad esempio per il comune di Agrigento e l’area di San Leone.
Un altro è legato all'espansione de comuni stessi. Ci sono comuni le cui periferie si stanno estendendo all'interno dei limiti comunali di comuni limitrofi; tale espansione alcune volte ha un’area maggiore di quella abitata del comune “invaso”. Vale ad esempio per il comune di Erice, all'interno del quale si sta espandendo quello di Trapani.

[EDIT] 1 — La soluzione “pronta”: le località ISTAT (da un’idea di Lorenzo Perone)

lorenzo perone ha letto la bozza del post (grazie) e mi ha scritto:

Ti propongo un’altro approccio: usare le località ISTAT. Ti allego i capoluoghi dell’Emilia Romagna creati dalle sezioni di censimento ISTAT fuse sulle località e in join con gli attributi delle località aventi valore “CAPOLUOGO”=1

Fantastico! Allora ho aperto la pagina dove si trova (tra le altre cose) lo shapefile delle “Località italiane” — una suddivisione del territorio in centri abitati, nuclei abitati, località produttive e case sparse — e ho scaricato il file Localita_11_WGS84.zip.
Questo layer poligonale contiene il campo CENTRO_CL che è pari ad 1 nel caso la località è il centro capoluogo del comune e 0 altrimenti.

Quindi per creare questi punti di riferimento, basta generarli basandoli su questi poligoni e internamente ad essi.

NOTA BENE:

  • l’encoding del file ISTAT non è documentato (anzi sembra “rotto”), e ci sono alcuni problemi con alcuni nomi dei comuni con carattere accentato. All’output dei punti è stato aggiunto quindi anche il campo PRO_COM_T, con il codice comunale ISTAT (in modo da potergli associare correttamente il nome);
  • il numero dei comuni potrebbe non essere coincidente con quello attuale, perché il file sorgente non credo sia basato sui dati correnti.

Ho scritto ieri sera (22 dicembre 2019) ad ISTAT per i problemi di encoding: mi hanno risposto subito (grazie), confermano quanto segnalato e risolveranno tutto. È un piacere dialogare con la PA.

[EDIT] 2 — La soluzione “pronta”: il centroide della sezione che contiene il Municipio (ISTAT)

Per scrivere questo post ho contattato ISTAT e in particolare gli uffici che si occupano di dati territoriali. È stato un vero piacere: molta disponibilità, gentilezza e attenzione all'interlocutore.

Mi hanno scritto poco dopo la pubblicazione del post, facendomi scoprire una cosa a me ignota (colpa mia), ma anche un po’ nascosta.
Nella pagina con in confini amministrativi — che molti di noi frequentano spesso — c’è una perla nascosta. Si trova nei soli dati del 2011, e soltanto nello zip con i limiti nella versione più dettagliata: un file XLS con le coordinate del centroide della sezione di censimento che contiene il Municipio.
L’ho convertito in GeoJSON.

Sono dati del 2011 (ci sono sicuramente comuni nuovi e comuni non più esistenti) e ci dovrebbero essere anche comuni diffusi su più zone, causa unioni di comuni con sedi del municipio “sparpagliate”.

[EDIT] 3 — La soluzione basata sui dati di popolazione Eurostat

Giorgio Comai ha scritto un bel post in cui descrive in modo curato e dettagliato come ricavare il “centro” di un comune a partire dalla griglia Eurostat sulla distribuzione della popolazione, perché “le città sono dove vive la gente”.

Altri dati e modalità

Ci sono sicuramente altri dati già “pronti all'uso” per ottenere quanto descritto. A me vengono in mente:

  • i dataset di geonames da cui è possibile estrarre il punto che rappresenta i comuni italiani;
  • i dati OpenStreetMap, e in particolare i nodi taggati come place=city, place=town e place=village. Qui ad esempio una query su overpass turbo, per vedere quelli di una certa area.

Anche questi però probabilmente, dopo un’analisi, non risolvono in modo pieno la cosa.

Si potrebbero utilizzare i dati delle sezioni di censimento ISTAT — da incrociare sempre con dati sull’uso del suolo — che in modo molto dettagliato consentono di mappare dove vivono le persone.
Si potrebbe lavorare sui dati del dataset “High Resolution Population Density Maps + Demographic Estimates”, che stima il numero di persone che vivono all’interno di un tassello di una griglia dal passo 30 metri in (quasi) tutti i paesi del mondo.
Usare le zone dell’”Osservatorio del Mercato Immobiliare” dell’Agenzia delle Entrate (grazie Antonio Falciano per lo spunto).
E ancora i dati dell’European Settlement Map, sempre del progetto Copernicus (grazie Maurizio Napolitano per il suggerimento).
O usare l’approccio di Giorgio Comai:

Tutto questo si potrebbe mettere insieme. Ne deriverebbe probabilmente un piccolo costo in termini di tempi di approfondimento dei temi e di processing.

Questo articolo invece descrive per la maggior parte una soluzione semplificata e non “perfetta”. Dopo averci ragionato un po’ con Günter, mi sembrava comunque interessante condividere processi, risultati, strumenti e lista di risorse.
L‘idea di Lorenzo, è senza dubbio quella che ha ispirato la modalità più semplice e completa.

Nel futuro, se vorrò approfondire, inizierò dal leggere lavori come “Defining the economic boundaries of cities”.

Dataset utilizzati

Ho utilizzato questi:

Software usato

  • mapshaper, per creare gli output geografico/spaziali descritti;
  • QGIS, per produrre alcune delle immagini di questo articolo;
  • Visual Studio Code, per scrivere questo articolo in markdown e gestire il repository di lavoro;
  • Inkscape, per le geometrie della GIF animata di sopra;
  • Screencast-O-Matic, per “montare” la GIF animata;
  • Screenpresso, per alcune immagini “annotate” con i pallini rossi.

“Sitografia”

Dopo la pubblicazione del post, stanno arrivando e arrivano suggerimenti di “buone letture” correlate. Le metto qui a seguire:

--

--

Andrea Borruso
tantotanto

#data #maps #GIS #baci #condivisione. Orgoglioso di essere presidente di @ondatait