2012-12-30 18 views
7

Ich habe kürzlich mit der OSRM Routing-Bibliothek gespielt. Es scheint sehr effizient zu sein, das Problem des kürzesten Pfades zu lösen. Ich habe jedoch nicht gesehen, wie man die kürzesten Pfade einzelner Quellen damit berechnen kann. Genauer gesagt, bei einem festen Startpunkt, Berechnen der kürzesten Entfernungen zu allen Orten, die innerhalb einer gegebenen Entfernungsgrenze erreicht werden können (z. B. erreichbar innerhalb von 30 Minuten).Wie berechnet man kürzeste Pfade aus einer Quelle mit OSRM?

OSRM verwendet intern Kontraktionshierarchien. Aus meiner Sicht ist diese Technik dem Dijkstra-Algorithmus weit überlegen, wenn es darum geht, die Entfernung zwischen zwei Orten in realen Daten zu berechnen. Für mein Problem scheint Dijkstras Algorithmus besser zu passen, oder?

Bietet OSRM eine API zur Berechnung von Problemen mit der kürzesten Wegstrecke der einzelnen Quelle (mit einer Begrenzung der Entfernung)? Gibt es andere kostenlose Routing-Bibliotheken, die für diese Art von Problem besser geeignet sind? Vorzugsweise eine mit guter Unterstützung für OpenStreetMap-Daten.

Antwort

6

OSRM verwendet Kontraktionshierarchien (CH) so schnell für "eins zu eins Routing". Um CH zum Laufen zu bringen, benötigen Sie einen angepassten bidirektionalen Algorithmus (A *, Dijkstra, ...), so dass der Single-Source-Fall schwieriger ist. Aber ein Eins-zu-Viele-Algorithmus ist relativ einfach, wenn Sie wissen, welche Ziele Sie bevorzugen.

Schauen Sie auch in das Papier "Fast Detour Computation for Ride Sharing" oder here, wenn Sie eine Lösung für eine "nicht zielgerichtete, bidirektionale Suche" wollen, die Nachschlagetabellen verwendet.

andere kostenlose Routing-Bibliotheken?

Ich würde mein Java GraphHopper Projekt vorschlagen;)

aber es gibt natürlich mehr: http://wiki.openstreetmap.org/wiki/Routing

Verwandte Themen