2012-12-30 12 views
7

Ostatnio bawiłem się z biblioteką routingu OSRM. Wydaje się, że jest bardzo wydajny w rozwiązywaniu najkrótszych problemów związanych ze ścieżką. Jednak nie wiedziałem, jak obliczyć najkrótsze ścieżki pojedynczego źródła. Dokładniej, biorąc pod uwagę ustalony punkt początkowy, obliczyć najkrótsze odległości do wszystkich miejsc, które można osiągnąć w danym zakresie odległości (np. Osiągalny w ciągu 30 minut).Jak obliczyć najkrótsze ścieżki pojedynczego źródła za pomocą OSRM?

OSRM używa wewnętrznie hierarchii skurczów. Z mojego punktu widzenia ta technika jest znacznie lepsza od algorytmu Dijkstry, jeśli chodzi o obliczanie odległości między dwoma lokalizacjami w danych rzeczywistych. Jednak dla mojego problemu algorytm Dijkstry wydaje się lepiej pasować, prawda?

Czy OSRM udostępnia interfejs API do obliczania najkrótszych problemów ze źródłem na jednym źródle (z ograniczeniem odległości)? Czy istnieją inne darmowe biblioteki routingu, które lepiej pasują do tego typu problemów? Najlepiej jeden z dobrym wsparciem dla danych OpenStreetMap.

Odpowiedz

6

OSRM stosuje hierarchie skurczów (CH), aby być tak szybkie dla "trasowania jeden do jednego". Aby CH działał, potrzebujesz dostosowanego dwukierunkowego algorytmu (A *, Dijkstra, ...), więc przypadek pojedynczego źródła jest trudniejszy. ALE jeden do wielu algorytm jest względnie prosty, jeśli wiesz z góry, które miejsca docelowe chcesz.

Zapoznaj się także z artykułem "Fast Detour Computation for Ride Sharing" lub here, jeśli chcesz znaleźć rozwiązanie dla "wyszukiwania dwukierunkowego, bezkierunkowego", które używa tabel wyszukiwania.

inne bezpłatne biblioteki routingu?

Proponuję mojego projektu Java GraphHopper;)

ale istnieje oczywiście więcej: http://wiki.openstreetmap.org/wiki/Routing

Powiązane problemy