Archivio

Posts Tagged ‘Tilemill’

Open data e Open service basati su standard: come ottenere lo shapefile dei Numeri Civici Open Data della Regione Sicilia partendo dai servizi resi disponibili


Tutto è nato da una mail di Andrea Borruso, apparsa sulla lista GFOSS proprio alla vigilia di Natale, in cui si annunciava, da parte della Regione Sicilia e per una serie di comuni, la disponibilità, in modalità WFS, di un dataset dei numeri civici georiferiti.

I servizi sono fruibili direttamente da client diversi, desktop, web, mobile, ecc …. che ovviamente supportino lo standard OGC WFS,  cosa oramai ampiamente diffusa, piuttosto facile da fare e alla portata di un’utenza, seppur tecnica, piuttosto ampia.

Con una chiamata standard è anche possibile avere l’elenco dei comuni per cui sono disponibili i dati dei numeri civici: la chiamata è la seguente:

ogrinfo -ro wfs:"http://map.sitr.regione.sicilia.it/ArcGIS/services/CART_2000/Numeri_Civici/GeoDataServer/WFSServer"

Bello ma, per il mio interesse cioè quello di raccogliere i civici open data disponibili sul panorama nazionale, mancava una visione di insieme che mi fornisse TUTTI i civici a livello regionale.

Ma, essendo tutto basato  su standard, si trattava solo di avere un po di voglia e tempo per fare un interessante (??? 🙂 ) esercizio informatico e “rinfrescare” alcune conoscenze messe un po’ da parte negli ultimi tempi.

Provo a riassumere quanto fatto, primo per mie note personali, ma anche perchè credo / spero possa interessare a chi voglia /debba poter replicare un’esigenza analoga.

Premetto che quello indicato NON è l’unico modo possibile per raggiungere l’obiettivo, ve ne possono essere diversi altri, anche più “eleganti”.

In tutto è organizzato in 3 passi logici.

Step 1: scaricare i dati collegandosi ai servizi

Nota organizzativa: gli eseguibili shell che illustro nel seguito operano nel rispetto di questa organizzazione su file system:

OrganizzazioneCartelle

I servizi sono esposti in WFS e quindi possono essere contattati via chiamata http ottendo in risposta, tra le altre cose, il dato in formato GML.

Purtroppo gli attuali servizi non permettono di ottenere i dati in formati diversi.

In questo caso, essendo 376 i comuni da scaricare, e quindi le chiamate da fare, ho creato un piccolo eseguibile shell, lanciabile da linea di comando, che, usando il comando CURL disponibile in ambiente Linux e/o Windows a seconda delle installazioni (nel mio caso ho utilizzato CygWin …), scaricherà, completamente, tutti i singoli GML, uno per ogni comune.

La chiamata, per un singolo comune è la seguente …

curl "http://map.sitr.regione.sicilia.it/ArcGIS/services/CART_2000/Numeri_Civici/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=CART_2000:NumeriCivici_81008_Erice&SRSNAME=EPSG:4326" -o CiviciComuniSicilia/GML/81008_Erice_4326.gml

Visto che i comuni erano molti ho realizzato un programmino shell, denominato DownloadCiviciByCurl.sh, reso parametrico ….

echo "Download civici $1 ......"
curl "http://map.sitr.regione.sicilia.it/ArcGIS/services/CART_2000/Numeri_Civici/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=CART_2000:NumeriCivici_$1&SRSNAME=EPSG:4326" -o CiviciComuniSicilia/GML/$1_4326.gml
echo "Sleeping for 30 sec: don't load too much the server ...."
sleep 30

il quale è poi richiamabile da un programmino di lancio denominato LauncherDownloadCiviciByCurl.sh

echo "Starting download civici Sicilia ......"
sleep 5
./DownloadCiviciByCurl.sh 81008_Erice
./DownloadCiviciByCurl.sh 83040_Limina
./DownloadCiviciByCurl.sh 87001_Aci_Bonaccorsi
......
......

da completare con l’elenco dei comuni ricavato dall’istruzione ogrinfo mostrata in precedenza.

I files .sh sono mantenuti nella cartella “Work”.

Ecco uno snapshot dell’esecuzione di questo primo passo …

DownloadCiviciSicilia

Step 2: convertire i dati in formato ESRI shapefile

Il mio obiettivo finale era quello di avere un unico file con tutti gli indirizzi georiferiti disponibili per la Regione Sicilia, e quindi dovevo in un qualche modo unire tra loro, geograficamente, i singoli files GML scaricati.

L’aggregazione geografica di più files GML non sembra sia possibile (dopo una veloce ricerca sul web …), e quindi ho deciso di convertire ogni singolo file GML in uno shapefile per poi unificali tra loro in uno step successivo.

Per eseguire l’operazione di cui sopra ovviamente il tool che meglio si adatta sono ancora le librerie GDAL con il seguente comando ogr2ogr

ogr2ogr -f "ESRI Shapefile" 81008_Erice_4326 CiviciComuniSicilia/GML/81008_Erice_4326.gml

Nel preparare questa trasformazione mi sono accorto che lo shapefile prodotto risultava privo del file di proiezione (.prj), e quindi, con una seconda operazione ogr2ogr ho provveduto ad aggiungere allo shapefile prodotto, il file .prj relativo al sistema di riferimento che volevo utilizzare (EPSG: 4326)

ogr2ogr -a_srs EPSG:4326 CiviciComuniSicilia/Shapefile/NumeriCivici_81008_Erice.shp 81008_Erice_4326/NumeriCivici_81008_Erice.shp

Anche in questo caso  ho poi realizzato un programmino shell, denominato ConvertShapefile.sh, reso parametrico ….

echo Convert $1 civici GML into ESRI shapefile .....
ogr2ogr -f "ESRI Shapefile" $1_4326 CiviciComuniSicilia/GML/$1_4326.gml
echo Adding .prj to $1 civici shapefile .....
ogr2ogr -a_srs EPSG:4326 CiviciComuniSicilia/Shapefile/NumeriCivici_%1.shp $1_4326/NumeriCivici_$1.shp
echo Delete temporary files .....
rm -R $1_4326

il quale è poi richiamabile da un programmino di lancio denominato LauncherConvertShapefile.sh …

echo "Starting converting civici Sicilia in shapefiles ......"
./ConvertShapefile.bat 81008_Erice
./ConvertShapefile.bat 83040_Limina
./ConvertShapefile.bat 87001_Aci_Bonaccorsi
......
......

I files .sh sono mantenuti nella cartella “Work”.

Ecco lo snapshot dell’esecuzione di questo secondo passo …

ConvertShapefile

Step 3: creare un unico shapefile di dati

A questo punto non restava che “fondere” insieme i vari shapefile dei singoli comuni in un unico shapefile a livello regionale.

Anche qui viene in aiuto la libreria GDAL con le ogr2ogr che permettono di effettuare questa operazione eseguendo un semplice ciclo: anche in questo caso ho racchiuso il tutto in un programmino shell che ho nominato UnionShapefileComuni.sh

#!/bin/bash
for f in `ls *.shp`
do
echo "Append shapefile " $f " ....."
ogr2ogr -update -append civici_sicilia.shp $f -f "ESRI Shapefile" -nln civici_sicilia
done

Il file .sh è mantenuto nella cartella “Shapefile”.

Ecco uno snapshot dell’esecuzione di questo terzo passo …

Append

Ed ecco che il gioco è fatto, replicabile e, volendo,  completamente automatizzabile mettendo i vari passi in un unico shell.

Il risultato è il seguente:

Sicilia1

Sicilia2

L’intero dataset è scaricabile e disponibile nel rispetto delle licenze originali dei dati di partenza (CC-BY SA).

Come detto in precedenza quello descritto non è l’unico metodo ma ve ne possono essere molti altri, anche più eleganti: ne cito uno, illustrato da Andrea Borruso, che mi sembra di particolare interesse e che si basa sul fatto che i servizi della Regione Sicilia sono contattabili anche via REST, e quindi, partedo da questo,  si potrebbe replicare l’esperienza fatta da Maurizio Napolitano nel caso di Regione Umbria.

Un primo utilizzo delle informazioni che ho aggreato? Per visualizzare i dati delle mia raccolta degli indirizzi georiferiti open data in Italia (di cui stò preparando la nuova release … stay tuned!!!): portando i dati su un db POSTGIS e poi usando TileMill ho prodotto i tiles che permettono di visualizzare rapidamente l’intero dataset insieme a tutti gli altri raccolti a livello nazionale.

Spero che queste info possano essere utili.

Annunci

Numeri civici Open Data in Italia (hashtag #IndirizzatiItalia!): un po’ di dettaglio tecnico

24 settembre 2014 3 commenti

Nel post relativo all’annuncio  di Numeri Civici Open Data in Italia (hashtag #IndirizzatiItalia!) non mi sono dilungato nei dettagli tecnici per non appesantire: ora, per chi interessato, fornisco qui alcune informazioni.

Nel documento è possibile trovare, per ogni livello informativo:

  • i riferimenti relativi al nome dell’Ente che lo mette a disposizione in modalità open data
  • la sua url di pubblicazione
  • la sua url di download
  • il riferimento della licenza d’uso del dato
  • la url di download al dato trasformato in formato ESRI shapefile (senza alterazione della struttura dati), con sistema di riferimento WGS84

I dati sono anche resi consultabili, da un punto di vista geografico, usando il software open source QGIS, in due modalità:

Una breve nota tecnica: è necessario, per la consultazione di livelli informativi del Geoportale Nazionale, che, qualora si operi su una rete locale, si verifichi la corretta configurazione del  proxy, e, per rendere operativo lo sfondo OpenStreetMap, che, nel QGIS utilizzato, sia presente ed attivo il plugin OpenLayers. I progetti QGIS sono stati realizzati con la versione 2.0.1 (Dufour).

Per una consultazione web ho invece realizzato un piccolo esempio in web mapping basato su HTML, Javascript e Leaflet.

DettaglioMappa

L’applicazione permette di:

  • localizzare l’area di interesse per indirizzo o nome della località
  • attivare / disattivare i layer di interesse (il dettaglio dell’indirizzo <via> <civico> è fornito solo alle scale di maggior dettaglio)
  • interrogare interattivamente il livello informativo “Civici Geoportale Nazionale – (WFS)”

Visto che nell’applicazione di web mapping non era possibile elencare i più di 100 livelli informativi, questi sono stati raggruppati per Regione e/o Ente realizzando per ognuno di essi un singolo catalogo raster TMS usando come soluzione TileMill.

Per rendere più veloce la produzione dei vari cataloghi i dati, dopo essere stati trasformati in formato ESRI Shapefile e riportati in WGS84 (EPSG 4326), sono stati caricati in POSTGIS.

Sono anche disponibili due livelli informativi tratti dai geoservizi OGC offerti dal Geoportale Nazionale, il servizio WMS dei civici aggiornamento 2012 e il corrispettivo servizio WFS che permette l’interrogazione interattiva dei singoli numeri civici (funzionalità disponibile solo alle scale di maggior dettaglio onde evitare, da un lato, di richiedere un numero di features eccessivo al server del Geoportale Nazionale, e dall’altro di appesantire la fase di rendering sul browser).

Ovviamente sono disponibili diversi livelli informativi di sfondo (baselayer).

La modalità di pubblicazione in web mapping adottata, sebbene funzionale, ha il vantaggio di essere semplice e non richiede particolari necessità infrastrututrali, è sufficente un web server e un po’ di spazio disco. Al tempo stesso ha, indubbiamente dei limiti, il primo tra tutti è che la sua “semplicità” porta a perdere il livello di dettaglio dei dati raccolti, rendendoli disponibili solo in forma aggregata e come cataloghi raster TMS.

Una soluzione più “enterprise” richiede una disponibilità di un minimo di infrastruttura che al momento non ho adottato non disponendone. Non per questo non ho individuato una possibile soluzione che permetta, da un lato, di mantenere il dettaglio del dato  e al tempo stesso permetta di garantire sia buone prestazioni in consultazione sia l’interoperabilità.

Tale soluzione è basata su una pila tecnologica completamente open source (quindi facilmente replicabile da chi interessato …), che comprende:

Questa rappresenta “una” scelta, non l’unica adottabile nel panorama del mondo gis open source come pure nell’ambito del mondo gis bastao su soluzioni proprietarie.

Implementativamente e per ragioni di praticità, ho utilizzato OpenGeoSuite 4.0.2 (usando una installazione di default, senza alcun parametro di ottimizzazione …), su un quadcore Intel con 8Gbyte di RAM e Windows 7 Enterprise: ovviamente questa non è da considerarsi una configurazione adatta per un ipotetico ambiente di produzione.

Mentre la scelta di POSTGIS come data base spaziale direi che è quasi “inequivocabile”, la scelta di GeoServer è stata indirizzata dal fatto che, oltre ad essere un ottimo gis server, ha una caratteristica che, nel caso specifico dei dati che si dovevano trattare, tornava molto utile, vale a dire la capacità di implementare un point clustering server side per facilitare la consultazione di layer con un gran numero di punti che, altrimenti, dovrebbero essere renderizzati sul client, con prestazioni non accettabili.

Il tutto, come valore aggiunto, realizzato usando modalità standard, vale a dire uno stile SLD, ed esponendo il layer in interoperabilità secondo i consueti standard OGC (WMS e WFS).

NOTA: l’esempio di stile SLD fornito dal tutorial Buondless non permette di interrogare i singoli punti e quindi ho dovuto leggermente modificarlo e lo rendo liberamente scaricabile.

Volendo approfondire questa funzionalità ho quindi adottato questa soluzione.

Ecco un video in cui, usando GeoExplorer (integrato in OpenGeoSuite …), è possibile consultare tutti i 149 layer messi a disposizione

 mentre ecco un video in cui, alcuni dei layer dei civici puntuali sono consultati come layer WMS da un client QGIS

dimostrando quindi come, se ce ne fosse ancora bisogno, grazie all’adozione di servizi GIS esposti secondo standard di interoperabilità e con architetture in grado di scalare opportunamente sia possibile offrire dati geografici a diversi fruitori, sia gis desktop (commerciali e non), sia web browser (usando librerie open source quali OpenLayers, Leaflet, ecc .. , ma anche usando soluzioni commerciali), sia mobile, ma a questo punto diventa un puro esercizio informatico che non ha grande valore aggiunto quindi mi fermo qui.

GIS in the Cloud: MapBox

27 agosto 2013 2 commenti

Sono oramai diverse, e con diversi livelli di maturità, le soluzioni GIS che si possono fruire in rete in modalità cloud based: possiamo citare, partendo da GeoCommons (poi GeoIQ), che forse è stata la prima degna di nota, ArcGIS Online, Mapbox, GISCloud, CartoDB, ecc ….

Si tratta di soluzioni di tipo SaaS o PaaS, a seconda se mettano a disposizione o meno il codice sorgente che ne permetta il riutilizzo e magari l’integrazione con altre soluzioni.

Le finalità e le funzionalità offerte sono ovviamente ampiamente sovrapposte ma ognuna si caratterizza per alcune peculiarità che le contraddistingue.

Volevo da tempo saperne qualcosa in più e approfondire un poco la conoscenza di questi strumenti che a volte, in particolare per esigenze entry level, possono anche rivelarsi utili per piccole soluzioni di web mapping (ma non solo …), senza necessità di ricorrrere a codice di personalizzazione.

Ovviamente nessuna pretesa di fare recensioni complete (se ne possono trovare di più autorevoli in rete ….), semmai una raccolta di appunti e considerazioni personali.

Il primo strumento a cui ho dato un’occhiata è MapBox. 

Ripredendo quanto riportato sul suo sito si tratta di “ … a platform for creating custom maps that fit your style, enhance user experiences, and visualize your data …. “: il suo core business è quindi quello di permettere di realizzare facilmente la pubblicazione dei propri dati georiferiti in mappe su sfondi predefiniti e personalizzabili.

Per poter usare il servizio è necessario creasi un proprio login dotato di username e password: il servizio free è limitato a 50 Mbyte come mappe o storage di dati (i dati come spiegato più avanti sono in realtà dei cataloghi di immagini georiferite in formato MBTiles), e 3 Map View da intendere come raccolta di map tiles.

Per esigenze superiori il servizio è a pagamento con dei piani predefiniti o personalizzabili.

MapBox mette a disposizione tre tipologie di sfondo cartografico su cui appoggiare i propri dati e precisamente:

  • MapBox Streets: una mappa mondiale realizzata sulla base die dati di OpenStreetMap e continuamente aggiornata (si parla di aggiornamenti ogni 5 minuti …..). La mappa è personalizzabile cambiando colore, mostrando o nascondendo dei livelli e anche configurando le etichette a seconda della lingua desiderata (supportati Inglese, Spagnolo e Francese, ma nulla vieta di estendere e personalizzare per la lingua scelta).

  • MapBox Terrain: una mappa mondiale che visualizza la conformità del terreno e l’uso del suolo. Sono visualizzate colline, curve di livello ed altri elementi morfologici. La mappa è personalizzabile cambiando colore, mostrando o nascondendo dei livelli

  • MapBox Satellite: una mappa mondiale di immagini ad alto dettaglio, frutto di un’elaborazione di diverse immagini sorgenti. La mappa è personalizzabile.

È comunque possibile aggiungere dei propri dati: in questo caso occorre considerare che in MapBox i dati devono essere presenti come cataloghi di tiles (MBTiles) e quindi, se si è in possesso di dati in formato diversi, questi prima devono essere trasformati utilizzando TileMill, installabile su Mac, Ubuntu e Windows.

I formati dati che TileMill supporta sono i seguenti:

  • CSV
  • ESRI shapefile
  • GeoJSON KML
  • GeoTIFF
  • SQLite
  • POSTGIS

 TileMill è basato su Mapnik, tool open source ampiamente utilizzato, ed utilizza per definire gli stili CartoCSS. E’ inoltre possibile utilizzare Maki, libreria open source di simboli.

Ecco una mappa di prova che ho realizzato

TerremotiMapBox

Una volta che è stata realizzata una mappa questa può essere pubblicata e condivisa in modalità diverse:

  • come immagine statica

  • in modalità embedded in una pagina HTML

  • in un iframe in una pagina HTML, sfruttando MapBox Javascript API

  • in un’app mobile IOS

  • integrata in strumenti social quali Facebook e Twitter

MapBoxPublish

L’utilizzo entry level dello strumento è quindi quello di tool di pubblicazione di informazioni georiferite in semplici mappe che a loro volta possono essere tuttavia essere integrate e riferite all’interno di soluzioni e contesti applicativi diversi usando soluzioni che MapBox mette a disposizione die propri utenti quali:

  • MapBox.js: un’API Javascript per permettere un web mapping che utilizzi mappe MapBox più facile e veloce. MapBox.js è un plugin di Leaflet e quindi in questo modo amplia le sue possibilità di utilizzo

  • iOS SDK: MapBox Mobile SDK è un toolkit open source completo per applicazioni dimapping iOS native

  • API Rest: per non essere egati a specifiche API client i srevizi MapBox sono accessibili attraverso semplici interfacce REST e con formati aperti quali JSON. Queste interfacce permettono un geocoding / reverse geocoding, l’aggiunta di marker sulla mappa e l’accesso diretto ai tiles delle mappe.

A livello di architettura della soluzione questa si basa su un’architettura scalabile e ridondata geograficamente ospitata su Amazon web services.

Da un punto di vista software e di standard è basato su Node.js e si basa su specifiche open a partire dalle specifiche per l’organizzazione dei tiles delle mappe (MBTiles), TileJSON, un formato standard per descrivere i vari aspetti di una mappa e realizzare un facile punto di accesso per le mappe stesse, SQLite, come database per mantenere le informazioni degli MBTiles e UTFGrid, un formato per dati interattivi che usano JSON. Per i dettagli http://www.mapbox.com/developers/guide/.

A livello generale per MapBox si può ancora dire che:

  • MapBox ha investito su OpenStreetMap tanto da sfruttare i dati della comunità open source per basare il suo livello streets di default. La sua presenza nella comunità si è ampliata nel tempo ed è diventata sempre più significativa sino ad arrivare alla realizzazione di un nuovo editor web per la comunità denominato ID Editor che proprio di recente, è diventato l’editor web di default per OSM in sostituzione di Potlach

  • è già stato annunciato un po di tempo fa MapBox Satellite Live, iniziativa per rendere disponibili agli utenti le immagini satellitari Landsat fornite da DigitalGlobe in tempi decisamente riidotti tanto da poter parlare di “near real time”. La notizia è di sicuro interesse ed impatto e l’annuncio dovrebbe essere imminente

In conclusione questa soluzione sembra essere di interesse per esigenze di pubbicazioni di dati georiferiti e quindi per soluzioni di web mapping.

Il suo supporto del formato MBTiles da un lato garantisce prestazioni e portabilità (la scelta di usare TileMill e quindi Mapnik e CartoCSS è ottima in tal senso), ma al tempo stesso non permette di rendere disponibili funzionalità più evolute (presenti in altre soluzioni analoghe …), quali funzionionalità di analisi spaziali che necessitano di pote trattare con dati tipicamente vettoriali.

Altro limite attuale è legato al fatto che per il mondo mobile viene offerto supporto solo per il mondo iOS mentre è escluso il mondo Android.

Ovviamente poi non si tratta di una soluzione open source per cui il codice sorgente non è reso disponibile in download o a contribuzione di una comunità, e anche qui soluzioni analoghe hanno preferito altre strade.

OpenStreetMap in 3D (WebGL)


Interessante progetto basato su OpenStreetMap, Tilemill, Mapnik e World Weather Online che permette di visualizzare i dati di OSM in 2D …..

OMS-2D

ma anche in 3D (…. in un browser che supporti WebGL)

OSM-3D

E’ impressionante vedere, all’attivazione del 3D, l’estrusione degli edifici (anche se credo che le altezze non siano quelle reali, ma a livello di potenzialità questo non cambia l’interesse del prodotto).

Per la localizzazione sul territorio utilizza Nominatim.

Non è chiaro quali siano le tecnologie utilizzate …. indagherò …

Fonte: GFOSS.it

Mappa del Trentino: un esempio di un uso sinergico di dati open


E’ stata pubblicata la mappa web e mobile della Provincia Autonoma di Trento da parte di WebMapp.

MappaTrentino

Si tratta di un bell’esempio di come si possano ottenere eccelenti risultati utilizzando dati e tools open source.

I tre organismi produttori dei principali dati utilizzati per costruire la carta sono infatti:

I software opensource utilizzati sono stati:

La mappa delle Trentino è distribuita con licenza Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Italia

Ottima iniziativa e bell’esempio da seguire!