Code Monkey home page Code Monkey logo

ondata / confini-amministrativi-istat Goto Github PK

View Code? Open in Web Editor NEW

This project forked from teamdigitale/confini-amministrativi-istat

14.0 3.0 3.0 73.24 MB

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

Home Page: https://www.confini-amministrativi.it

License: Other

Python 55.49% Dockerfile 0.50% Shell 5.67% JavaScript 16.98% CSS 0.08% HTML 14.92% Jinja 6.36%
gis istat italia anpr api csv geobuf geojson geopackage geoparquet json ondata ontopia openapi shapefile topojson

confini-amministrativi-istat's Introduction

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.

confini-amministrativi-istat's People

Contributors

aborruso avatar gaetanoc01 avatar jenkin avatar tegola avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

confini-amministrativi-istat's Issues

Modalità di pubblicazione e distribuzione

Al momento la generazione e la pubblicazione dei file viene effettuata dal server dell'associazione. La generazione massiva è stata fatta una sola volta, in caso di aggiunta di nuovi formati (vedi #15 e #16) è sufficiente rilanciarla in modalità incrementale, mentre i nuovi rilasci avvengono una volta l'anno.

I file prodotti sono circa 4,8 milioni in 210 mila cartelle per un totale di 160 GB (circa 6,5 GB per anno). Sarebbe utile servirli da una CDN performante (e a costo accessibile) con i seguenti requisiti: http e https, CORS abilitati, statistiche di traffico anonime, upload incrementale.

Aggiungere formato SVG

Sarebbe interessante offrire anche un rendering vettoriale dello shapefile in formato SVG con l'aspect ratio del bounding box della geometria. In questo modo si potrebbe embeddare facilmente in una pagina web come immagine.

Tasks

Docker build non funziona

executor failed running [/bin/sh -c cd /tmp/libspatialite-5.0.0-beta0 && ./configure --enable-rttopo=yes --enable-gcp=yes && make -j8 && make install-strip]: exit code: 1

Sto girando docker su mac intel, spero non conti..

Silenziare i warning di `fiona._env`

Durante la conversione il log si riempie di righe di questo tipo.

WARNING:fiona._env:Value 111753271.355000004 of field shape_area of feature 253 not successfully written. Possibly due to too larger number with respect to field width

Il filterwarnings non sembra avere effetto.

import warnings
warnings.filterwarnings('ignore', message=r'.*due to too larger number with respect to field.*')

Valutare impatto utilizzo di dati non generalizzati di Istat

L'utente di solito userà in produzione il dato non generalizzato.

Valutare se renderlo disponbile al download, in formati ottimizzati e compressi.
In visualizzazione non vale la pena e non ha senso mettersi a generare pure un archivio in vector tiles

Mappa - facendo pan la retinatura del comune scopre una fascia a sud della mappa

La fascia scoperta non sembra più appartenere al comune.
Complimenti Alessio è sempre bello vedere le cose belle che fai :)
Schermata 2024-02-02 alle 19 44 23

Tasks

Aggiungere formati immagine raster (PNG, JPG, WEBP)

Implementata la #15 sarebbe interessante generare anche immagini raster degli shapefile, in questo caso in due varianti (nero su sfondo bianco / trasparente e bianco su sfondo nero / trasparente) e a varie risoluzioni verticali.

Tasks

Ripensare il design della one page

Il proposito della one page è presentare il progetto, avere una preview e scaricare i dati, navigare la documentazione dell'API. Andrebbe progettata da qualcuno del mestiere!

Elenco di incongruenze ed errori riscontrati nei dati ufficiali

Usiamo questa issue per segnalare errori nei dati durante la generazione dei file.

Descrizione Vedi anche
Alcuni shapefile hanno degli errori nelle geometrie #13
Alcune unità territoriali sovracomunali non hanno comuni associati nella stessa release in cui compaiono #6
La release 20011021 è l'unica ad avere file RipGeo2001_g invece che RipGeo2001_g_WGS84 come in tutti gli altri casi

Custom shapefile builder

Con questa API è possibile costruire un'applicazione web che permetta di confezionare interattivamente e scaricare uno shapefile personalizzato, con una selezione dei confini amministrativi di interesse.

Esempio: seleziono tre regioni qualsiasi, una con suddivisione provinciale e le altre due con suddivisione comunale. Scarico il geojson.

Tasks

Liste valori non ordinate

Nella interfaccia web di selezione, la lista valori associata al campo "Territory" non è ordinata né per area geografica né alfabeticamente. Ad esempio, scegliendo nel campo "Division" il valore "Unità territoriali sovracomunali", in coda si ritrovano i seguenti valori:
Sassari, Nuoro, Cagliari, Pordenone, Isernia, Oristano, Biella, Lecco, Lodi, Rimini...
Se nel campo "Division" si seleziona il valore "Comuni", questi ultimi sembrano ordinati a livello provinciale

Errori riscontrati (e corretti) nelle geometrie

Release ripartizioni-geografiche regioni unita-territoriali-sovracomunali comuni
20240101 3 1 1 3
20230101 2 2 4 10
20220101 2 2 4 10
20210101 2 2 4 10
20200101 2 2 4 10
20190101 2 2 4 10
20180101 2 2 4 10
20170101 2 2 4 10
20160101 2 2 4 10
20150101 2 2 4 10
20140101 2 2 4 10
20130101 2 2 4 10
20120101 2 2 4 10
20111009 2 2 4 9
20100101 2 2 3 9
20090101 2 2 4 9
20080101 2 2 4 9
20070101 2 2 4 9
20060101 2 2 4 9
20050101 2 2 4 9
20040101 2 2 4 9
20030101 2 2 4 9
20020101 2 2 4 9
20011021 0 0 0 4
19911020 0 0 0 1

Abilitare open-graph e twitter card

<!-- HTML Meta Tags -->
<title>OnData - Confini Amministrativi Italiani</title>
<meta name="description" content="">

<!-- Facebook Meta Tags -->
<meta property="og:url" content="https://confini-amministrativi.it/">
<meta property="og:type" content="website">
<meta property="og:title" content="OnData - Confini Amministrativi Italiani">
<meta property="og:description" content="">
<meta property="og:image" content="">

<!-- Twitter Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="confini-amministrativi.it">
<meta property="twitter:url" content="https://confini-amministrativi.it/">
<meta name="twitter:title" content="OnData - Confini Amministrativi Italiani">
<meta name="twitter:description" content="">
<meta name="twitter:image" content="">

Traduzioni della documentazione

Abbiamo tenuto tutto in italiano perché così era iniziata e perché la natura dei dati indica un target prettamente italiano non necessariamente tecnico. Ma un po' di traduzioni ci starebbero bene per dare visibilità internazionale al progetto.

Aggiungere le sotto-suddivisioni amministrative per ripartizione geografica, regione, _provincia_

In questo momento ci sono le suddivisioni amministrative dell'Italia a vari livelli, quindi un file con tutti i comuni, uno con le province, le regioni e le ripartizioni geografiche.

Ci vorrebbero gli stessi livelli di suddivisione, ma per ogni suddivisione superiore:

  • per ogni ripartizione geografica: regioni, province, comuni
  • per ogni regione: province, comuni
  • per ogni provincia: comuni

Infine anche i file con i singoli perimetri di ripartizioni geografiche, regioni, province, comuni.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.