OSRMdistance

12

description

Automatizzare l'Open Source Routing Machine

Transcript of OSRMdistance

Page 1: OSRMdistance

OSRMDistance

Estrarre distanze tramite routing per QA ed analisi statistiche

Stefano Sabatini

Rovereto, OSMit 2013

Stefano Sabatini OSRMDistance

Page 2: OSRMdistance

Le origini

Avrei la necessità di metter su una matrice delle distanze

stradali in km e tempi di percorrenza tra i comuni sardi

che son 377. Quindi vorrei sapere se c'è un metodo

veloce e facilmente replicabile per calcolare due matrice

377x377, una coi km una coi tempi di percorrenza.

(Andrea su Spaghetti Open Data, 16 Luglio)

How hard can it be?Due giorni dopo abbiamo OSRMDistance.

Stefano Sabatini OSRMDistance

Page 3: OSRMdistance

Compilato è bello

Ci vuole la forza bruta: n2 richieste per n punti (anche perchèle distanze possono variare a seconda della direzione)

Fare le richieste ad un servizio online non è proponibile(377× 377 = 142129 richieste → ban dell'ip in 3...2...1...)

Compiliamo OSRM su una distro Ubuntu-likehttps://github.com/sabas/OSRMdistance/blob/master/

QUICKSTART.md

Stefano Sabatini OSRMDistance

Page 4: OSRMdistance

Estrazione dei dati

Per ottenere i dati, preso l'estratto regionale della Sardegna

1

./osrm-extract sardegna.osm.pbf

(circa 30 secondi, Intel i5)

2

./osrm-prepare sardegna.osrm sardegna.osrm.restrictions

(circa 50 secondi, all your ram are belong to us)Dopo la con�gurazione si avvia in un terminale il server:

3

./osrm-routed

Stefano Sabatini OSRMDistance

Page 5: OSRMdistance

Automatizzare OSRM

Gli script lavorano su �le csv e sono lanciabili sia da terminaleche da webserver: il formato base è �nodo;lat;lon� dove nodopuò essere una etichetta qualsiasi

osrmdistance avvia la computazione della distanza su tutte lecombinazioni

osrmsinglepoint data una lista ed una stringa nel formatobase calcola le distanze da quest'ultima a tutti gli elementidella lista

Stefano Sabatini OSRMDistance

Page 6: OSRMdistance

Dati di partenza

Due script aiutano nella preparazione dell'input: extractData

estrae un csv da un �le osm, osrmnearest cerca le coordinatepiù vicine sul grafo stradale

I dati quindi possono essere composti da JOSM o daoverpass-turbo ad esempio

Stefano Sabatini OSRMDistance

Page 7: OSRMdistance

Monitoraggio dei percorsi

Stefano Sabatini OSRMDistance

Page 8: OSRMdistance

Overpass Turbo

Vogliamo individuare gli aeroporti della Sardegna

Stefano Sabatini OSRMDistance

Page 9: OSRMdistance

Geojson.io

Filtriamo i risultati (sorry Oristano e Tortolì) e poi convertiamo nelformato richiesto (node;lat;lon)

Stefano Sabatini OSRMDistance

Page 10: OSRMdistance

Test con OSRMDistance

Facciamo una ipotesi, ad esempio parto da Gavoi;40.1631;9.1961e voglio vedere quanto ci vuole per raggiungere i tre aeroporti(normalizzando le coordinate)Olbia;40.90336;9.51270Alghero;40.62843;8.29361Cagliari;39.25399;9.06374

Stefano Sabatini OSRMDistance

Page 11: OSRMdistance

Risultati

L'esecuzione portafrom;to;status;distance;timeGavoi;Olbia;OK;131997;5956Gavoi;Alghero;OK;147357;7564Gavoi;Cagliari;OK;151236;7525Ovvero, in maniera più comprensibile:

Da A Distanza Tempo

Gavoi Olbia 131,997 km 1:39'16�

Gavoi Alghero 147,357 km 2:06'04�

Gavoi Cagliari 151,236 km 2:05'25�

Stefano Sabatini OSRMDistance

Page 12: OSRMdistance

Conclusione

Queste sono giusto idee per mostrare le potenzialità del grafostradale di OSM.Cos'altro si può fare?

Convertirlo in un altro linguaggio

Monitorare i percorsi a lunga distanza

Proporre analisi di raggiungibilità

Stefano Sabatini OSRMDistance