Android - Wyliczanie wiarygodnego przebytego dystansu

Android - Wyliczanie wiarygodnego przebytego dystansu
R3
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:32
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

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
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ść


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
R3
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:32
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.

wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

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

R3
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:32
0

Jest to pomiar podczas stania na przystanku tramwajowym.

wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
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

edytowany 1x, ostatnio: wojciechmaciejewski
NO
Chyba sprawdzanie w innym miejscu jest średnią drogą do rozwiązania problemu.
wojciechmaciejewski
no nie wiem czy testowanie gps-a pod dachem jest drogą do rozwiązania problemu z gps-em
NO
Z tego co rozumiem moduł gps działa dobrze. Jest to stary telefon, więc i technologia trochę starsza więc "sprzętowo" zakłócenia mogą nie być eliminowane. I problem polegał właśnie na tym eliminowaniu a nie na samym działaniu sprzętu.
wojciechmaciejewski
gps z założenia nie działa pod dachem ;-)
R3
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:32
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 :(

edytowany 1x, ostatnio: rafal383
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
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

edytowany 1x, ostatnio: wojciechmaciejewski
R3
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:32
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ę :)

wojciechmaciejewski
a korzystasz z FusionProvidera ? ustaw że zależy Ci na dokładności, olej baterię.
R3
w LocationRequescie mam ustawione mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
NO
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 2 lata
  • Postów:430
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.

R3
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:32
0

W LocationRequescie jest funckja

Kopiuj
setSmallestDisplacement(float smallestDisplacementMeters)

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.