Gli ultimi mesi sono stati un po’ caotici. Tralasciando alcune questioni personali (e da un certo punto di vista globali) mi sono concentrato su come creare, aggiornare e modificare delle mappe. Lo scopo è ottenere delle mappe in SVG e PDF utilizzabili offline. E, magari, avere un modo per abbinare dei dati a partire da dei file excel (o csv/json).

Preambolo

Uno dei problemi che mi ritrovo ad affrontare con una certa regolarità riguarda la creazione di mappe tematiche. Per certe ragioni che non sto qui a spiegare preferisco lavorare per quanto possibile offline. Complica le cose ma permette di non dipendere troppo dalla condizione della rete. Nel corso degli anni ho provato varie soluzioni, l’ultima è usare dei file SVG. Il problema è trovare delle mappe ben fatte in questo formato. Per un po’ me la sono cavata con alcuni file di Wikivoyage. Però la realtà ha la pessima abitudine di cambiare in continuazione e quello che era vero un decennio fa può non esserlo più oggi.

Spulciando in rete ho trovato un vecchio articolo di Alessio Cimarelli conservato su archive.org: Mappe perfette in SVG. Nonostante si parli di una tecnica di oramai dieci anni fa ho trovato la lettura molto interessante. Anzi, più che interessante: mi ha indicato una strada da seguire.

Il problema principale e la soluzione rapida

Il mio problema è abbastanza specifico ma la procedura per risolverlo credo possa essere facilmente generalizzata. Quindi:

Come creare dei file GeoJSON partendo da file ShapeFile? Come convertire dei GeoJSON in file SVG?

Senza andare nel tecnico, i passi da fare sono sostanzialmente questi:

  1. procurarsi i file shapefile
  2. estrarre dal file le porzioni di territorio che interessano
  3. eventualmente ridurre la precisione del file per ridurne le dimensioni
  4. salvare questa selezione come file GeoJSON
  5. convertire il file da GeoJSON in SVG
  6. infine se serve correggere le dimensioni e l’impaginazione del file SVG

Messi in fila sono dei punti abbastanza semplici. Ma vale la pena di andare un po’ più nel dettaglio.

Scaricare i file shapefile

Ovviamente dipende da quello che ci serve. Nel mio caso vanno bene i confini amministrativi italiani dell’ISTAT. Oramai da qualche anno l’ISTAT pubblica gli shapefile dei comuni, delle provincie e delle regioni italiane. Scarico la versione generalizzata (quella più leggera) e estraggo i file in una cartella specifica.

Ancora più nello specifico, per quanto riguarda Milano il comune rilascia alcuni open data in vari formati tramite il sito dati.comune.milano.it. Ci sono molte mappe interessanti, spesso già in GeoJSON. A me interessano questi:

Invece riguardo alla regione lombardia è possibile consultare la pagina:

Salvare e controllare i file shapefile

Dopo aver scaricato i vari file posso cominciare a selezionare le porzioni di territorio che mi interessa analizzare. Per farlo posso usare un software GIS. Ce ne sono molti. Nel tempo ho usato 3 diversi programmi, tutti e 3 gratis:

OpenJump l’ho usato un bel po’. Gli altri due meno.

Il procedimento alla base è lo stesso per tutti e 3: si selezionano gli elementi che interessano e li si salva come nuovo file in formato GeoJSON.

Ma prima di tutto occorre controllare che le geometrie siano corrette.

Con QGIS è sufficiente andare sul menù Vector/Geometry Tools/Check Validity. Può capitare di trovare alcune geometrie con l’errore Ring Self-intersection. Per correggerlo è possibile usare Vector/Geoprocessing Tools/Buffer

Non sono preoccupato per la perdita di precisione nelle coordinate geografiche: voglio ottenere un file SVG leggero e facile da maneggiare, anche a costo di perdere le coordinate stesse.

Salvare come GeoJSON

Il prossimo passo è salvare la mappa come GeoJSON. Per farlo mi basta salvare il layer scegliendo il formato che mi interessa. Tra le opzioni disponibili c’è coordinate_precision: posso abbassarlo (per esempio da 15 a 6) per ridurre la precisione delle coordinate e quindi la dimensione del file.

Non sono però ancora soddisfatto. Mi serve un file più piccolo, quindi utilizzo Vector/Geometry Tools/Simplify

Per trovare la giusta dimensione vanno fatte un po’ di prove.