Mapować pasujące linki i pomysły? [Zamknięte]

44

Korzystam z OpenStreetMap i jego wektorowej sieci dróg i chciałbym zaimplementować algorytm dopasowywania map.

Obecnie jestem w stanie, dla każdej pozycji GPS, pobrać najbliższy odcinek drogi i obliczyć rzut tej pozycji na ten odcinek, jak na tym zdjęciu (czerwona pinezka to czysta pozycja GPS, na niebiesko segment mapowany, a na zielono zmapowana pozycja):

wprowadź opis zdjęcia tutaj

Jednak z powodu braku dokładności GPS czasami odwzorowana pozycja przeskakuje z segmentu na inny i może od czasu do czasu zapewniać niespójną pozycję mapowaną.

Mój obecny algorytm jest bardzo prosty: z czystej pozycji GPS uzyskuję najbliższy segment i decyduję, że mapowana dopasowana pozycja znajduje się na tym. Wiem, że można to naprawdę poprawić.

Mogę sobie wyobrazić, że wzięcie pod uwagę kierunku pojazdu poprawi dopasowanie mapy, ale czy znasz jakieś inne podejście, które pozwoliłoby mi ulepszyć dopasowywanie map?

Poszukuję linku i / lub oprogramowania typu open source?

Yonel
źródło
4
możesz dodać okrąg - Google używa odbioru komórkowego i tworzy jasnoniebieskie kółko, aby pokazać przybliżoną lokalizację. Twoja aplikacja wygląda dobrze, dobra robota. Jeśli masz dane wektorowe, możesz przyciągnąć do najbliższej linii z punktu GPS - patrz post: Paul Ramsey blog.cleverelephant.ca/2008/04/snapping-points-in-postgis.html
Mapperz
4
Szukanym słowem kluczowym jest Dopasowanie mapy. Wielki temat.
Uffe Kousgaard 18.04.13
1
Uffe ma rację, dopasowanie map. Sprawdź w tym dokumencie kilka podejść: cens.ucla.edu/~mhr/cs219/maps/white00.pdf
lexicore
Dzięki! leksykon, papier jest wysyłany do mojej drukarki podczas pisania tego. Czas uzyskać przegląd. Dziękuję za link.
scrrr 18.04.13
Poprawiłbym algorytm, również próbując przyciągnąć się do rzeczywistej drogi, a nie tylko wierzchołków.
Devdatta Tengshe 30.04.13

Odpowiedzi:

11

Rzutowanie punktów na linię, jak już robisz, jest możliwe bezpośrednio w PostGIS. O czym pisałem jakiś czas temu, tutaj

Ale aby rozwiązać problem, gdy punkty znajdują się bliżej niewłaściwego segmentu niż prawego segmentu, może to być możliwe podejście.

  1. Zbuduj linię punktów
  2. Wypróbuj sugerowane rozwiązania w Algorytmach dotyczące dopasowywania segmentów w celu dopasowania całej linii zamiast tylko punkt po punkcie
Nicklas Avén
źródło
Dziękuję za odpowiedź. Projekcja jest OK: już to robię (nie przez ST_Closest, ponieważ nie jest dostępny w trybie przestrzennym, którego używam, ale to jest OK). Właśnie patrzyłem na pytanie, które wspomniałeś, i dowiedziałem się o istnieniu tej „odległości Hausdorffa”, która może być interesująca.
yonel
10

Po przeczytaniu twojego pytania i różnych odpowiedzi zainteresowałem się tym problemem. Po przeczytaniu algorytmów dopasowywania mapy zrozumiałem, co następuje:

  • Aby dopasować lokalizację GPS do drogi, potrzebujesz rzeczywistych danych o drodze w formacie wektorowym
  • Pomoże to, jeśli masz różne ciężary dla różnych dróg. Zatem szanse na dopasowanie punktu do autostrady będą wyższe, niż przy dopasowaniu linii bocznej.
  • Musisz wziąć historię i szybkość odczytu GPS. Na przykład, jeśli punkt GPS od dłuższego czasu dopasowuje się do bocznego pasa, należy wziąć to pod uwagę i nie dopasowywać go bezpośrednio do autostrady. - Rzeczywiste dopasowanie odbywa się przy użyciu różnych technik statystycznych.

Do dalszej lektury proponuję:

Devdatta Tengshe
źródło
Tak, również czytałem i zacząłem grać z zastosowaniem prostego algorytmu, który mogę rozwinąć. Do tej pory pobrałem trochę danych z OSM i bawię się tym, jak najlepiej je przechowywać (i uzyskiwać do nich dostęp) do moich celów. Myślę, że to interesujący temat. :) Zaktualizuję to pytanie, gdy będę mieć coś, co działa. Dziękujemy również za linki!
scrrr 19.04.13
Byłbym ostrożny z użyciem ciężarów „Tak więc szanse na dopasowanie punktu do autostrady będą wyższe, niż przy dopasowaniu linii bocznej”. ... To zależy od danych wejściowych i może pójść bardzo źle.
podmrok
@Devdatta, dostaję 404 na drugi link. Zamiast mnie po prostu go edytować, czy masz alternatywny link?
Chau,
Nie mam linku do darmowego dostępu do tego artykułu. Ale jeśli jesteś w konfiguracji akademickiej. Artykuł powinien być dostępny po szybkim wyszukiwaniu
Devdatta Tengshe,
@Chau: Znalazłem plik PDF pod adresem: researchgate.net/profile/Alain_Kornhauser/publication/…
Devdatta Tengshe
7

Odpowiadając na moje własne pytanie!

1- Miły .pdf Właśnie znalazłem na ten temat:

http://safari.ce.sharif.edu/file/2011-06-06/259/2009_An%20off-line%20map-matching%20alameterm%20for%20incomplete%20map%20databases.pdf

który również prowadzi do implementacji mechanizmu dopasowywania map C ++ w otwartym kodzie źródłowym opisanego w dokumencie: http://eden.dei.uc.pt/~camara/files/mgemma.zip
(ten jest trybem dopasowywania map offline, rozumiem że oblicza dopasowane pozycje mapy ze ścieżką CAŁĄ jako dane wejściowe i nie może tego robić w locie dla każdej pozycji).

2 - Właśnie przeczytałem ten dogłębnie i moim zdaniem jest naprawdę dobry: https://dspace.lboro.ac.uk/dspace-jspui/bitstream/2134/4860/1/velaga.pdf „Rozwijanie ulepszony algorytm mapowania topologicznego opartego na wadze dla inteligentnych systemów transportowych ”
Algorytm jest jasno objaśniony, a wartości dostosowania ciężaru podano również w dokumencie.

Yonel
źródło
4

Dużo pracy nad dopasowywaniem map znajduje się w tym dokumencie, aby uzyskać krótką ankietę na temat dość niedawnych prac (sprzed 2007 r.). Niedawno podejścia oparte na ukrytych modelach Markowa wydają się działać całkiem dobrze w normalnych okolicznościach. Na przykład sprawdź ten artykuł z 2009 roku. Pomysł i model są dość proste i nie powinny sprawiać zbyt dużych problemów we wdrażaniu, nawet jeśli nie znasz HMM (w takim przypadku nie panikuj, jest ich mnóstwo z tutoriali i wprowadzeń online)

Nacięcie
źródło
1
Właśnie zdałem sobie sprawę, że projekt Barefoot, o którym wspomniałem w mojej odpowiedzi, oparty jest na dokumencie zalecanym przez @Nick.
nik
4

Metoda ta nazywana jest także „konflacją wektorów”. Istnieje dedykowana strona Wiki ( http://wiki.openstreetmap.org/wiki/Conflation ), która daje ogólny przegląd i zawiera listę pakietów oprogramowania (Open Source) do przeprowadzania łączenia wektorów dróg, takich jak „wtyczka JOSM”, łączenie „Potlatch 2” tool ”,„ RoadMatcher ”(dla OpenJUMP) i inne.

markusN
źródło
1
Zawsze myślałem, że połączenie to coś, co robisz z dwiema warstwami linii zamiast dopasowywania punktów do linii. Czy to naprawdę to samo?
podmroku
4

W przypadku algorytmów dopasowania mapy zależy, czy potrzebujesz przetwarzania w czasie rzeczywistym, czy offline. W drugim przypadku najnowocześniejsze algorytmy mogą przetwarzać ~ 1000 punktów na sekundę. Wymagania dotyczące pamięci zależą od zasięgu kursu. W tym celu udało nam się wycisnąć sieć drogową OSM planety na około 16 Gb.

Ponadto należy odróżnić dopasowanie mapy od wnioskowania o ścieżce : są to dwa osobne procesy, w zależności od tego, czy masz dane o wysokiej, czy niskiej częstotliwości. Gdy masz względnie niewiele punktów (np. 1 dane na kilometr w kontekście miejskim), następuje wnioskowanie o ścieżce, ponieważ zwykle można zgadywać, gdzie podróżuje urządzenie. Wnioskowanie ścieżki jest zwykle trudniejsze, ale staje się mniejszym problemem w przypadku nowoczesnych urządzeń / ceny akwizycji danych.

Możesz sprawdzić mój profil pod kątem interfejsu API, który wykonuje dopasowanie map bezpośrednio w OSM: używa dopasowania topologicznego i działa dobrze na przykład z pływającymi danymi samochodu.

Fabrice Marchal
źródło
Czy potrafisz rozwinąć algorytmy, których używasz? W jaki sposób pomaga zmniejszenie rozmiaru sieci drogowej?
Devdatta Tengshe,
Mniejszy zasięg = mniejsza sieć do utrzymania w pamięci. To trochę przyspiesza obliczenia. Odniesienia: trb.metapress.com/content/p31485vw72645686
Fabrice Marchal,
3

Slajd Strava opisuje, w jaki sposób skumulowane dane śladu w sieci drogowej mogą zachowywać się jak „doliny” i jak proponowana trasa „wpasuje się”, jakby to był ciąg paciorków.

heltonbiker
źródło
2

Po przetestowaniu większości wyżej wymienionych frameworków znalazłem Barefoota i naprawdę mogę go polecić. Wykorzystuje ukryte modele markowa jako probabilistyczne podejście do mapowania (szczegóły w artykule „Umieszczenie samochodu na mapie” ) i jest zaimplementowany w Javie. Jest to oprogramowanie typu open source i aktywnie rozwijane przez dział CarIT BMW.

nik
źródło
2

Temat nazywa się dopasowywaniem map. Ale jako pierwsze bardzo dobre przybliżenie, prawdopodobnie wystarczy po prostu wyszukać najbliższe punkty dla każdego punktu GPS (bez żadnych poprawnych poprawnych trafień).

Mój projekt Open Source o nazwie graphhopper nie jest czymś, co działa na iOS ( aktualizacja : teraz działa również na iOS), ani nie ma w pełni funkcjonalnej aplikacji na Androida do tego, czego chcesz. Ale możesz użyć wersji serwerowej, aby zbudować aplikację na iOS lub użyć demonstracji offline Androida na początek. Udostępniłem tutaj algorytm dopasowywania map , tylko szorstki prototyp, ale działa zaskakująco dobrze.

Karussell
źródło
1

Spróbuj zdobyć dobre dane testowe. Użyj dodatkowego GPS śledzenia o wyższej dokładności, oprócz rejestrowania punktów na urządzeniu docelowym. Pozwoli to zidentyfikować błędy w GPS i danych OSM. Znajomość rozsądnych progów znacznie ułatwi zaprojektowanie algorytmu.

Matthew Snape
źródło
1

Jeśli możesz uzyskać dane o drogach dla swojego regionu, być może zainteresuje Cię automatyczne przyciąganie zbiorcze za pomocą FOSS

W zależności od tego, czy chcesz drukować dane w czasie rzeczywistym, czy planujesz później wykonać przetwarzanie końcowe na komputerze, GRASS może ci pomóc.

Michał Zimmermann
źródło
1

Znalazłem interfejs API, który może po prostu wykonać zadanie bez konieczności natychmiastowego opracowania własnego rozwiązania.

Używają danych OSM do dopasowywania map. Mają także stronę demonstracyjną, która pozwala przesłać pliki GPX, aby zobaczyć, jak dobrze może to dla Ciebie działać.

Arthur McFlint
źródło