un tutorial a Vroom estraendo dati da OpenStreetMap

Maurizio Napolitano
Tecnologie Civiche
Published in
5 min readMay 2, 2019

Quando Andrea mi ha chiesto il percorso migliore per visitare le pasticcerie di Trento

Il problema del commesso viaggiatore

Andrea è un amico che, ogni volta che viene a trovarmi a Trento è appassionato di prodotti gastronomici. La sua curiosità non è solo nel prodotto in sé, ma, più in generale, in tutta la cura dei negozi al dettagli: quali sono i prodotti esposti, come sono prodotti, dove si trovano i locali, come si presentano, quali colori trova, profumi ed altro ancora.

Questa volta Andrea ha deciso che vuole visitare tutte le pasticcerie della città facendo un giro in auto.
La sua esigenza pertanto è quella di avere l’elenco di tutte le singole pasticcerie di Trento e di trovare poi il percorso ottimale per visitarle tutte.
Una esigenza classica di chi si occupa di logistica che viene categorizzata con il problema del commesso viaggiatore.

Gli ingredienti per risolvere questo problema sono:
- l’elenco dei punti da visitare
- un grafo stradale su cui muoversi
- l’algoritmo che lo risolve
- una mappa che mostra il percorso da fare

Nel mondo del software libero e degli open data questo si risolve utilizzando i dati di OpenStreetMap analizzati con VROOM — Vehicle Routing Open-source Optimization Machine.

VROOM è software molto potente e veloce la cui demo può essere provata al sito http://map.vroom-project.org
La demo offre già tutto il necessario per risolvere il problema di Andrea.
Tutto il software i dati del grafo stradale di OpenStreetMap più il reverse geocoding sono già caricati.
L’utente può decidere di inserire i dati che Vroom dovrà calcolare o con una serie di clic sulla mappa, oppure caricando un file .json secondo le specifiche proposte, o, ancora più semplicemente, caricando un file .csv dove ogni riga contiene latitudine e longitudine divisi da una virgola

Come trovare le coordinate delle pasticcerie a Trento

In OpenStreetMap le pasticcerie vengono categorizzate il tag shop=pastry.
Con Overpass Turbo pertanto diventa molto facile, utilizzando il wizard, ottenere il codice necessario ad interrogare le API di OpenStreetMap per scaricare questo elenco.

Al clic su “Wizard” basterà scrivere “ shop=pastry in Trento

ed ottenere così la mappa con tutte le pasticcerie della città

utilizzando il bottone Esporta è possibile esportare i dati in vari formati.
Solo che, fra questi, non c’è il formato CSV richiesto da Vroom.
Serve pertanto rivedere la query che genera overpass-turbo in modo che l’output sia un file csv.
La sintassi è ben descritta in questa pagina — https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#CSV_output_mode
Nei fatti si tratta di sostituire la riga di output (la numero 6) nel seguente modo:

[out:csv(::lat,::lon;false; ",")][timeout:25];

dove
::lat => estrae l’informazione sulla latitudine
::lon => estrae l’informazione sulla longitudine
false => dichiara che non deve essere stampata la riga di intestazione
“,” => dichiara quale è il carattere di separatore

va comunque fatta una ulteriore considerazione:
in OpenStreetMap i dati non sempre sono rappresentati con dei punti, anzi, molto spesso oggetti come attività commerciali, possono essere rappresentati come poligoni (usati per descrivere l’edificio).
In questo caso si pone il problema di avere un solo punto di riferimento.
La soluzione tampone (anche se non del tutto congeniale) è quella di chiedere alle overpass-api di restituire il centroide del poligoni (qualora ci sia).
Questo viene fatto cambiando il valore di out da body a center (riga 17)

out center;

ed eliminando l’ultima istruzione ( out skel qt;) altrimenti comparirebbero sia i punti dei centroidi che i poligoni)

Una volta eseguito il codice overpass-turbo non mostrerà più la mappa ma l’ elenco delle coordinate strutturate in formato csv.

per ottenere il file basta sceglere il bottone “ Esporta” e la voce del menu “ dati grezzi direttamente da Overpass API

Il calcolo del percorso

Il calcolo del percorso diventa così una cosa semplicissima
Dal sito demo di Vroom si carica il file e subito sulla mappa appariranno i dati arricchiti anche con le informazioni del più vicino numero civico presente.

premendo poi il bottone per effettuare il calcolo si ottiene il percorso ottimale

I punti presenti sulla mappa possono anche essere aggiunti manualmente o modificati o cancellati o scelti come punto di partenza o di arrivo

in modo poi da poter creare nuovamente il percorso

Nel caso di Andrea, lui ha deciso di eliminare quelle del centro storico perché le aveva già visitate a piedi.

Poi però mi ha chiesto di scrivere questo tutorial perché vuole rifare la stessa esperienza in altre città 🙂

Di mio ho anche fatto presente che deve anche ringraziare la comunità di OpenStreetMap per tenere aggiornati i dati delle pasticcerie e che, nel suo viaggiare, può sempre continuare a contribuire al progetto 🙂

Originally published at http://de.straba.us on May 2, 2019.

--

--

Maurizio Napolitano
Tecnologie Civiche

fbk, openstreetmap, gis, neocartography, okfn italy, open data, open source, software libero, sociologia, trento, pallavolo, digital commons lab