OSRMdistance e il circolo virtuoso dei “Community Data”

Selezione_035Premessa: per community data intendo tutte quei dati che sono prodotti dagli utenti di una determinata comunità open source. Questi utenti contribuiscono spontaneamente con la propria attività e sono ben consapevoli che quelle informazioni potranno essere riutilizzate  da chiunque, nel rispetto dei termini della licenza aperta attraverso la quale sono rilasciate. Esempi di queste comunità sono quelle dei vari Wikipedia, DBpediaOpenStreetMap, OpenWeatherMap ecc

Ultimamente parlo sempre più spesso di community data perché penso che rappresentino una tipologia di  fonte dati che ha ormai raggiunto un grado di attendibilità considerevole,  destinato inoltre a crescere in maniera esponenziale in futuro. I community data offrono già oggi una copertura, un dettaglio e una completezza che per certi versi non ritroviamo nelle classiche fonti, possono essere estratti con relativa facilità, possiamo direttamente interagire con essi e ce ne possiamo servire senza troppe limitazioni.

In questi giorni ho ho avuto un’ulteriore conferma diretta della loro importanza. Per motivi di lavoro infatti avevo necessità di ottenere una matrice delle distanze stradali dei comuni sardi, cioè un tabellone in grado di dirmi quanto dista un dato comune da un altro comune.

Un bel problema visto che non non è certo facile reperire informazioni del genere. È possibile ottenere qualcosa di simile affidandosi ad esempio alla tavola delle distanze kilometriche dell’ACI (a dir il vero molto old school) oppure l’onnipresente google maps che come sappiamo offre un ottimo servizio di routing.

Però, dato che avevo necessità di una matrice 377*377  (377 è il numero dei comuni sardi), dovevo tirar giù una miriade di dati: più di 140 mila! Non  potevo certamente affidarmi a delle interrogazioni puntuali o utilizzare le API di Google che permettono di richiedere meno di 2000 chiamate giornaliere (superato questo limite infatti google richiede che venga acquistata una API key).

Avevo un  bel problema, non volevo acquistare una API key e al contempo intuivo che potevo risolvere il tutto affidandomi a OpenStreetMap  e i suoi community data.

Esiste un interessantissimo progetto infatti, chiamato OSRM (Open Source Routing Machine), un motore di routing, un navigatore  nato per fornire le indicazioni stradali a partire dai geodati di OpenStreetMap, e che quindi è anche in grado di fornire le distanze tra due o più punti in una mappa.

In pratica era ciò che cercavo, un servizio di routing open source e senza limitazioni particolari che usato a dovere avrebbe permesso di affrancarmi dalle API di google o da vecchie matrici in pdf.

Rimaneva il problema di poter materialmente effettuare 140 mila ricerche. Ovviamente non volevo farlo a mano, dovevo riuscire a trovare il modo di inoltrare le richieste in maniera automatica.

A questo punto entra in scena il buon Stefano Sabatini (quello di OpenNuraghe per intenderci), che leggendo la mia richiesta di aiuto sul forum di Spaghetti Open Data si  offre di darmi una mano dicendomi che è possibile creare uno script capace di interrogare automaticamente le API di  OSRM e che sarebbe stato in grado di crearlo in poco tempo.

Selezione_036Nasce così OSRMdistance, un comodissimo tool che, utilizzando il motore di OSRM, permette di trovare  la distanza in kilometri ed in tempi di percorrenza espressi in minuti  a partire da una serie di punti geografici contenuti in un dataset .

L’utilizzo è abbastanza semplice, basta avere un file csv di input dove siano indicati il nodo di OSM e le coordinate dei punti, in seguito, dopo aver scritto un semplice comando nel terminale, otterremo il nostro output con la matrice delle distanze!

Ci sono alcuni accorgimenti tecnici da tener presenti: anzitutto bisogna aver installato in locale o in un proprio server il motore di OSRM. La API policy del progetto infatti vieta che vengano effettuate delle chiamate massive direttamente sul loro server. Ma il bello dell’open source sta anche nel fatto che possiamo scaricare il motore e installarcelo dove desideriamo così da avere il nostro personale motore di routing nel nostro computer e farci quel che vogliamo.

Stefano ha in seguito integrato il tool con altre funzionalità, come quella che permette di trovare il punto più vicino alla strada dei nodi che abbiamo preso in considerazione, oppure la possibilità di estrarre direttamente da un file osm (i file di OpenStreetMap) le coordinate dei nodi che ci interessano.

Tornando alla creazione della matrice delle distanze, con Stefano iniziamo quindi a testare il nuovo tool e riscontriamo dei problemi: alcuni comuni, Sassari Lodine, La Maddalena e Lodè non risultano collegati! Il problema deriva essenzialmente dai geodati di OpenStreetMap, alcune strade infatti risultavano mal collegate nella mappa e nel caso di La Maddalena non risultava collegato il traghetto che porta a Palau, creando così inevitabilmente dei problemi durante la creazione della rotta.

E qui entra in gioco quel che io chiamo il circolo virtuoso dei community data e che in sintesi si avvia attraverso la possibilità di chi utiizza queste fonti di poter correggere, integrare, migliorare i dati direttamente a monte così da potersi affidare, per i futuri lavori, ad una fonte migliorata dalle proprie correzioni oltre che da quelle di altri utenti.

Se questa organizzazione del lavoro viene adottata ogni qual volta si porta avanti un progetto basato su nuove estrazioni dai community data, si innesca appunto un circolo virtuoso che aumenta inevitabilmente la qualità della fonte.

E insieme a Stefano infatti, adottiamo questo tipo di approccio: iniziamo a correggere gli errori di OpenStreetMap direttamente sulla piattaforma, ottenendo così dopo varie prove il risultato che mi ero prefissato: una matrice corretta con tutte le distanze tra i comuni della Sardegna.  (clicca qui per scaricare i dataset)

Questo tipo di approccio penso rappresenti un enorme vantaggio rispetto a quello che si ha rapportandosi con le classiche fonti di dati provenienti dal web, soprattutto rispetto alle informazioni provenienti da servizi offerti da aziende private come Google, Bing ecc, ma anche rispetto ai numerosi Open Data amministrativi.

In questi casi infatti, se trovassimo un errore o una mancanza, l’unica nostra possibilità consisterebbe nel segnalare il problema a monte rilasciando un feedback e in seguito aspettare che l’errore venga corretto dall’amministratore o correggere direttamente ed unicamente il nostro lavoro.

Raccontando questa esperienza ho voluto sottolineare il fatto che con i Community data abbiamo la possibilità di interagire direttamente con la fonte, correggendo gli errori integrando nuove informazioni, migliorando così la qualità della fonte stessa. Una fonte sulla quale si ha il pieno controllo, la piena libertà di azione, costi praticamente nulli: tutti fattori determinanti per chi si occupa di innovazione e ha un forte interesse a migliorare la produttività del proprio lavoro.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...