Valutazione attuale: 4 / 5

Stella attivaStella attivaStella attivaStella attivaStella inattiva
 
Semplificare le geometrie e minimizzare i file GeoJSON

Come ottenere da un dataset Shapefile un file GeoJSON dalle dimensioni minime: semplificare le geometrie ed eliminare gli spazi dal contenuto del file.

Affinché un mappa web risulti agevolmente fruibile da qualsiasi dispositivo, sia mobile che fisso, connesso ad Internet è necessario che durante la sua realizzazione si presti particolare attenzione alla minimizzazione delle dimensioni di ogni componente utilizzato, dal codice (librerie e plugin JavaScript, fogli CSS, etc.), alle mappe  base, ai dataset geografici e layer vettoriali.

Come è ben noto, GeoJSON è il formato per la codifica di dataset geografici vettoriali (geometrie spaziali e attributi) basato sul formato per lo scambio di dati JSON (JavaScript Object Notation). I layer vettoriali in formato GeoJSON sono utilizzati dalle moderne librerie JavaScript di mappe web dinamiche come Leaflet e OpenLayers.

Spesso, un file GeoJSON è ottenuto dalla conversione di un dataset geografico in formato Shapefile. Se le geometrie del dataset sono dei poligoni che rappresentano, ad esempio, i limiti amministrativi o specifiche aree territoriali, lo shapefile potrà contenere decine di miglia di coordinate che si traducono in un file di grandi dimensioni non adatto alla visualizzazione web. Allora, il primo passo da compiere per ottenere un dataset GeoJSON ottimizzato per le mappe web è quello di ridurre il numero di coordinate preservando quanto più possibile la topologia dei confini territoriali.

In questo esempio ho utilizzato il dataset ISTAT delle Province e della popolazione residente 2011 (ver. generalizzata), disponibile nell'archivio dei Confini delle unità amministrative a fini statistici, in formato shapefile e nel sistema di riferimento WGS84 UTM32N. Lo shapefile ha una dimensione pari a 2,3 MB e contiene oltre 151.000 coordinate di vertici dei poligoni.

Per ridurre il numero di coordinate di un layer vettoriale, in QGIS è disponibile la funzione “Semplifica geometrie” dal menù Vettore > Strumenti geometrie. Questa funzione, se pure efficace, non sempre riesce a dare i migliori risultati in termini di compromesso tra qualità delle forme e dimensione del file semplificato. Allora, insieme a QGIS ho utilizzato lo strumento web mapshaper che mette a disposizione una serie di utili opzioni e più di un algoritmo di semplificazione mostrando dinamicamente le modifiche delle forme poligonali al variare della percentuale di semplificazione.

Ecco la procedura che ho seguito per semplificare le geometrie del dataset delle Province ed ottenere un file GeoJSON dalle dimensioni minime.

Caricare lo shapefile in QGIS e salvarlo nel formato GeoJSON: menù Layer > Salva con nome...:

  • Formato: GeoJSON;
  • Sistema di riferimento: SR predefinito (EPSG4326 – WGS 84);
  • Selezionare i campi da esportare; evitare l'esportazione degli attributi non utili nella rappresentazione della mappa web;
  • Opzioni Layer: COORDINATE_PRECISION = 3; limitare la precisioni delle coordinate a tre cifre decimali.
PCpercaso.com :: QGIS - Esportazione file GeoJSON QGIS- Esportazione del file GeoJSON.
(clicca per ingrandire)

Nell'esempio, ho escluso dall'esportazione i campi "SHAPE_AREA" e "SHAPE_LEN".

In alternativa alla finestra di dialogo di QGIS, per il salvataggio del layer nel formato GeoJSON si potrà utilizzare l'utility a linea di comando ogr2ogr per la conversione di feature tra formati diversi; dalla OSGeo4W Shell il comando sarà:

> ogr2ogr -t_srs EPSG:4326 -f "GeoJSON" -lco COORDINATE_PRECISION=3 dst_file.geojson src_file.shp

dove dst_file.geojson e src_file.shp sono rispettivamente il file di destinazione in formato GeoJSON e lo shapefile di origine.

Il file GeoJSON, ottenuto tramite l'esportazione con ogr2ogr o la sua interfaccia grafica in QGIS, ha una dimensione di 2,84 MB. Ma le geometrie non sono state ancora semplificate e, se apriamo il file con un editore di testo (ad esempio Notepad++), notiamo la presenza di spazi tra i campi di ogni linea.

Carichiamo il file GeoJSON in mapshaper. Nella finestra di dialogo di upload si possono specificare alcune opzioni per la correzione di errori nella topologia. Clic su Simplify per aprire la finestra di dialogo da cui scegliere l'algoritmo di semplificazione. Ho utilizzato l'algoritmo predefnito di 'Visvalingam / weighted area'. Al variare della percentuale di semplificazione (slider Settings) verrà mostrato dinamicamente il risultato sulla topologia del layer. La funzione di zoom sulla mappa aiuta a definire meglio il livello di semplificazione accettata. Nel nostro esempio ho spinto la semplificazione fino al 15%.

PCpercaso.com :: mapshaper mapshaper- Semplificazione geometrie.
(clicca per ingrandire)

Non resta che salvare (Export) il layer semplificato nel formato GeoJSON. Il file così minimizzato ha una dimensione di soli 307 KB. Il numero di coordinate è stato ridotto a 19.156 e sono stati eliminati tutti gli spazi all'interno della struttura del file GeoJSON.

Il risultato del dataset delle Province GeoJSON minimizzato è visibile nella mappa Leaflet. I confini territoriali sono ben approssimati rendendo la mappa leggera nel caricamento e fluida nella visualizzazione.

Se questo articolo ti è piaciuto o ti è stato utile condividilo con i tuoi amici!
Rimani in contatto con noi. Seguici nelle nostre Pagine: