Android - Wyliczanie wiarygodnego przebytego dystansu

0

Witam. Jestem w trakcie tworzenia aplikacji która gromadzi dane o naszej lokalizacji w tle zapisując odczytane punkty z GPS w ArrayList po czym na podstawie tych punktów wylicza przebyty dystans, wszystko później jest wyświetlane na mapie w aktywności. Moim problemem jest to, ze stojąc w miejscu nabijają mi się kilometry przez "skakanie aktualnej pozycji po mapie" (efekty widać na załączonym screenie), z czym nie potrafię sobie poradzić i chciałbym zasięgnąć waszej porady. Podobna aplikacja - Endomondo, w jakiś sposób selekcjonuje punkty i mimo tego skakania stojąc w miejscu pokazuje przebyty dystans równy 0.

user image

0

Zaznaczam, że nigdy takiego problemu nie miałem i nie wiem na ile to będzie działać.

Masz coś takiego jak dokładność https://developer.android.com/reference/android/location/Location.html#getAccuracy%28%29 i odrzucać zmiany, które są mniejsze niż dokładność

0

Chodzi o to, że nawet jak dokładność jest na poziomie 10-15m to pozycja przemieszcza sie z niezmienną dokładnościa i efekt wychodzi jak na screenie. Nie jest to nowy telefon i obecnie nowsze telefony są wyposażone w lepsze odbiorniki GPS, które pewnie nie dopuszczają do takich błędów.

0

A czy nie robiłeś tego przypadkiem w przejściu podziemnym albo budynku ?

0

Jest to pomiar podczas stania na przystanku tramwajowym.

1

No i masz swoją odpowiedź. Stoisz tam pod wiaduktem gdzie złapać satelity raczej ciężkawo, dodatkowo jeżeli chcesz ściągnąć lokacje z innych czujników ( po wifi etc) masz bardzo dużo zakłócaczy ( szczególnie tramwaj).

Albo ustaw lokacje tylko na gps, albo spróbuj potestować w bardziej sprzyjającym miejscu. Bo najbardziej ruchliwe skrzyżowanie w Warszawie pod wiaduktem raczej nie jest strzałem w dziesiątke :P

0

Chodzi o to, że aplikacja ma działać również w takich miejscach jak przystanki tramwajowe (wiaduktu tam nie było :P). W endomondo tego problemu nie ma, bo mimo błędnych odczytów aplikacja nie głupieje i wskazuje dystans poprawnie. Staram się dążyć właśnie do takiego rozwiązania. Znalazłem również algorytm Douglas-Peucker, który pozwala zminimalizować nabijanie kilometrów podczas podróży przy odczytach "zygzakowatych", ale to nadal nie rozwiązuje problemu ze screena :(

0

po 1. tam jest wiadukt ( dokładnie 2)

po 2. Odczyt będziesz miał tak dobry jak mogą być jego wskazania

Jeżeli chcesz dokładne wskazania a nie to co zwracają Ci czujniki proponuję się zainteresować tym
https://developer.android.com/training/location/index.html

idę o zakład że nie przebijesz inżynierów googla :P

Edit:

Swoją drogą kiedyś zrobiłem test tego co google udostępnia w API a co samo robi. Jest tak brzydko że zazwyczaj wskazania czujników połączone z Location API różnią się od tego co wskazuje pozycja na mapie. zazwyczaj to co pokazują na mapie jest lepsze :P. Czy się da to przeskoczyć to nie wiem.

Kiedyś dosyć długo walczyłem generalnie z nawigacją indoor, jest to bardzo złożone zagadnienie i nie da się tego tak prosto opisać co trzeba zrobić żeby było dobrze

0

idę o zakład że nie przebijesz inżynierów googla :P

Jeżeli bym uważał inaczej, to pewnie nie pisałbym na forum o pomoc :P

Co do API to właśnie z niego korzystam w swojej aplikacji. Pokombinuje coś jeszcze, jak na coś wpadnę to się odezwę :)

0

A jakby zmniejszyć dokładność + uśredniać lub całkowicie usuwać część wyników? Chodzi mi o sytuację w której ustawiasz dokładność powiedźmy 5 metrów. następnie jeśli user stoi to punkty będą w obrębie tych 5 metrów. I jeżeli kolejne punkty są w granicach tych 5 metrów to po prostu je usunąć. Jeśli natomiast punkt jest > 5 metrów od ostatniego punktu to dodać go jako kolejny realny punkt i na ich podstawie (tych punktów) generować przebyty dystans. Dodatkowo (nie wiem jak z wydajnością) można by się pokusić o korzystanie z google maps zakładając że raczej po obszarze budynków się nie chodzi. Byłby tylko problem z ustaleniem kiedy user rzeczywiście do budynku wejdzie.

0

W LocationRequescie jest funckja

setSmallestDisplacement(float smallestDisplacementMeters)

. Pokombinuje coś i zobaczę co z tego wyjdzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1