Gli shapefile ISTAT del 2018 non sono validi, ecco come correggerli con spatialite.

L’ISTAT mette a disposizione i confini amministrativi ai fini statistici per le unità comuni, province e regioni d’Italia, in due versioni: generalizzate e non, cioè poco dettagliate e dettagliate entrambe in formato ESRI shapefile con EPSG 32632 – UTF-8.

Questi strati sono un riferimento ufficiale in quanto li elabora e li distribuisce l’Istituto nazionale di statistica, ente di ricerca pubblico, è il principale produttore di statistica ufficiale a supporto dei cittadini e dei decisori pubblici;

NON ci crederete ma tutti gli strati messi a disposizione hanno delle geometrie non valide secondo i requisiti richiesti dagli standard OGC.

Per scoprire quali geometrie non rispettano i criteri dell’OGC utilizzeremo un famoso DBMS (SQLite) con estensione spaziale Spatialite che è conforme alle specifiche dell’Open GIS Consortium (OGC).

Scarico ed importo gli shapefile presenti nella cartella versione non generalizzata in un database creato con spatialite_gui (che è la versione con interfaccia grafica di spatialite):

Immagine 29
vettori presenti nella versione non generalizzata

verifica sul vettore Comuni:

Immagine 30
Comuni: geometrie non valide, 10 su 7960

risultano 10 comuni con geometria non valida;

lo statement SQL usato è il seguente:

SELECT *
FROM Com01012018_WGS84
WHERE ST_IsValid(geom) <> 1;

per gli altri vettori basterà ripetere lo stesso codice avendo cura di sostituire il nome della tabella in FROM.

Vediamo che tipo di invalidità è presente mediante i messaggi GEOS:

Immagine 34
GEOS messages

lo statement SQL usato è il seguente:

SELECT pro_com, comune, GEOS_GetLastWarningMsg(),
ST_AsText(GEOS_GetCriticalPointFromMsg())
FROM Com01012018_WGS84
WHERE ST_IsValid(geom) <> 1;

siamo finalmente in grado di rivelare la causa dell’invalidità: c’è un autointersecarsi, inoltre siamo in grado di identificare esattamente dove si trova l’autointersezione, con la seguente view evidenziamo i punti invalidi:

CREATE VIEW point_invalid AS
SELECT pro_com, comune, GEOS_GetLastWarningMsg(),GEOS_GetCriticalPointFromMsg() as geom
FROM Com01012018_WGS84_test
WHERE ST_IsValid(geom) <> 1;

registriamo la geometria della view:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only)
VALUES (‘point_invalid’, ‘geom’, ‘pro_com’, ‘com01012018_wgs84’, ‘geom’,1)

ecco l’anteprima dei punti:

Immagine 6
anteprima punti non validi da spatialite_gui

ecco elenco dei Comuni e le coordinate dei punti:



PRO_COM COMUNE GEOS_GetLastWarningMsg() coord_punti
75072 Santa Cesarea Terme Ring Self-intersection at or near point 1308926.0356999999 4476059.9891999997 POINT(1308926.0357 4476059.9892)
75031 Gallipoli Ring Self-intersection at or near point 1265551.0340999998 4472508.2443000004 POINT(1265551.0341 4472508.2443)
74001 Brindisi Ring Self-intersection at or near point 1258539.7858999996 4539825.2137000002 POINT(1258539.7859 4539825.2137)
72001 Acquaviva delle Fonti Ring Self-intersection at or near point 1158442.6376999998 4556057.8583000004 POINT(1158442.6377 4556057.8583)
72040 Sannicandro di Bari Ring Self-intersection at or near point 1154968.4280000003 4561653.8165000007 POINT(1154968.428 4561653.8165)
72037 Rutigliano Ring Self-intersection at or near point 1177064.5067999996 4571209.1926000006 POINT(1177064.5068 4571209.1926)
81019 Santa Ninfa Ring Self-intersection at or near point 841730.11459999997 4190972.9645000007 POINT(841730.1146 4190972.9645)
87009 Bronte Ring Self-intersection at or near point 1028304.0537999999 4195170.1147000007 POINT(1028304.0538 4195170.1147)
111008 Calasetta Ring Self-intersection at or near point 444979.67760000005 4320623.5316000003 POINT(444979.6776 4320623.5316)
90035 La Maddalena Ring Self-intersection at or near point 528108.51559999958 4571486.8072999995 POINT(528108.5156 4571486.8073)

Queste geometrie non valide non permettono di fare delle semplici elaborazioni come, per esempio, l’estrazione dei centroidi:

Immagine 5
estrazione centroidi in QGIS

per correggere le geometrie (dei Comuni) basta eseguire una query di aggiornamento come questa:

UPDATE Com01012018_WGS84
SET geom = MakeValid(geom)
WHERE ST_IsValid(geom) <> 1;

per gli altri vettori basterà ripetere lo stesso codice avendo cura di sostituire il nome della tabella dopo UPDATE;

oppure, per correggerle in una unica soluzione copiare ed incollare il seguente codice:


— per i comuni
UPDATE Com01012018_WGS84
SET geom = MakeValid(geom)
WHERE ST_IsValid(geom) <> 1;
— per le province:
UPDATE ProvCM01012018_WGS84
SET geom = MakeValid(geom)
WHERE ST_IsValid(geom) <> 1;
— per le regioni:
UPDATE Reg01012018_WGS84
SET geom = MakeValid(geom)
WHERE ST_IsValid(geom) <> 1;
— ed infine:
UPDATE RipGeo01012018_WGS84
SET geom = MakeValid(geom)
WHERE ST_IsValid(geom) <> 1;


NOTE Finali: Utilizzo gli shapefile dell’ISTAT da anni (dal 2011) e tutti hanno sempre avuto gli stessi errori, negli stessi punti. Ho scritto una mail a : Informazioni territoriali e sistema informativo geografico email micro.zone@istat.it
stay tuned


 

 

Infinite grazie a Alessandro Furieri, papà di spatialite e instancabile divulgatore.

Grazie ad Andrea Borruso per l’idea e l’incoraggiamento a scrivere questo post.

 


fonte:

https://www.gaia-gis.it/fossil/libspatialite/wiki?name=invalid-geometries

  • spiegazione dell’invalidità by Alessandro Furieri:

http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/SARDEGNA-Shapefile-ed-errori-tp7597799p7597802.html

 

Buon lavoro!!!

 

10 pensieri su “Gli shapefile ISTAT del 2018 non sono validi, ecco come correggerli con spatialite.

  1. Ottimo lavoro da parte di tutti. Dalle mie elaborazioni comunque posso inoltre confermare che i confini amministrativi, contenuti negli strati informativi pubblicati da ISTAT, non sono coerenti con le realta’ locali, quindi necessita prestare attenzione in sede di geo-processamento e analisi.

    Piace a 1 persona

  2. Quando avevo segnalato il problema un anno e mezzo fa mi avevano risposto così:

    “i confini amministrativi a fini statistici sono validati ad una scala variabile, generalmente 1:10.000 e si è stabilita una “tolerance” di 1 metro per la loro produzione; i punti al di sotto di questa tolleranza, pertanto, non sono stati da noi trattati in maniera specifica. Aggiungo, peraltro, che si tratta di confini validi a scopi statistici.”

    "Mi piace"

    1. Ciao,
      scrissi la prima e-mail il 23-marzo -2018, dopo una settimana di silenzio scrissi un’altra mail il 28-marzo: mi risposero subito ma non posso pubblicare il contenuto perché sarebbe troppo umiliante, nella stessa risposta mi chiesero di contattarli telefonicamente per spiegare meglio cosa intendessi per geometrie non valide. Nonostante tutto, anche dopo la telefonata, gli shapefile sono sempre gli stessi e con gli stessi errori.

      ecco il mio tweet:

      "Mi piace"

  3. Pagina interessante anche se in realtà ci sono capitato sopra perché sto cercando di risolvere un diverso problema con gli shapefile ISTAT. Ovvero: vorrei sovrapporre i confini dei comuni (dei cui shapefile si parla in questa pagina) con i confini dei Sistemi Locali del Lavoro (insiemi di comuni). Il problema è che il sistema di coordinate degli shapefile SLL (latitudine e longitudine dei centroidi sono come li vedi in GoogleMaps) sono diversi da quelli dei confini amministrativi dei comuni.

    "Mi piace"

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.