Dostępne są biblioteki do obliczania najkrótszych ścieżek na takich wykresach. Jak oni to robią? Mówiąc dokładniej, w jaki sposób ładują wymaganą część wykresu, aby uruchomić algorytm Dijkstry?
Możesz użyć DB, niestandardowego formatu pliku do odczytu z płyty oraz ustawienia w pamięci.
Z mojego doświadczenia wynika, że korzystanie z bazy danych jest około 5 do 10 razy wolniejsze i wymaga dużo więcej pamięci niż pisanie własnego formatu pliku na podstawie „prostego” formatu listy linków.
Dobrą rzeczą jest to, że istnieje kilka platform programowych korzystających z OSM, które są open source, więc możesz zajrzeć bezpośrednio do kodu, np. Zobaczyć tutaj . W silniku routingu GraphHopper typu open source bardzo łatwo jest zmienić ustawienie mapowane w pamięci (oparte na dyskach) na ustawienie w pamięci - oba w tym samym formacie. Ustawienie „mmap” pozwala nawet na użycie urządzeń mobilnych z ograniczoną pamięcią, a ta ostatnia działa znacznie szybciej, jeśli masz niezbędną pamięć RAM, np. Na serwerze. Np. W przypadku wykresu ogólnoświatowego (> 100 milionów węzłów) potrzebujesz około 8-10 GB pamięci RAM, a także dużo więcej pamięci RAM, jeśli chcesz przyspieszyć wszystko, np. Dzięki Hierarchii Skurczów - około 5-8 GB więcej na każdy pojazd, który chcesz.
Format jest bardzo uproszczony i w zasadzie przechowuje tylko potrzebne dane z kilkoma sztuczkami, aby uczynić go kompaktowym. Przeczytaj więcej na ten temat tutaj . Oświadczenie: Jestem autorem GraphHopper.
W odniesieniu do innych odpowiedzi:
Algorytm Dijkstras, gdy ma zastosowanie, jest uważany za nieoptymalny dla tego problemu
„Normalna” Dijkstra może wykonywać bardzo rozsądne (<1s w przypadku zapytań ogólnokrajowych, takich jak przykład 3 mln węzłów) i jest optymalna w „sensie teoretycznym”, ale potrzebuje nieco dostrojenia, aby szybko uzyskać scenariusze produkcyjne. A techniki takie jak Hierachie skurczów wykorzystują dwukierunkową modyfikację i działają bardzo dobrze.
sieci drogowe są hierarchiczne i płaskie.
sieci drogowe są zhierarchizowane tylko dla samochodu i nie są płaskie (mosty, tunele, ...)