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?


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

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ę:


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,


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.


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)


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.


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.


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.


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.


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.


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.




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.