Skip to content

Una collezione di applicazioni e risorse per facilitare il riuso dei dati sui confini amministrativi italiani.

License

Notifications You must be signed in to change notification settings

ondata/confini-amministrativi-istat

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OnData - Confini amministrativi italiani

Made with ♥ by OnData v2

Data and open data on forum.italia.it Confini Amministrativi ISTAT on forum.italia.it

Thanks to ISTAT Thanks to ANPR Thanks to OntoPiA

Collezione di dati e utilities per facilitare il riuso dei dati ISTAT e ANPR sui confini amministrativi italiani (versione generalizzata meno dettagliata).

Per approfondimenti e discussione è aperto un thread dedicato su Forum Italia.

Sito ufficiale: https://www.confini-amministrativi.it.

Contenuto del repository

Nel file sources.json ci sono i link a tutti gli shapefile rilasciati da ISTAT dal 1991 elencati in questa tabella, il link all'archivio storico dei comuni di ANPR e le risorse Linked Open Data del progetto OntoPiA.

Lo schema del file di configurazione è descritto nel file sources.schema.json secondo lo standard JSON Schema. La validità del file viene verifica a runtime prima dell'elaborazione. Per validare il file a mano: bash run.sh validate.

Lo script main.py scarica gli archivi zip dal sito ISTAT, li decomprime e li elabora in cartelle nominate con la data di rilascio: dist/api/v2/it/YYYYMMDD/. Scarica anche il file di ANPR e lo arricchisce con i dati ISTAT contenuti negli shapefile.

Al momento sono supportati i seguenti formati di output:

  • ESRI shapefile (ZIP), il formato originario in cui l'ISTAT pubblica i dati ufficiali, ma con le geometrie corrette, la normalizzazione del charset a UTF-8 e la proiezione a EPSG:4326.
  • Comma-separated values (CSV) con la tabella dei dati arricchiti dei territori (UTF-8, virgola come separatore, doppie virgolette come delimitatori di stringa, new line come separatore di riga)
  • JavaScript Object Notation (JSON) con gli stessi dati del CSV
  • GeoJSON con gli stessi dati dello shapefile
  • TopoJSON con gli stessi dati dello shapefile
  • GeoPackage con gli stessi dati dello shapefile
  • GeoParquet con gli stessi dati dello shapefile
  • Geobuf con gli stessi dati dello shapefile
  • SVG con i contorni in grafica vettoriale dello shapefile (linee nere e bianche, sfondo trasparente)
  • PNG con i contorni in grafica raster dello shapefile (linee nere e bianche, sfondo trasparente)
  • WEBP con i contorni in grafica raster dello shapefile (linee nere e bianche, sfondo trasparente)
  • JPEG con i contorni in grafica raster dello shapefile (linee nere su sfondo bianco e bianche su sfondo nero)

Il file di ANPR è quello originale arricchito delle denominazioni e dell'indicazione degli shapefile in cui i comuni sono presenti.

Avvertenza: nel repository è incluso solo il codice sorgente dell'applicazione e non i file generati.

Tutorial

Nella cartella tutorials/ ci sono alcuni how-to che mostrano come usare le risorse di questo progetto in vari ambiti e con vari software:

Se usi queste risorse, contribuisci anche tu con un tutorial!

Risorse disponibili

La tabella seguente riporta tutte le release disponibili con la rispettiva data di generazione.

Release Data di ultima generazione
20240101 2024-04-06
20230101 2024-04-06
20220101 2024-04-06
20210101 2024-03-13
20200101 2024-03-13
20190101 2024-03-13
20180101 2024-03-13
20170101 2024-03-13
20160101 2024-03-13
20150101 2024-03-13
20140101 2024-03-13
20130101 2024-03-13
20120101 2024-03-13
20111009 2024-03-13
20100101 2024-03-13
20090101 2024-03-13
20080101 2024-03-13
20070101 2024-03-13
20060101 2024-03-13
20050101 2024-03-13
20040101 2024-03-13
20030101 2024-03-13
20020101 2024-03-13
20011021 2024-03-13
19911020 2024-03-13

Design e stack tecnologico

L'obiettivo di questo progetto è automatizzare completamente la generazione di risorse geografiche italiane utili in diversi ambiti di mapping e GIS a partire dai dati storici ufficiali rilasciati da ISTAT e ANPR. I task includono il download, l'omogeneizzazione di codifiche e formati, la correzione di errori di geometrie, la generazione di raggruppamenti di territori a tutti i livelli (es. i comuni di una regione), la conversione in diversi formati geografici e la generazione di mappe interattive per una fruizione semplificata di ognuno di essi.

La struttura dell'albero di cartelle di output è conforme allo standard REST delle Web API, per cui il risultato finale è effettivamente una API statica, descritta mediante lo standard OpenAPI.

Tutte le risorse disponibili sono automaticamente raggiungibili grazie alla presenza di file index.json in ogni cartella conformi alla specifica Hypertext Application Language (HAL).

Tutte le cartelle mostrano una preview dei dati geografici che contengono in una mappa interattiva gestita da LeafletJS.

Lo script di generazione è scritto in Python (v3.11) e le sue dipendenze dirette sono elencate nel file requirements.txt.

Oltre a queste si richiede che alcune librerie siano installate nel sistema, in particolare GDAL e SQLite con l'estensione Spatialite.

Per semplificare la portabilità dello script è possibile (e conveniente) eseguirlo in un container Docker, per cui è fornito un Dockerfile con cui fare la build dell'immagine.

Come eseguire l'applicazione

Si consiglia caldamente di usare la versione containerizzata con Docker.

Versione dockerizzata

Modalità consigliata

Clona questo repository con Git: git clone https://github.com/teamdigitale/confini-amministrativi-istat.git. Entra nella cartella appena creata: cd confini-amministrativi-istat/.

L'utility run.sh contiene degli shortcut per gestire più facilmente l'immagine docker dell'applicazione (in ambiente windows si raccomanda l'uso di Git Bash). Per l'elenco di tutti i comandi supportati: bash run.sh help.

Effettua la build delle immagini: bash run.sh build (usa rebuild per non fare uso della cache).

Esegui il container per ogni tipologia di confine amministrativo e per tutte le versioni con bash run.sh generate oppure indicando la singola versione di interesse con bash run.sh generate YYYYMMDD.

Avvertenza: l'esecuzione può richiedere alcune ore o anche molte nel caso dell'elaborazione di tutte le versioni.

Naviga le API e la loro documentazione eseguendo un web server in locale: bash run.sh serve [PORT], la porta di default è la 8080.

Esecuzione diretta

Modalità altamente sconsigliata, le dipendenze indirette sono molte e si reggono su un equilibrio precario tra le versioni di ogni libreria.

Clona questo repository con Git: git clone https://github.com/teamdigitale/confini-amministrativi-istat.git. Entra nella cartella appena creata: cd confini-amministrativi-istat/.

Il file requirements.txt elenca tutte le dipendenze necessarie a eseguire l'applicazione. Si consiglia di operare sempre in un ambiente isolato creando un apposito virtual environment.

Con Poetry è sufficiente entrare nel virtualenv con poetry shell e la prima volta installare le dipendenze con poetry install come descritte nel file pyproject.toml.

Infine, per eseguire l'applicazione ed elaborare tutte le versioni: python main.py. Per specificare una singola versione di interesse: SOURCE_NAME=YYYYMMDD python main.py.

Specifiche OpenAPI

Il file dist/api/v2/openapi.v2.yml contiene le specifiche conformi allo standard OpenAPI v3.1.

Con bash run.sh serve puoi navigare la documentazione in maniera interattiva sia dalla homepage (http://localhost:8080), sia come pagina standalone (http://localhost:8080/api/v2/).

Homepage

L'homepage del sito offre una preview dei dati su mappa interattiva (solo desktop) e la possibiltà di scaricare la risorsa scelta mediante form. Contiene anche la documentazione completa dell'API e la possibilità di navigarla interattivamente grazie a Swagger UI.

Per il codice sorgente dell'homepage si rimanda al README dedicato.

Sviluppo

Con bash run.sh dev YYYYMMDD è possibile eseguire lo script main.py all'interno di un container senza effettuare una nuova build dell'immagine.

Per lo sviluppo dell'homepage si rimanda al README dedicato.

Come contribuire

Ogni contributo è benvenuto, puoi aprire una issue oppure proporre una pull request, così come partecipare alla discussione su Forum Italia. Per favore leggi interamente e con attenzione il Codice di Condotta e le Regole di Contribuzione prima di farlo.

Ringraziamenti

Ringraziamo il Team per la Trasformazione Digitale per aver ospitato questo progetto nella sua primissima fase di ideazione e realizzazione.

Un ringraziamento anche a Datafactor Agrigento per il supporto e il prezioso contributo di finalizzazione del file di configurazione sources.json.

Ringraziamo anche Dataninja srl per il lavoro pionieristico sul tema, Density Design che con RAWGraphs ha fatto emergere per la prima volta l'esigenza di un'API di questo tipo e SparkFabrik srl per aver reso possibile la finalizzazione del progetto.

Licenza

L'uso di questo software è concesso sotto licenza GNU Affero General Public License.

Languages

  • Python 55.4%
  • JavaScript 17.0%
  • HTML 14.9%
  • Jinja 6.4%
  • Shell 5.7%
  • Dockerfile 0.5%
  • CSS 0.1%