OSM export dati

Come usare i dati di OSM – 2^parte

I dati geografici presenti in OpenStreetMap sono disponibili come dati aperti sotto la licenza ODbL (Open Database License) e grazie alle sue API è possibile selezionarli ed esportarli nel propria 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 e 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 (formati vettoriali) a secondo del metodo o del tool con cui si esegue questa operazione.
Ma il formato originario dei dati OSM è 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 su Internet.

E’ questo il formato reso disponibile con le API di OSM; sono poi i diversi tool di esportazione che eventualmente effettuano una trasformazione dal .osm a un qualche altro formato vettoriale (per es. shapefile, geoJSON, … etc) che sia più comodo da trattare o per specifiche esigenze (per esempio in formato GARMIN per i GPS della omonima marca).

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, come detto poc’anzi, molti strumenti d’esportazione li rendono disponibili direttamente in altri formati vettoriali più comunemente usati.
Sicuramente uno di questi è lo shapefile che, nonostante sia per diversi versi ormai superato, resta comunque il formato più diffuso e supportato dai SW geografici. Come tutti già sapete, questo formato vettoriale è costituito da almeno 3 file distinti (.shp, .shx, .dbf ) e quasi sempre anche un file .prj che contiene le informazioni sul suo sistema di proiezione; quindi viene scaricati come unico file compresso (in genere .zip) che li contiene.

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 (openstreetmap.org) c’è possibilità di fare un’esportazione “basica” dei dati, nel senso che non abbiamo 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 ed eventualmente 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 è tutta quella visualizzata nel quadro della mappa.

OSM export

A questo proposito fate attenzione che il bottone per effettuare l’esportazione vera e propria (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 (download) vengono salvati in un file col nome standard map.osm che poi ovviamente potete cambiare.

Per motivi di sovraccarico o temporanea sospensione del servizio, questa esportazione potrebbe non funzionare; allora sempre 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 (non tutti gli oggetti contenuti in una determinata area) e anche altri possibili formati di esportazione, una possibilità è l’applicazione overpass-turbo.eu.
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 turboI 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 quest’altro mio articolo.

GeoFabrik downloads

E’ un servizio gratuito che mantiene una copia dei dati di OSM (URL: download.geofabrik.de) normalmente aggiornati quotidianamente e permette di scaricarli selezionandoli per area geografica. E’ 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 alto a destra), 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 (.shp.zip).

E’ un servizio efficiente e facile da usare, ma ovviamente non conviene (è una perdita di tempo) se i dati che interessano riguardano una zona o area geografica non molto stesa, 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 a questo indirizzo: osm-estratti.wmflabs.org/estratti .
Per le sole regioni coperte (non sono tutte) è 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. E’ 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.
Si accede al seguente indirizzo: export.hotosm.org .

hot export toolsLa 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ù d’uno; le possibilità sono quelle indicate nella figura seguente:

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 addatto 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 molto utile (basato sui dati di OSM) per pianificare online dei percorsi per ciclisti; inizialmente è nato solo per l’area di Berlino e poi è stato allargato per diverse altre città dell’ Europa e del Mondo (circa 200).
Ma qui ci interessa il fatto che essa offre anche un servizio per selezionare ed esportare i dati di OSM: download.bbbike.org . 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);

I primi due sono disponibili in diversi formati: osm, shp, pbf, formati Garmin, formati per Android, SVG… et;, il terzo, data la grossa dimensione, ovviamente solo nel formato compresso pbf.

bbbike.org download

I dati sulle città si accedono 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 sulla sinistra i link di download per i diversi formati disponibili.

bbbike dati osm città

Può capitare che sulla mappa vediate più di un rettangolo (per es. se scegliete la città di Mainz); il motivo è semplice: vuol dire che in quella area geografica ricadono le zone di altre città coperte dal servizio.

L’altra possibilità è scegliere a proprio piacimento 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. Se si clicca sul rettangolo/poligono sulla mappa , questo cambia colore si evidenziano (con dei pallini) i vertici spostabili.

Fatto questo, si sceglie il formato desiderato da un menù a discesa (… varie possibilità) e si inserisce la propria e-mail; infatti in questo caso il download 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 extract.bbbike.org/extract.html, che contiene tra l’altro diverse immagini di esempio (screenshot) con la visualizzazione dei dati esportati a secondo del loro formato.

QGIS

Con QGIS oltre a poter aprire dati OSM nel formato grezzo .osm (lo vediamo più avanti), precedentemente scaricati in qualche modo, c’è pure 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ù Vector c’è il gruppo di voci OpenStreetMap che contiene anche  la funzione “Download Data …”; questa utilità in pratica richiama la overpass API di OSM  passandogli le coordinate min-max del rettangolo che seleziona l’area d’interesse (https://overpass-api.de/api/map?bbox=4.438,35.996,28.389,47.636).

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 (le coordinate devono essere espresse in WGS 84 ovvero EPSG 4326).

QGIS osm download opzioni

il file che otteniamo come output, è nel formato grezzo OSM/XML (.osm).

Nel caso della seconda opzione precisiamo 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, al solito se l’area selezionata è troppo grande, potrebbe volerci troppo tempo per il download ed inoltre ottenere 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

Precisiamo che con questo passaggio abbiamo creato una struttura-dati SpatiaLite ma questa è ancora vuota (senza gli elementi vettoriali); se infatti aprite il DB con il DB Manager di QGIS vedrete che mancano 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.
Possiamo scegliere quale layer 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

Se ricordate (vedi la 1^ parte di questo articolo) gli elementi di OSM vengono caratterizzati con dei tag, ovvero specie di 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 ci interessano e quindi che verranno trasferiti nella tabella attributi del layer.

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

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

Detto questo, dobbiamo 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 usa la libreria GDAL che appunto, dalla versione 1.10 ha i driver per aprire i file dati di OSM. Chi volesse qui www.gdal.org/drv_osm.html può approfondire come funziona.

Tuttavia aprire i file OSM in questo modo, presenta qualche anomalia:

  • 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 contiene più di 100 elementi non si riescono a gestire/vedere nella tabella attributi tutte le rispettive righe (in realtà non si capisce se questo è un limite voluto o un bug !?);
  • i layer vettoriali così importati non sono editabili;

insomma sembrerebbe che aprire i file .osm in questo modo sia utile solo per visualizzarli sulla mappa e/o per poi salvarli in un altro formato (per es. shapefile) che abbia un comportamento regolare.

QGIS plugin OSM

Oltre alle funzioni già integrate in QGIS, sono stati sviluppati diversi plugin che permettono di scaricare e gestire i dati di OSM; tra i più noti ricordiamo: Quick OSM, OSM downloader, OSM place search, OSM info, OSM tools. Quelli che ci interessano qui sono i primi tre.

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. Ma 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 menù 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 un rettangolo (b-box) per selezionare l’area per la quale interessano i dati OSM che, solito, 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 menù.

Se non sapete dove si trova il luogo (regione, città, paese, fiume, strada, piazza, … etc) per il quale siete interessati ai dati OSM, un altro plugin utile è OSM place search. Quando è installato viene creato un pannello ad hoc in cui è possibile inserire il nome del luogo da cercare nel DB di OSM e poi in una finestrella vengono elencati i risultati della ricerca (tutti i luoghi che nel nome contengono la parola cercata). La ricerca può essere estesa a tutto il globo oppure solamente all’area geografica attualmente rappresentata nel quadro-mappa di QGIS.

Una volta selezionato tra i risultati quello che interessa, ci sono tre bottoni con cui possiamo:

  • zoomare la vista mappa nel luogo scelto;
  • aggiungere un layer vettoriale con un elemento (punto, linea o poligono) in corrispondenza del luogo scelto;
  • nel caso in cui il luogo scelto è individuato da un area (ovvero poligono), aggiungere una maschera che lo racchiude come nuovo layer, ovvero un quadrilatero da cui è tolta (buco) l’area del luogo;

Tenete conto che comunque è un plugin ancora considerato “sperimentale” e quindi potrebbe anche avere qualche funzionamento anomalo.

Osm2pgsql (PostGIS)

Per chi lavora con database PostGIS, ci sono delle possibilità per importare direttamente in esso dei dati OSM ed una è quella offerta dal programma Osm2pgsql. E’ una utility disponibile per i diversi sistemi (Windows, Linux e MacOS) che una volta installata si esegue da linea di comando (o terminale); maggiori informazioni le trovate qui: wiki/Osm2pgsql .

Prevede molte opzioni (vedi questa pagina osm2pgsql-usage)  ma nella sua forma più semplice basta specificare solamente: il file dati OSM da caricare (.osm oppure .pbf) e un database PostGIS predisposto allo scopo (creato prima); questo è 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 trasferimneto di dati OSM in  tabelle PostGIS, il comando osm2pgsql segue delle indicazioni contenute in un file che si chiama default.style (che si ottiene quando si installa osm2pgsql) e che trovate anche su github a questo indirizzo: osm2pgsql/default.style . Esso è un file di testo che serve a definire quali tag devono essere importati (come colonne) ed ha una struttura molto semplice costituita da quattro colonne; questo è 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 pure “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 di flag:

  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)

quindi in pratica vengono adoperati solo i primi quattro flag.

Volendo c’è la possibilità di definire un proprio file di style e tramite l’opzione -S dire a osm2pgsql di usare quello al posto di default.style; per esempio:

Si potrebbe pure modificare default.style, ma è preferibile lasciare questo inalterato e crearsene uno proprio.

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

pgAdmin OSM data

condividi: