Overpass turbo

Estrarre dati da OpenStreetMap con Overpass turbo

Nata nel 2004 per creare mappe stradali in maniera collaborativa e basata sull’approccio di Wikipedia, OpenStreetMap (o brevemente OSM)  è cresciuta a tal punto da diventare oramai la più grande banca dati libera mondiale di mappe e geodati; ricordiamo che i dati di OSM sono “open”, rilasciati con licenza ODbL. Poter attingere a questi dati (esportarli) per i propri scopi è una grossa comodità ed esistono varie soluzioni per farlo, in primis lo strumento di “esportazione” presente nello stesso sito di OSM.

OSM esporta

Qui parliamo di uno degli strumenti che ritengo più utili, sia per la semplicità d’uso sia per la possibilità di fare delle estrazioni “mirate”, cioè con la possibilità di scegliere (o filtrare) il tipo di dati che ci servono per una determinata zona geografica: Overpass turbo.
Si tratta un’ applicazione web-based, realizzata da Martin Raifer,  che permette di effettuare delle query (tra l’altro anche in modo assistito) basate sulle Overpass API ed esportare i risultati ottenuti in diversi formati. Si accede all’indirizzo overpass-turbo.eu  e poi c’è la sua pagina Wiki  con tutta la documentazione e una guida d’uso che vi invito di andare a guardare per approfondire quello che leggerete in questo articolo.

L’interfaccia web

Incominciamo col dare uno sguardo all’interfaccia web di questo applicativo; questa è composta da due quadri principali:
– il quadro per visualizzare la mappa;
– il quadro per visualizzare ed editare le query da eseguire.

Nella parte alta della finestra troviamo la barra del menù principale con le seguenti voci:

  • Esegui : esegue la query corrente (quella presente nel quadro delle query);
  • Condividi: fornisce uno short-link per condividere la query corrente;
  • Esporta: esportare i dati o la mappa risultato della query eseguita;
  • Wizard: procedura guidata per creare delle query sulla base di un date condizioni (filtro);
  • Salva: salvare la query corrente per un suo riuso futuro; il salvataggio viene fatto sul vostro browser (tramite Web Storage API) quindi permane fin quando non cancellate la cache;
  • Carica: caricare una query precedentemente salvata (trovate precaricate anche delle query di esempio, molto utili per capire come funzionano);
  • Impostazioni: impostare la lingua, la mappa in background ed altri parametri dell’interfaccia;
  • Aiuto: help sulle principali caratteristiche dell’applicazione e il suo uso.

Overpass turbo interfaccia

Invece all’interno del quadro della mappa abbiamo :

  • il box per la ricerca delle località geografiche o più precisamente di qualunque entità georiferita su OSM con una sua denominazione (regione, città, via, fiume, hotel, bar, … etc);
  • i bottoni dello zoom, ma si può usare anche la rotellina del mouse;
  • una mini-toolbar con dei controlli mappa (vd. figura seguente).
controlli mappa

controlli mappa

E’ interessante la possibilità di condividere le proprie query Overpass con altri; l’utility ci fornisce un URL (permalink) che possiamo distribuire a chi vogliamo (amici, collaboratori,..) permettendogli di vedere e caricare la nostra stessa query, quindi eseguirla o modificarla, precisando che questi lavoreranno su una propria copia della query. Sono presenti due opzioni:

Overpass link

  • includere lo stato corrente della mappa: ovvero condividere, oltre la query, anche la mappa corrente visualizzata sul nostro browser;
  • esegui questa richiesta dopo il caricamento: la traduzione italiana è un pò bruttina … ma vuol dire che chi apre il link condiviso, vedrà automaticamente eseguita la query (senza bisogno di premere “Esegui”).

Se volete un esempio, questo è un link (tratto dalla Wiki-page di Overpass turbo) che condivide una query per cercare i picchi montuosi nella zona delle Dolomiti; provate a caricarla e poi eseguirla !

Il quadro della mappa è quello in cui selezioniamo l’area geografica sulla quale vogliamo effettuare la nostra ricerca di dati in OSM, trascinandola (pan) e ingrandendola/riducendola (zoom); per fare questo possiamo anche aiutarci con la funzione “cerca”. Le query che scriviamo quindi, si applicano di default a tutta l’area che appare in questa finestra (in realtà, vedremo più avanti l’area di applicazione può essere cambiata).
Per esempio nella figura seguente, abbiamo inquadrato una zona della città di Torino.

quadro_mappa

Se invece  usiamo il bbox (bounding box), allora il campo della ricerca è limitato solo all’area contenuta in esso. Il bbox può essere spostato e ingrandito/rimpicciolito posizionandosi sugli angoli.

bbox

Per quanto riguarda le Impostazioni, potete usare tranquillamente Overpass turbo senza modificarle e lasciando quelle di default; però credo sia utile dare un’occhiata a quelle contemplate per la mappa.

La mappa-base

La mappa di background che Overpass turbo usa di default è la OSM standard, ma abbiamo la possibilità di cambiarla, ovvero cambiare il server delle tiles. Basta procurarsi l’URL del server che desideriamo e poi scriverlo dentro l’apposita casella dentro le impostazioni della mappa.

OVP_impostaz_mappa

Un sito che vi suggerisco è  leaflet-providers/preview ; qui potete trovare diversi tile-server, scegliere la mappa che vi interessa e poi nella finestra che mostra il codice JavaScript, copiarvi l’URL che trovate scritto come primo parametro dell’oggetto L.tilelayer(…), come mostrato nella figura seguente:

tile server URL

A titolo di esempio, di seguito ecco  alcuni URL di tile-server tra i più comuni:

Altra cosa che possiamo impostare, è il livello di trasparenza della mappa, mettendo un valore compreso tra 0 (totalmente trasparente) e 1 (totalmente opaca); cioè si possono usare valori decimali come 0.1 – 0.2 – 0.3 … etc.

Sempre nelle impostazioni di mappa, si può scegliere se far apparire o meno:

  • un mirino a centro della mappa;
  • le piccole entità (come POI: Point of Interest) segnate sulla mappa;
  • delle statistiche sui dati caricati e visualizzati sulla mappa ( di una query).

Visualizzazione dei risultati e statistiche

Il quadro della mappa serve sia per selezionare l’area geografica sulla quale vogliamo effettuare la nostra ricerca (query) sia per visualizzare i risultati della ricerca; questi vengono riportati graficamente sulla mappa come mostra l’esempio seguente:

OVP_risultati

Gli elementi visualizzati sono: punti (POI), linee e poligoni, ovvero i diversi tipi di geometrie possibili per dei dati vettoriali; chiaramente, a secondo della query che avete eseguito potranno apparire tutti e tre i tipi o solamente alcuni. Una piccola nota: anche se, per esempio, cercate delle strade, quindi essenzialmente degli elementi lineari, potete comunque ottenere tra i risultati anche dei punti (nodi delle strade) e dei poligoni (strade che formano un percorso chiuso). La simbologia usata per la loro rappresentazione è spiegata nella legenda disponibile nel menu Aiuto:

OVP_legenda

Inoltre i risultati di una query possono pure essere visualizzati nel formato JSON (JavaScript Object Notation); nella finestra in alto a destra ci sono i bottoni per passare dalla visione mappa alla visione dati.

OVP_dati_JSON

Sempre nel quadro della mappa, quando si esegue una query, nell’angolo in basso a destra compaiono anche delle statistiche sui risultati ottenuti (a meno che nelle impostazioni le disabilitiamo); precisamente esse danno informazioni sugli elementi “caricati” (nodi, percorsi o way, relazioni) e sugli elementi “visualizzati” (POI, linee, poligoni).
Ma qual’è la differenza ? Per capirlo meglio dobbiamo accennare al modello di rappresentazione dei dati usato da OSM; questo modello prevede :

  • elementi (nodi, percorsi, relazioni) che sono degli oggetti concettuali per rappresentare il mondo reale (vd. elementi OSM);
  • elementi detti semantici (punti, linee, poligoni) che sono le tipologie geometriche degli oggetti rappresentati sulla mappa.

E’ facile fare confusione perchè spesso i termini sono usati in modo intercambiabile, ma in realtà gli elementi semantici sono implementati tramite gli elementi semplici, ovvero questi (nodi, percorsi, relazioni) costituiscono le primitive per rappresentare gli oggetti: punto, linee e poligoni. Allora le statistiche ci dicono sia quante sono le primitive (elementi caricati) sia quanti sono gli elementi geometrici visualizzati nella mappa (o dentro il bbox), risultato di una interrogazione.

Le query Overpass

Passiamo ad esaminare la funzionalità principale di Overpass turbo, ovvero la scrittura delle query per interrogare OSM ed estrarre i geodati. Per scrivere una query abbiamo a disposizione il pannello a sinistra dell’interfaccia, che in pratica è un semplice text-editor; nelle impostazioni vi consiglio di lasciare abilitata l’opzione “editor evoluto” perchè così vi appare una colorazione delle parole chiave e della sintassi che aiuta per leggere il codice.
Come abbiamo detto all’inizio, le query sono basate sulle Overpass API  e il linguaggio usato è Overpass QL  per il quale i riferimenti principali sul web sono i seguenti:

Nel menù “Carica” (carica query precedentemente salvate) troviamo anche alcuni esempi di query che possono essere utili per iniziare a capire come sono fatte.

query di esempio

Altri esempi di query  li troviamo in questa pagina: Overpass turbo/Examples; le query qui sono scritte nel formato Overpass XML, ma non è un problema vedere come sono trascritte in Overpass QL. Basta cliccare sulle icone che assomigliano a un piccolo “volante” (turbo icons) e la query viene visualizzata e caricata sull’interfaccia web di Overpass turbo.

turbo_icon

Beh, se volete scrivervi direttamente le query, è evidente che dovete imparare Overpass QL! Ma fortunatamente non è sempre necessario e potete limitarvi ai concetti fondamentali, almeno se vi bastano delle interrogazioni relativamente semplici; infatti in Overpass turbo è presente un autocompositore di query che ci facilita il compito.

Wizard: il compositore di query

Questo wizard funziona sulla base di sintetiche indicazioni su cosa si vuole estrarre da OSM, creando automaticamente una query generica adatta per farlo; semmai poi, partendo da questa e se abbiamo un minimo di dimestichezza con Overpass QL, la possiamo modificare per adattarla meglio alle nostre esigenze.

Per usarlo basta scrivere dentro la casella “cerca” un’ espressione filtro che indichi cosa vogliamo cercare (ed estrarre) in OSM, secondo delle regole molto semplici ed intuitive.
Il filtro più elementare ha la forma key=value, che significa cercare tutte le entità di OSM che hanno un tag uguale alla data coppia key=value. Ricordiamo che in OSM tutte le entità fisiche registrate sul terreno (strade, edifici, monumenti, parchi … etc) vengono identificate mediante un tag; più precisamente, certamente da un tag primario (primary features) ed eventualmente anche da tag secondari (additional properties) come per es.: indirizzo, nome, descrizione, sito web, … etc.

Nella pagina OSM Map features potete trovare tutti i possibili tag di OSM con la corrispondente descrizione; per esempio ecco alcuni tag primari:
– amenity=bar                       : identifica i bar
– amenity=school                 : identifica le scuole
– amenity=drinking_water   : identifica le fontanelle
– highway=residential          : identifica le strade residenziali
– place=city                           : identifica le città

Vi consiglio di andare sempre a controllare qual’è la descrizione esatta del tag OSM (nella pagina indicata prima) per essere certi di cosa volete cercare; infatti molte volte per individuare una categoria di oggetti, esistono anche più tags similari ed è bene capire le differenze.

Bene, dopo aver scritto il nostro filtro, premiamo il bottone componi ed esegui una query :

OVP_wizard

e il wizard scrive automaticamente ed esegue la query adatta per fare la nostra ricerca (se il filtro scritto non contiene errori) nell’area geografica che abbiamo selezionato. Nel caso del mio esempio, ho fatto una ricerca di highway=residential in un’area di Torino e il risultato è il seguente:

OVP_wizard_result1

La scrittura del filtro prevede anche la possibilità di usare il carattere jolly “*” per indicare  “qualunque valore”. Per esempio se scriviamo: highway=* , cercheremo le strade di qualsiasi tipo.
Poi, oltre all’uguaglianza, possiamo usare anche i seguenti operatori:

  • key!=value :  le entità in cui key  ha un value diverso da quello indicato;
  • key:valuefragment : le entità in cui key ha un value che contiene la parte valuefragment indicata;
  • key~regex : le entità in cui key ha un value che soddisfa la regex (regular expression) indicata;
  • key!~regex : le entità in cui key ha un value che non soddisfa la regex (regular expression) indicata;

Per fare un’altro esempio, se voglio cercare sia gli uffici postali (amenity=post_office) che le cassette postali (amenity=post_box), posso scrivere questo filtro: amenity:post.

Altra cosa che possiamo usare per scrivere un filtro, sono gli operatori logici and (&) e or (||) e quindi, per esempio, scrivere un filtro del tipo: (highway=primary or highway=secondary) and type:way.

Oltre ai tag, un filtro può essere scritto usando i meta-data OSM con le seguenti possibilità:

  • type:osm_type – le entità di un certo tipo (node, way, relation);
  • id:osm_id – le entità che ha un determinato id;
  • user:osm_user – le entità il cui ultimo aggiornamento è stato fatto da un dato user;
  • uid:osm_uid – le entità il cui ultimo aggiornamento è stato fatto da un user con un dato uid;
  • newer:date – le entità il cui ultimo aggiornamento è posteriore alla date indicata (il formato data da usare è: yyyy-mm-ddThh:mm:ssZ);

Usare questo tipo di condizioni associate a un tag, può essere molto utile per rifinire la ricerca; per esempio con questo filtro:      highway=* and type:way and newer:”2014-05-23T14:00:00Z”
dico di cercare tutte le strade di tipo “way” con data ultimo aggiornamento più recente del 23/05/2014 ore 14,00.

La funzione filtro del wizard ha anche una modalità per così dire “intelligente” che ci viene in aiuto quando cerchiamo qualcosa e non sappiamo qual’è il tag che la definisce; infatti per alcune categorie chiave (ristorante, cinema, albergo, cimitero, chiesa, … etc), se queste sono presenti nelle definizioni di oggetti in OSM, è il wizard stesso che scrive la query proponendo i tag più opportuni. Per esempio, se nel filtro scriviamo:
– chiesa,  il wizard propone:  amenity=place_of_worship and religion=christian
– albergo, il wizard propone: tourism=hotel
– farmacia, il wizard propone: amenity=pharmacy

non vi resta che fare delle prove e divertirvi a vedere che cosa viene fuori !

Nell’espressione del filtro del wizard abbiamo anche la possibilità di indicare “dove” cercare i dati, variando le impostazioni di default e cioè in tutta l’area della mappa o nel bbox; precisamente possiamo scegliere:

  • in place – cercare all’interno di un’area (città, regione, sobborgo, …) che ha nome place ;
  • around place – cercare nelle prossimità di una entità che ha nome place;
  • global – cercare ovunque anche al di fuori dell’area geografica rappresentata nel quadro mappa.

Per fare degli esempi di filtri di questo tipo:
tourism=hotel in Firenze   :  cerca alberghi nell’area della città di Firenze
amenity=drinking_water around  “stazione santa maria novella”  : cerca fontanelle in prossimità della stazione “S.M. Novella” a Firenze.

Chiaramente l’opzione “global” è da usare con le pinze, perchè se la quantità dei risultati della ricerca è troppo grande, si può incorrere in un problema di overflow ! In questo caso e più in generale per qualunque query che dovesse restituire un numero di dati troppo grande, vi apparirà un avvertimento simile a questo:

OVP_toobig

Vi ricordo che per individuare visivamente sulla mappa i risultati della ricerca, o nel caso “global” o quando l’area è molto grande o comunque se avete difficoltà a trovarli, potete usare la funzione zoom su dati presente nella mini-toolbar.

Fatte le nostre query, abbiamo la possibilità di esportare i risultati ottenuti e più precisamente sia i dati (dati vettoriali) sia la mappa (immagine raster o interattiva). C’è anche la possibilità di esportare le query che abbiamo scritto, il che può essere utile per salvarle per un loro riuso futuro; comunque questo ci interessa meno e saltiamo l’argomento.

Esportazione dei dati

Esportare i dati è ovviamente la cosa più utile perchè ci consente di caricarli nei propri sistemi GIS e quindi fare le rappresentazioni e le analisi che servono. I dati esportabili sono gli elementi vettoriali risultato delle query e coincidono con quelli indicati come “visualizzato” nelle statistiche; quindi per esempio nel caso seguente, vengono esportati: 201 punti, 530 linee e 2 poligoni.

OVP_dati_visual

I dati possono essere esportati in diversi formati; innanzitutto abbiamo i ben noti : geoJSON, GPX e KML (il tipico formato di Google Maps). Se non avete vostre preferenze o esigenze particolari, vi consiglio di scegliere il formato geoJSON per la sua versatilità e per essere facilmente supportato da diversi sistemi.

OVP_export_dati

Se per esempio importiamo i dati geoJSON in QGIS, ci appare una finestra come la seguente in cui ci viene chiesto quali layer vettoriali caricare (potrebbero non interessarci tutti); qui come “Number of features” ci ritroviamo lo stesso numero di geometrie che risultavano come “visualizzato” sulla mappa di Overpass turbo.

qgis_load_geoJSON

Un’altra possibilità di esportare i dati è quella indicata come “salva geoJSON come gist“; chi usa “git” (e la piattaforma di hosting github) sa bene cosa vuol dire, ma per chi non lo sapesse, spiego brevemente di cosa si tratta. Gist è un servizio offerto da github (gist.github.com), che permette rapidamente di condividere e scambiare con altri: codice, annotazioni, snippet et simili; il servizio è gratuito ma per usarlo bisogna registrarsi su github.

OVP_gist_export

Usando questa opzione di esportazione, i dati geoJSON vengono automaticamente salvati su Gist (compare un link) e quindi possono essere usati e condivisi nei modi che consente questa applicazione web.

OVP_geoJSON_gist

Quando scegliamo salva geoJSON come gist, in realtà abbiamo anche un’altra possibilità: Modifica con geojson.io; questa opzione ci consente di caricare i dati esportati direttamente in geojson.io, un editor web-based di geodati in formato geoJSON. E’ un’altra cosa rispetto a Gist, ma credo che sia stata messa qui, perchè, come Gist, anche geojson.io è un progetto promosso da github.

geojson.io

 L’altro possibile formato di esportazione  è quello grezzo, ovvero il formato JSON (da non confondere con geoJSON !) che è lo stesso adoperato da Overpass turbo, quando si passa dalla visione mappa alla visione dati. Questo formato, che più esattamente si chiama OSM JSON (è la variante JSON del formato OSM XML), è il formato standard di interscambio di Openstreetmap, quindi quello più adatto quando si vogliono fare delle modifiche/aggiornamenti dei dati presenti in OSM, per poi ricaricarli in OSM. Quindi chiaramente è utile per gli utenti di OSM (registrati) che contribuiscono al suo aggiornamento.

Per questi ultimi (OSM editors) è utile anche l’altra possibilità che ci offre la funzione di export: carica dati in un editor OSM: JOSM, level0; essa permette appunto di caricare i dati esportati direttamente in un editor OSM per poterli modificare e poi ributtarli su OSM. Gli editor proposti sono due: JOSM che è uno dei più famosi, è scritto in Java e va installato sul proprio PC e level0 che invece è una’applicazione web (ma più grezzo); quindi se non avete JOSM installato e provate il caricamento dei dati esportati in esso, vi viene restituito un messaggio di errore.

Esportazione della mappa

Non credo che la possibilità di esportare la mappa (coi risultati) sia utile tanto quanto esportare i dati, però questa funzione esiste e comunque ci possono essere casi in cui risulta comoda. Le possibilità di esportazione che abbiamo a disposizione sono tre:
– come immagine (statica) png
– come mappa interattiva
vista attuale della mappa (su OSM)
ma in realtà l’ultima (vista attuale) non è una esportazione vera e propria; infatti produce solo un link a OSM con la visualizzazione della stessa area geografica visibile su Overpass turbo (la vista attuale appunto), senza però i risultati della query.

OVP_vista_mappa_attuale

La prima opzione, invece produce una immagine statica (file formato PNG) che riproduce la mappa insieme ai risultati; in pratica è uno snapshot di quello che vedete al momento nel riquadro mappa che viene scaricato sul vostro PC. Possiamo regolare la posizione della mappa, il livello di zoom e le sue dimensioni, direttamente sull’interfaccia web di Overpass turbo (le dimensioni le cambiamo regolando la finestra del browser) prima di eseguire l’export.

OVP_mappa_statica

Tra le impostazioni di Overpass turbo, c’è la possibilità di scegliere se questa immagine esportata deve contenere o no:
– la scala
– l’attribuzione delle tiles della mappa in background.

L’altra possibilità di esportazione, come mappa interattiva è la più interessante. Essa produce un’altra pagina web (realizzata con LeafletJS) che riproduce a schermo intero lo stesso quadro mappa di Overpass turbo, con le stesse possibilità di interagire con essa, cioè: spostarla, zoomare e cliccare sugli elementi evidenziati (i risultati della query).

OVP_mappa_interattiva

Ok, siamo arrivati alla fine !
Abbiamo esaminato, spero in maniera chiara, come funziona questo utile strumento web, saltando volutamente la trattazione della sintassi del linguaggio per scrivere le query (Overpass QL); ma per chi volesse approfondirlo vi ho dato prima tutti i link utili per farlo.
In ogni caso, voglio sottolineare che imparando a usare bene il Wizard e quindi la scrittura dei filtri, potete comunque riuscire a estrarre da OSM tutti i dati che vi interessano. Dopodichè, esportandoli (vi consiglio ancora di usare il formato geoJSON) nel vostro sistema GIS o di editing di geodati,  potete elaborarli, filtrarli ulteriormente  e presentarli (vestire i layer) più comodamente come meglio vi pare !

 

 

condividi: