Mapa Routing, a la Google Maps?

głosy
19

Zawsze byłem zaintrygowany Mapa Routing, ale nigdy nie znaleźć jakieś dobre wprowadzenie (lub nawet zaawansowanych!) Poziom tutoriale na nim. Czy ktoś ma żadnych wskazówek, podpowiedzi, itp?

Aktualizacja: Jestem przede wszystkim szuka wskazówek, w jaki sposób system map jest realizowany (struktury danych, algorytmy, etc).

Utwórz 05/08/2008 o 21:24
źródło użytkownik
W innych językach...                            


9 odpowiedzi

głosy
14

Spójrz na otwartej ulicy projektu mapy , aby zobaczyć, jak coś takiego jest rozwiązane w naprawdę wolnym oprogramowaniem projektu używając tylko użytkownik dostarczane i licencjonowane dane i mieć wiki zawierającą rzeczy można znaleźć ciekawe .

Kilka lat temu człowiek zaangażowany gdzie dość łatwy w prowadzeniu i odpowiedział na wiele pytań miałem więc nie widzę powodu, dlaczego nadal nie są miłe grono.

Odpowiedział 05/08/2008 o 21:27
źródło użytkownik

głosy
2

Zamiast uczyć API do każdego usługodawcy map (jak GMaps, Ymaps API) dobrze jest nauczyć Mapstraction

„Mapstraction to biblioteka, która zapewnia wspólne API dla różnych interfejsów API JavaScript mapowania”

Proponuję udać się do adresu URL i dowiedzieć się ogólny API. Istnieje spora ilość jak korzystać też.

Odpowiedział 06/08/2008 o 14:35
źródło użytkownik

głosy
4

Przez Mapa Routing, masz na myśli znalezienie najkrótszej drogi wzdłuż sieci ulicznej?

Algorytm najkrótszej ścieżki Dijkstra jest najbardziej znany. Wikipedia nie ma złą Intro: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

Jest programik tutaj, gdzie można zobaczyć go w akcji: http://www.dgp.toronto.edu/people/JamesStewart/270/9798s/Laffra/DijkstraApplet.html i Google prowadzić do kodu źródłowego w niemal każdym język.

Wszelkie realne wdrożenie do generowania tras przejazdu będzie zawierać sporo danych dotyczących sieci ulicznej, która opisuje stowarzyszonej Koszty z przechodzących powiązań i hierarchii sieci węzły drogach, średniej prędkości, pierwszeństwa na skrzyżowaniu, łączenie sygnałów ruchu, zakazanych zakrętów itp

Odpowiedział 15/08/2008 o 05:31
źródło użytkownik

głosy
2

Mam jeszcze znaleźć dobre wprowadzenie do routingu, ale istnieje wiele kod do odczytu:

Istnieją aplikacje GPL routingu, które używają danych OpenStreetMap, np Gosmore który działa na Windows (+ komórkowego) oraz Linux. Istnieje wiele ciekawych [zastosowań wykorzystujących te same dane, ale Gosmore ma jakieś fajne używa np interfejs ze stron internetowych .

Największym problemem z routingiem jest złe dane, a ty nigdy się tyle dobrych danych. Więc jeśli chcesz spróbować zachować test bardzo lokalny, dzięki czemu można lepiej kontrolować dane.

Odpowiedział 17/09/2008 o 09:34
źródło użytkownik

głosy
4

Barry Brumitt, jeden z inżynierów Google maps funkcji rozpoznawczej trasa, wypowiedział się na ten temat, które mogą być interesujące:

Droga do lepszej ścieżki rozpoznawczej 11/06/2007 03:47:00 PM

Odpowiedział 17/09/2008 o 09:44
źródło użytkownik

głosy
4

A * jest rzeczywiście znacznie bliżej algorytmów mapowania produkcji. To wymaga trochę mniej eksploracji porównaniu do oryginalnego algorytmu Dijikstra użytkownika.

Odpowiedział 25/09/2008 o 00:19
źródło użytkownik

głosy
2

Z koncepcyjnego punktu widzenia, wyobrazić spada kamień do stawu i obserwując fale. Trasy stanowiłoby staw, a kamień swoją pozycję wyjściową.

Oczywiście algorytm musi sprawdzić pewną proporcję n ^ 2 ścieżki, jak odległość n wzrasta. Można by zabrać cię pozycji wyjściowej i sprawdzić wszystkie dostępne drogi od tego miejsca. Następnie rekurencyjnie zadzwonić do punktów na koniec tych ścieżek i tak dalej.

Można zwiększyć wydajność, a nie przez dwukrotne podkładzie na ścieżce, by nie ponowne sprawdzenie trasy w momencie, gdy został on już objęte i dając się na ścieżkach, które trwa zbyt długo.

Alternatywnym sposobem jest użycie ant podejście feromonów, gdzie mrówki indeksowania losowo od punktu startowego i zostawić ślad zapachowy, który buduje kolejne mrówki przejechać daną ścieżkę. Jeśli wysyłasz (dość) mrówki zarówno z punktu początkowego i punktami końcowymi następnie ostatecznie ścieżka z najsilniejszym zapachu będzie najkrótszy. To dlatego, że najkrótsza droga zostaną odwiedził kilka razy w danym okresie czasu, biorąc pod uwagę, że mrówki chodzić w jednolitym tempie.

EDIT @ Spikie

Jako dalsze wyjaśnienia sposobu realizacji algorytmu Pond - potencjalnych struktur danych potrzebne są podświetlone:

Musisz zapisać mapę jako sieć. Jest to po prostu zestaw nodesi edgespomiędzy nimi. Zestaw nodesstanowić route. Krawędź łączy dwa węzły (prawdopodobnie obie tej samej stacji Node), i ma związany costtakich jak distancelub timeprzechodzenie krawędzi. Krawędź może albo być albo dwukierunkowa lub jednokierunkowa. Prawdopodobnie najprostszym tylko mieć te jednokierunkowych i podwoi się do dwukierunkowej podróży między węzłami (czyli jednej krawędzi od A do B, a inną dla B do A).

Tytułem przykładu wyobrazić trzy stacje kolejowe ułożone w trójkąt równoboczny skierowaną do góry. Są też kolejne trzy stacje każdy w połowie drogi między nimi. Krawędzie połączenia wszystkich sąsiednich stacji razem końcowy schemat będzie odwróconego trójkąta siedzącego wewnątrz większej trójkąta.

Węzły etykiet począwszy od dolnej lewej idąc od lewej do prawej, a, a A, B, C, D, E, F (F u góry).

Przyjmuje się, że krawędzie mogą wykonywać ruch w obu kierunkach. Każda krawędź ma koszt 1 km.

Ok, więc chcemy trasie z lewej dolnej A do górnej stacji F. Istnieje wiele możliwych tras, w tym tych, które zawrócić na siebie, np ABCEBDEF.

Mamy rutynowych powiedzmy NextNode, że akceptuje nodei A costi wywołuje się dla każdego węzła może podróżować do.

Najwyraźniej jeśli pozwolimy tym rutynowej bieg będzie ostatecznie odkryć wszystkie trasy, w tym te, które są potencjalnie nieskończonej długości (np ABABABAB etc). Możemy temu zapobiec poprzez sprawdzenie przeciwko cost. Podczas każdej wizyty węzeł, który nie został wcześniej odwiedzanej, kładziemy zarówno koszty i węzeł pochodzimy od tego węzła. Jeśli węzeł został odwiedził przed sprawdzamy przed istniejącym kosztów i jeśli jesteśmy tańsze potem zaktualizować węzeł i kontynuować (recursing). Jeśli jesteśmy bardziej kosztowne, to pomiń ten węzeł. Jeśli wszystkie węzły są pomijane potem wyjść z rutyny.

Jeśli trafiliśmy nasz węzeł docelowy potem wyjść z rutyny też.

W ten sposób wszystkie żywotne trasy są zaznaczone, ale co najważniejsze tylko tych o najniższych kosztach. Pod koniec procesu każdy węzeł będzie miał najniższe koszty dla dostania się do tego węzła, w tym naszego węzła docelowego.

Aby uzyskać trasę pracujemy wstecz od naszego węzła docelowego. Ponieważ przechowywane węzeł pochodzimy wraz z kosztem, po prostu wskoczyć do tyłu budując trasę. W naszym przykładzie chcemy skończyć z czymś takim:

Węzeł A - (całkowita) Wartość 0 - od węzła Brak
Node B - koszt 1 - od węzła A
węzła C, - koszt 2 - węzła B
węzeł D - Koszty 1 - od węzła A
węzła E - Koszty 2 - od węzła D / koszt 2 - z węzła B (to jest wyjątek gdyż wynosi koszt),
węzeł C - koszt 2 - od węzła D

Więc najkrótsza trasa jest ADF.

Odpowiedział 26/09/2008 o 15:05
źródło użytkownik

głosy
1

Inna myśl przychodzi mi do głowy odnośnie kosztu każdego przechodzenie, ale zwiększyłoby czas i moc obliczeniową potrzebną do obliczenia.

Przykład: 3 sposoby można pobrać (zamieszkania) na przejazd od punktu A do punktu B, w zależności od GoogleMaps. Urządzenia Garmin oferuje każdy z tych 3 ścieżek w Quickestobliczeniu trasy. Po przejściu każdej z tych dróg wiele razy i uśrednianie (oczywiście nie będzie błędów w zależności od pory dnia, ilość kofeiny itp), czuję algorytmy mogła wziąć pod uwagę liczbę zakrętów na drodze do wysokiego poziomu dokładności , np prosta droga od 1 milę będzie szybciej niż drogi 1 mili z ostrymi zakrętami w nim . Nie jest to praktyczne sugestia, ale na pewno jeden używam do poprawy zestaw wyników mojego codzienne dojazdy.

Odpowiedział 18/09/2011 o 22:34
źródło użytkownik

głosy
1

Z mojego doświadczenia w pracy w tej dziedzinie, A * spełnia swoje zadanie bardzo dobrze. Jest to (jak wspomniano powyżej) szybciej niż Algorytm Dijkstry, ale nadal jest dość proste dla programisty zwykle właściwego wdrożenia i zrozumienia.

Budowanie sieci tras jest najtrudniejsze, ale które mogą być podzielone na serię prostych krokach: uzyskać wszystkie drogi; sortowania punktów do porządku; stworzyć grupę identycznych miejscach na różnych drogach na skrzyżowaniach (węzłów); dodać łuki w obu kierunkach, gdzie węzły łączące (lub tylko w jednym kierunku na jednokierunkowej ulicy).

A * Sam algorytm jest dobrze udokumentowane na Wikipedii . Kluczowym miejscem optymalizacji jest wybór najlepszego węzła z otwartym liście, do którego trzeba o wysokiej wydajności priorytetu kolejki. Jeśli używasz C ++ można użyć zasilacza STL priority_queue.

Dostosowywanie algorytm do trasy na różnych częściach sieci (np pieszych, samochód, transport publiczny, itd.) Z prędkością przysługę oddali lub innych kryteriów jest dość prosta. To zrobić pisząc filtry do kontroli, które są dostępne odcinki trasy, podczas budowy sieci, a która waga jest przypisany do każdego z nich.

Odpowiedział 15/07/2012 o 22:13
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more