Come usare i dati OSM – 2^parte

Ecco la seconda parte dell’analisi sull’utilizzo dei dati di OSM, dopo la prima di qualche settimana fa.

I dati geografici presenti in OpenStreetMap sono disponibili come dati aperti sotto la licenza ODbL (Open Database License): grazie alle sue API è possibile selezionarli ed esportarli nel proprio sistema GIS così da poterli utilizzare per le proprie esigenze. Esistono tantissimi modi per farlo: applicazioni web, servizi di download, plugin ed eseguibili da linea di comando; in questo articolo faremo una panoramica di alcuni di quelli più comunemente adoperati.

Il formato dati OSM

I dati geografici di OSM sono mantenuti in un database PostgreSQL e quando vengono estratti sono disponibili in diversi formati vettoriali, a seconda del metodo o del tool con cui si esegue l’operazione.
Il formato originario è il .osm: un formato strutturato in XML specifico di OpenStreetMap (indicato infatti anche come OSM XML) realizzato con lo scopo di permetterne facilmente la trasmissione in rete.

Diversi tool di esportazione eventualmente effettuano in seguito una trasformazione dal formato .osm originale ad un altro vettoriale (per es. shapefile, geoJSON, … etc) che sia più comodo da trattare o per specifiche esigenze (per esempio in formato .gpx per i GPS).

Esiste una variante del formato .osm indicata come overpass JSON (o semplicemente JSON) che in pratica è un adattamento del formato originale (OSM XML) per renderlo più leggero e compatibile alle specifiche JSON. Questo formato rende i dati OSM più facili da trattare dentro un codice JavaScript.

Specie quando si devono estrarre dati molto grandi, al posto del .osm vengono spesso usati formati come il .pbf , il .bz2 (o bzip2) e .o5m; più che formati intrinsecamente diversi, si tratta di modalità compresse (secondo certi algoritmi) del formato grezzo .osm che ne riducono la dimensione.

Per agevolare il trattamento dei dati di OSM esportati, molti strumenti d’esportazione li rendono disponibili direttamente in altri formati vettoriali più comunemente usati.
Uno di questi è lo shapefile che, nonostante sia per diversi versi ormai superato, resta comunque il formato più diffuso e supportato dai SW geografici. Questo formato vettoriale è costituito da 3 file distinti (.shp, .shx, .dbf) a cui sono associati file ausiliari come il .prj che contiene le informazioni sul suo sistema di proiezione.

Altra caratteristica dello shapefile è che può contenere un solo tipo di geometrie per volta: punti, linee o poligoni; per questo motivo quando si devono scaricare dati di OSM che generalmente contengono geometrie diverse, vengono prodotti tanti shapefile differenti che spesso sono chiamati in questo modo:

  • buildings (case, edifici, costruzioni,.. etc)
  • landuse (uso del suolo)
  • natural (aree naturali: boschi, parchi, laghetti, … etc)
  • places (località: città, paesi, sobborghi, … etc)
  • points (punti d’interesse di qualsiasi tipo: negozi, incroci, fermate, fontane, … etc)
  • railways (ferrovie)
  • roads (strade di diversi tipi)
  • waterways (fiumi, torrenti, canali, … etc)

Altro formato ormai molto diffuso, specialmente nelle soluzioni di web mapping, è il geoJSON che certamente è più efficiente dello shapefile. Esso permette di includere in un unico file tutte le informazioni che riguardano un insieme di geodati e questi possono essere anche di tipo diverso (punti, poli-linee, poligoni). Uno dei servizi di esportazione di dati OSM più noti che lo prevede è Overpass Turbo.

Passiamo ora a vedere alcuni degli strumenti di esportazione più diffusi.

Esportazione standard (su openstreetmap.org)

Sul sito principale di OSM c’è possibilità di fare un’esportazione “basica” dei dati: non sono presenti particolari opzioni e l’unico formato dati disponibile per l’esportazione è il .osm.
Cliccando sul tasto “Esporta” in alto a sinistra si attiva sulla sinistra una finestra che contiene informazioni generali sull’esportazione; esiste la possibilità di selezionare manualmente sulla mappa il rettangolo (bounding-box) che contiene la zona con i dati che si desidera esportare, altrimenti l’area di default è quella visualizzata nel quadro della mappa.

OSM export

Il bottone per effettuare l’esportazione (sotto le info sulla licenza) si attiverà solamente se l’area selezionata è sufficientemente piccola, altrimenti compare l’avvertimento che “Quest’area è troppo grande per essere esportata come Dati XML di OpenStreetMap. …”. I dati esportati vengono salvati in un file col nome standard map.osm che è ovviamente rinominabile.

Per motivi di sovraccarico o temporanea sospensione del servizio, è possible che questo servizio di esportazione possa non funzionare: nella stessa finestra, ci sono in basso indicazioni su alcune altre alternative per esportare i dati di OSM. Una è Overpass API che consente analogamente di scaricare i dati del riquadro mappa selezionato (con o senza bounding-box) richiamando direttamente le API di OSM. Viene prodotto un file di nome map senza estensione, che comunque è sempre nel formato OSM XML ed è esattamente uguale al file map.osm che si ottiene con l’esportazione avviata col bottone. Praticamente cambia solo l’applicazione che lo ha generato; se aprite con un normale text-editor i due file vedrete che sono identici ma hanno un generator diverso.

Overpass turbo

Se vi interessa avere più opzioni per scegliere cosa esportare (effettuare una scelta e non scaricare tutti gli oggetti contenuti in una determinata area) o anche altri possibili formati di esportazione, una possibilità è l’applicazione Overpass turbo.
Oltre a poter scegliere l’area geografica da cui estrarre i dati come nel caso precedente, è possibile definire le condizioni, o se volete i filtri, per l’estrazione adoperando le overpass query. Tra l’altro per scrivere queste query (basate sulle API overpass) viene in aiuto un “compositore automatico” (wizard) che, sulla base di alcune parole chiavi che descrivono il tipo di dati richiesti, le genera.

Overpass turbo

I risultati dell’interrogazione vengono evidenziati graficamente sul quadro-mappa e sono esportabili in diversi formati: OSM XML, geoJSON, GPX e KML; c’è anche la possibilità di caricare i dati esportati direttamente in un editor di OSM (JOSM, Level0) oppure in gist (servizio di github) in formato geoJSON.
Se volete ulteriori dettagli su Overpass turbo, potete leggere la relativa pagina Wiki su OSM.

GeoFabrik downloads

È un servizio gratuito che mantiene una copia dei dati di OSM normalmente aggiornati quotidianamente e permette di scaricarli selezionandoli per area geografica. È possibile selezionare quest’area:

  • a livello di continente (Africa, Asia, Europa, Nord America, … ect);
  • a livello di stato/nazione (Italia, Francia, India, Arizona, … etc);

e soltanto per alcune nazioni (per es: Germania, Francia, Italia):

  • a livello di sub-regione geografica (per l’Italia: centro, isole, nord-est, nord-ovest e sud).

Una comoda vista-mappa nella pagina del servizio, in base a quale area geografica si seleziona, evidenzia il poligono o i confini che la racchiudono.

geofabrik download

Naturalmente, vista l’estensione delle aree coperte, si tratta di dati molto grandi e quindi disponibili nei formati compressi di OSM: .pbf e .bz2; in molti casi sono disponibili anche come shapefile zippati.

È un servizio efficiente e facile da usare, ma ovviamente non conviene se i dati che interessano riguardano una zona o area geografica relativamente piccola, come per esempio una area provinciale o una città.

Wikimedia Italia

Un servizio di download simile a quello di GeoFabrik ma solo per l’Italia, è quello fornito da Wikimedia Italia, dal quale è possibile scaricare:

  • i dati OSM dell’intera regione
  • i dati OSM di un comune (distinti per provincia)

I dati sono aggiornati quotidianamente e sono disponibili nei seguenti formati: OSM, PBF, shapefile (.zip), , SpatiaLite (.sqlite) e i poligoni dei confini in POLY.

wikimedia italia OSM

I dati restituiti sono quelli compresi nel rettangolo che inscrive i limiti amministrativi della regione o comune; per i formati OSM e PBF è disponibile anche la versione [cut], che riguarda invece i dati compresi dentro i confini amministrativi.

HOT exports

Per adoperare questo servizio reso disponibile dall’HOT (Humanitarian OSM Team), bisogna essere degli utenti registrati di OSM. È molto intuitivo e consente facilmente di selezionare l’area d’interesse (per la quale estrarre ed esportare i dati) ed anche il tipo di dati (feature tag) da estrarre e con quale formato.

hot export tools

La pagina del servizio visualizza nella parte destra la mappa con gli strumenti per effettuare la selezione (ci sono diverse possibilità); sulla parte sinistra i pannelli che in 4 passaggi (describe, formats, data e summary) ci guidano nel definire l’esportazione da effettuare.

Il primo passaggio (describe) è solo descrittivo e permette di specificare un nome dell’operazione e l’eventuale descrizione; nel caso in cui si tratti di un’esportazione inserita in un progetto di gruppo, si può indicare anche questo. Per capire meglio l’utilità di queste informazioni, si tenga conto che le esportazioni vengono salvate e possono essere cercate e richiamate in un altro momento.

Il secondo passaggio (formats) permette di scegliere i formati di esportazione, anche più di uno; le possibilità sono quelle indicate in figura:

hot export format

Il terzo passaggio (data) è quello per definire il tipo di dati che si vogliono esportare, adoperando la tipica classificazione dei tag di OSM. Il modo più semplice per farlo è selezionando i nodi dell’albero (tag tree) già predisposto dall’applicazione web; oppure si può descrivere la configurazione di selezione usando il linguaggio YAML.
Si tratta di una possibilità per utenti esperti che consente di definire dei filtri di selezione con una maggiore precisione e flessibilità. Qui non scendiamo in dettagli, ma in questa pagina “YAML specification” potete trovare le informazioni necessarie.

Le configurazioni possono pure essere salvate e poi riusate ed eventualmente anche rese pubbliche; vedi la voce Configs nel menù in alto della pagina.

hot export tool data

Il passaggio finale (summary) , riepiloga le informazioni sull’esportazione che abbiamo definito e tramite il bottone “create export” permette di effettuare il download dei dati nei formati scelti. Sono anche disponibili tre opzioni:

  • buffer AOI : creare un area buffer di 0.02 gradi di ampiezza intorno alla vostra AOI (Area Of Interest)
  • pubblish: rendere pubblica a tutti l’esportazione creata
  • bundle for POSM: crea un pacchetto di file adatto per POSM (Portable OSM)

hot export tool summary

La possibilità di poter salvare le proprie esportazioni e poterle rieseguire anche in seguito (con dati di OSM aggiornati) oppure clonarle e poi modificarle, è una delle caratteristiche più utili di questo tool di esportazione.

Bbbike export

L’organizzazione Bbbike.org offre un servizio basato sui dati di OSM molto utile per pianificare online dei percorsi per ciclisti; inizialmente è nato solo per l’area di Berlino ma è stato progressivamente allargato a diverse altre città in tutto il Mondo (circa 200).
Interessante il fatto che essa offre anche un servizio per selezionare ed esportare i dati di OSM; precisamente vengono offerte tre possibilità:

  • dati relativi alle aree di circa 200 città;
  • dati relativi a una determinata area geografica selezionabile sulla mappa;
  • dati globali di OSM (tutto il mondo);

Le prime due sono disponibili in diversi formati: osm, shp, pbf, formati Garmin, formati per Android, SVG… etc; la terza, data la grossa dimensione, solo nel formato compresso pbf.

bbbike.org download

Ai dati sulle città si accede da una  pagina che ne contiene l’elenco in ordine alfabetico; accanto ad ognuna compare anche la data e l’ora dell’ultimo aggiornamento. Cliccando su una città appare un’altra pagina con una mappa che mostra il rettangolo racchiudente l’area interessata (della città scelta) e i link di download per i diversi formati disponibili.

bbbike dati osm città

Può capitare che sulla mappa si veda più di un rettangolo; il motivo è semplice: in quella area geografica ricadono le zone di altre città coperte dal servizio.

L’altra possibilità è scegliere una certa area geografica più o meno grande sulla mappa: si può effettuare la selezione con un semplice rettangolo (bounding-box) oppure con un poligono (aggiungendo dei vertici) e poi spostarlo e/o ridimensionarlo a piacimento. Cliccando sul rettangolo/poligono sulla mappa, esso cambia colore e si evidenziano i vertici spostabili. Occorre quindi scegliere il formato desiderato da un menù a tendina e inserire la propria e-mail; il download purtroppo non è diretto, ma il file dei dati verrà inviato ad un indirizzo e-mail.

Per eventuali altre informazioni sul servizio e sui formati disponibili per l’esportazione, c’è anche questa utile pagina, che contiene tra l’altro diverse immagini di esempio con la visualizzazione dei dati esportati a secondo del loro formato.

QGIS

Con QGIS oltre a poter aprire dati OSM nel formato grezzo .osm (trattato più avanti), precedentemente scaricati, è possibile usare una funzione interna che consente di selezionare una determinata area geografica d’interesse e poi scaricare i dati OSM in essa contenuti. Sotto il menù Vettore c’è il gruppo di voci OpenStreetMap che contiene anche  la funzione “Download Data …”; questa funzione richiama la overpass API di OSM passandogli le coordinate min-max del rettangolo che seleziona l’area d’interesse.

QGIS OSM download data

Questa selezione può essere fatta in tre modi:

  1. From map canvas – l’intera area geografica rappresentata nel quadro –mappa;
  2. From layer – il rettangolo che racchiude l’estensione totale di un dato layer, selezionabile tra quelli presenti nel progetto QGIS;

  3. Manual – il rettangolo avente delle coordinate min-max indicate manualmente.

QGIS osm download opzioni

Il file ottenuto come output è nel formato grezzo OSM/XML (.osm).

Nel caso della seconda opzione occorre precisare che, se si tratta di un layer vettoriale, l’area di selezione è quella che racchiude tutti i suoi elementi (senza buchi). Forse questa è la scelta più comoda delle tre, in quanto ci consente di scaricare i dati OSM esattamente per un’area d’interesse (appunto quella di un layer) su cui stiamo lavorando.
Attenzione poiché se l’area selezionata fosse troppo grande, potrebbe volerci troppo tempo per il download e si ottenerebbe un file .osm troppo grande!

Sempre nel gruppo voci di “OpenStreetMap” del menù vettori, troviamo gli altri due strumenti che servono per caricare correttamente in QGIS un file .osm:

  • Import topology from XML …
  • Export topology to SpatiaLite …

vediamo di capire come vanno usati.

Il primo passaggio (Import topology from …) consiste nel convertire il formato OSM/XML in una struttura-dati che QGIS possa leggere ed in particolare lo trasforma in un DB SpatiaLite; conviene anche che l’opzione “Crea connessione (SpatiaLite) after import” sia barrata, se non lo fate potrete comunque creare la connessione in seguito, come si fa per un qualunque DB SpatiaLite.

QGS import osm XML

Con questo passaggio viene creata una struttura-dati SpatiaLite vuota, senza gli elementi vettoriali; infatti aprendo il DB con il DB Manager di QGIS è possibile vedere come manchino ancora le tabelle con gli elementi vettoriali (punti, linee o poligoni).

Il secondo passaggio (Export topology to …) è quello che carica gli elementi vettoriali dei dati OSM nel DB SpatiaLite.
È possibile scegliere quale tipo di geometria caricare: quello dei punti, quello delle poli-linee o quello dei poligoni; oltre al caricamento nel DB, il layer verrà anche automaticamente visualizzato in QGIS.

QGIS export OSM

Riprendendo gli argomenti della 1° parte di questo articolo, gli elementi di OSM vengono caratterizzati con dei tag, ovvero proprietà che servono per descrivere l’elemento in questione. Premendo il bottone “Load from DB” compare un elenco di tutti i tag presenti nei dati OSM importati: lo strumento di esportazione ci permette di selezionare quali di questi interessino e quindi vengano trasferiti nella tabella attributi del layer.

Nella finestrella per la scelta dei tag, compare un contatore che indica quanti elementi abbiano quel tag valorizzato; volendo si potrebbe anche scegliere di importare solo quegli elementi che hanno certi tag non nulli/vuoti.

Potendo importare un layer per volta, se si volessero caricare tutte e tre le tipologie di geometrie (punti, poli-linee, poligoni) occorre ripetere più volte la stessa operazione. Dopo aver effettuato l’esportazione dei layer nel DB SpatiaLite, questi rimarranno disponibili anche in momenti successivi, basterà riconnettersi al DB.

Occorre precisare che nelle versioni di QGIS, ormai da qualche anno, è possibile aprire un file .osm anche direttamente come un qualunque layer vettoriale, usando la normale funzione “Aggiungi vettore “.

QGIS aggiungi vettore

Per questa utilità QGIS utilizza la libreria GDAL che appunto, dalla versione 1.10 ha i driver per aprire i file dati di OSM. Chi volesse approfondire qui può leggere come funziona.

Tuttavia aprire i file OSM in questo modo presenta alcune anomalie:

  • i layer selezionabili sono quelli che il driver GDAL deriva dalla struttura OSM: points, lines, multilinestrings, multipolygons, other_relations;

QGIS osm layers

  • i tag non sono selezionabili, o meglio sono quelli indicati nel file osmconf.ini di GDAL; eventuali altri tag (non indicati in osmconf.ini) vengono raggruppati tutti insieme come unica proprietà chiamata other_tags;

  • nella tabella attributi del layer sono possibili fino a un massimo di 99 righe, quindi se il layer contenesse più di 100 elementi non si riuscirebbero a gestire/vedere nella tabella attributi tutte le rispettive righe;

  • i layer vettoriali importati non sono editabili;

Aprire i file .osm in questo modo diventa utile solo per la visualizzazione in mappa, ma per l’editazione occorre salvarli in un altro formato (per es. shapefile).

QGIS plugin OpenStreetMap

Oltre alle funzioni già integrate in QGIS, sono stati sviluppati diversi plugin che permettono di scaricare e gestire i dati di OpenStreetMap; tra i più noti ci sono: Quick OSM, OSM downloader, OSM info, OSM tools. I più interessanti sono i primi due.

Quick OSM è un plugin molto potente e versatile che permette di creare e poi eventualmente salvare delle query che usano le API overpass per interrogare il database di OSM ed estrarre i dati che servono. Permette anche di aprire dei file .osm, scegliere i layer e i tag (tramite un file osmconf.ini)  e salvarli in formato geoJSON. Quando il plugin è installato la sua voce compare in QGIS sotto il menu web.

OSM downloader è un altro plugin che svolge una funzione molto simile alla “Download OSM data …” già inclusa nel menù di QGIS; essa però permette semplicemente di disegnare sulla mappa un rettangolo (b-box) per selezionare l’area per la quale interessano i dati OSM che vengono salvati in formato .osm. Quando il plugin è installato compare solo la sua icona nella toolbar di QGIS, ma non c’è una corrispondente voce di menu.

Vuoi imparare ad utilizzare QGIS per lavorare sui dati geografici, compresi quelli di OSM? Rimani aggiornato sui nostri corsi o contattaci per iscriverti al prossimo!

Osm2pgsql (PostGIS)

Per chi lavora con database PostGIS esiste la possibilità di importare direttamente dati OSM: una è quella offerta dal programma Osm2pgsql. È una utility disponibile per i diversi sistemi (Windows, Linux e MacOS) che una volta installata si esegue da linea di comando (o terminale).

Prevede molte opzioni, ma nella sua forma più semplice basta specificare solamente il file dati OSM da caricare (.osm oppure .pbf) ed un database PostGIS predisposto allo scopo creato precedentemente; ecco un esempio:

dove db_name è il nome del database PostGIS, db_user è il nome dell’utente del database e /user/file/osm_data/my_data.osm è il percorso assoluto del file .osm da caricare.

L’opzione -s specifica di eseguire il comando in slim mode (in genere è consigliato, specie nei sistemi a 32 bit).

Per effettuare questo trasferimento di dati in  tabelle PostGIS, il comando osm2pgsql segue delle indicazioni contenute in un file che si chiama default.style (ottenuto in automatico installando osm2pgsql) che è possibile trovare anche su GitHub qui. Si tratta di un file di testo che definisce quali tag devono essere importati ed ha una struttura molto semplice costituita da quattro colonne; ecco un esempio:

La prima colonna (OsmType) indica se il tag si applica ad un elemento node oppure way o a entrambi. La seconda colonna (Tag) è il tag per il quale vengono date le direttive. La terza colonna (DataType) indica il tipo di valore che assume quel tag; quasi sempre è “text”, ma può essere anche “integer”, “real”, “timestamp” … etc. La quarta colonna (Flags) specifica se quel tag deve essere importato oppure no e se gli oggetti way devono essere considerati delle aree; precisamente sono possibili 6 valori per la colonna “Flags”:

  1. linear – viene creata una colonna con quel tag;
  2. polygon – gli oggetti ways sono delle aree (la colonna del tag viene creata);
  3. delete – l’oggetto (con quel tag) non viene importato;
  4. nocolumn – non viene creata la colonna con quel tag (ma l’oggetto viene importato);
  5. phstore – equivale alla coppia di flag polygon,nocolum (per la compatibilità con versioni precedenti);
  6. nocache – inutilizzato (obsoleto)

In pratica vengono adoperati solo i primi quattro flag.

C’è anche la possibilità di definire un proprio file di style e, tramite l’opzione -S vista in precedenza, dire a osm2pgsql di usare quello al posto di default.style; per esempio:

Dopo che osm2pgsql completa l’importazione di un file dati OSM (.osm o .pbf) nel DB PostGIS, sono presenti 4 tabelle: una per ogni tipo vettoriale (punti, linee, poligoni) ed una per le strade più importanti (chiamata “road”) presenti nella zona; con pgAdmin è possibile connettersi al DB e controllare:

pgAdmin OSM data

Hai ancora dubbi sull’utilizzo dei dati ottenibili da OpenStreetMap? Vuoi imparare a gestirli in ambito GIS con un software gratuito Open Source come QGIS? Contattaci per iscriverti ad uno dei nostri corsi!

Fonte revisionata: Geomappando

Leave a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *