2012-12-30 16 views
7

Recentemente ho giocato con la libreria di routing OSRM. Sembra essere estremamente efficiente nel risolvere il problema del percorso più breve. Tuttavia, non ho visto come calcolare i percorsi più brevi con il singolo sorgente. Più precisamente, dato un punto di partenza fisso, calcola le distanze più corte verso tutte le località che possono essere raggiunte entro un determinato limite di distanza (ad esempio, raggiungibile entro 30 minuti).Come calcolare i percorsi più brevi con sorgente singola con OSRM?

L'OSRM utilizza internamente le gerarchie di contrazione. Dalla mia comprensione, questa tecnica è molto superiore all'algoritmo di Dijkstra quando si tratta di calcolare la distanza tra due posizioni nei dati del mondo reale. Tuttavia, per il mio problema, l'algoritmo di Dijkstra sembra adattarsi meglio, vero?

L'OSRM fornisce un'API per calcolare i problemi del percorso più breve della singola origine (con un limite sulla distanza)? Esistono altre librerie di routing gratuite che sono più adatte a questo tipo di problema? Preferibilmente uno con un buon supporto per i dati di OpenStreetMap.

risposta

6

L'OSRM utilizza le gerarchie di contrazione (CH) per essere veloci per "routing uno a uno". Per far funzionare il CH è necessario un algoritmo bidirezionale adattato (A *, Dijkstra, ...) in modo che il caso della singola fonte sia più difficile. MA un algoritmo uno a molti è relativamente semplice se sai in anticipo quali destinazioni vuoi.

Inoltre, dare un'occhiata al documento "Fast Detour Computation for Ride Sharing" o here se si desidera una soluzione per una "ricerca bidirezionale non orientata all'obiettivo" che utilizza tabelle di ricerca.

altre librerie di routing libero?

Vorrei suggerire il mio progetto Java GraphHopper;)

ma ci sono naturalmente più: http://wiki.openstreetmap.org/wiki/Routing