Prędkość lokalizacji GPS Android niewiarygodne
Pisanie aplikacji rejestrującej GPS ~
Stwierdzam, że wartości zwracane metodą getSpeed()
na Locations
zgłoszone przez LocationManager
są masowo niewiarygodne. Używam LocationManager.GPS_PROVIDER
, filtruję lokalizacje dostarczone przez onLocationChanged
dla najlepszej dokładności. Nawet przy jednocyfrowych poziomach dokładności zwracana prędkość jest na ogół śmiesznie wysoka. Mówimy do 200 mp / h (tak Wiem, że jest zalogowany w metrach/s), gdy telefon stoi.
Testuję ten sam kod na dwóch różne modele telefonów z Androidem, z dwoma różnymi wersjami systemu operacyjnego i widząc te same problemy, więc spodziewam się, że jest to problem z kodem.
Co mi umyka? Próbowałem uśredniać lokalizacje przez okno czasu, bez skutku. Czy będę musiał wypracować własne wartości prędkości na podstawie przebytej odległości / czasu? To byłoby rozczarowujące.
Jak zobaczysz, nie robię nic specjalnego - trochę filtrowania dla dokładności, nawet po tym zarówno AverageSpeed
, jak i _bestLocation.getSpeed()
są regularnie niewykonalne wysoka, nawet gdy dokładność lokalizacji jest dobra.
public void onLocationChanged(Location location) {
if (location.getAccuracy() < 25f) {
_recentLocations.add(location);
if (_bestLocation == null || location.getAccuracy() <= _bestLocation.getAccuracy())
_bestLocation = location;
}
if ((_bestLocation != null && _bestLocation.getAccuracy() < 10f && _recentLocations.size() >= 10)
|| _recentLocations.size() >= 25)
{
int Count = 0;
float TotalSpeed = 0f;
float AverageSpeed = 0f;
for (int i = 0; i<_recentLocations.size(); i++) {
if (_recentLocations.get(i).hasSpeed()) {
Count++;
TotalSpeed += _recentLocations.get(i).getSpeed();
}
}
if (Count > 0)
AverageSpeed = TotalSpeed / Count;
}
}
4 answers
Pracuję nad sprzętem GPS od ponad 7 lat. Odczyt dokładności również nie jest w 100% dokładny. Producenci podają dokładność wraz z systemem używanym do jej pomiaru. CEP, RMS, 2DRMS i R95 to niektóre z systemów. Przeczytaj ten artykuł, aby uzyskać więcej informacji: http://en.wikipedia.org/wiki/Circular_error_probable
Liczba dokładności nie zawiera wartości odstających. Na przykład, jeśli podana dokładność metrów 5 to odczyty wykonane w dobrych warunkach sygnału będą miały maksymalny błąd 5 metrów, 95% czasu. Nic nie można powiedzieć o pozostałych odczytach 5% lub o odczytach wykonanych w złych warunkach sygnału. Ochrona przed tymi odstającymi jest specjalny sos, który sprawia, że dobra aplikacja oparta na lokalizacji wyróżnia się od reszty.
Niektóre rzeczy, które możesz zrobić to:
- odfiltrować szalenie wysokie prędkości. Wykorzystaj wysokość jako wskazówkę do bycia w samolocie.
- skoreluj informacje z czujników ruchu i sprawdź, czy zgadzają się z GPS. Ruch sygnatury czujników będą bardzo różne w stanie stacjonarnym i w ruchu.
- typowy rozmiar komórki GSM / 3G jest poniżej kilometra w mieście obszarów i 5-10 km na słabo zaludnionych obszarach. Jeśli pojazd porusza się z dużą prędkością przez jakiś czas, a Wieża komórkowa informacje są nadal takie same, wiesz, że coś jest nie tak.
- czy poprawka GPS odczytuje Północ w jednej chwili, a południe w następnej, że też z dużą prędkością? Jeśli tak, najprawdopodobniej jest to błąd GPS.
- sprawdź liczbę Satelity wykorzystywane w obliczeniach GPS. 12 jest wybitny, 9 jest zdrowy, 5 lub mniej jest biedny, 4 jest minimum dla lat , lon + wysokość obliczenia, 3 to minimum dla obliczeń lat,lon. Cokolwiek mniej niż 3 nie jest poprawnym odczytem. Możesz być znacznie bardziej pewny o ważności danych, jeśli liczba satelitów jest wysoka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 11:48:20
Urządzenia GPS to prędkościomierze pozycyjne, oparte na odległości odbiornika poruszył się od ostatniego pomiaru. Jego obliczenia prędkości nie są z zastrzeżeniem tych samych źródeł błędów co prędkościomierz pojazdu (rozmiar koła, przełożenia skrzyni biegów/napędu). Zamiast tego pozycjonowanie GPS dokładność, a zatem dokładność jej obliczonej prędkości, jest w zależności od jakości sygnału satelitarnego w tym czasie. Prędkość obliczenia będą dokładniejsze przy wyższych prędkościach, gdy stosunek z błąd pozycyjny do zmiany pozycyjnej jest niższy.
Z Wikipedii.
Prawdopodobnie powinieneś spróbować tego w miejscu, gdzie masz dobrą siłę sygnału.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-27 10:27:41
Mam ten sam problem. Myślę, że sygnał GPS zależy od lokalizacji, niektóre lokalizacja może dać dokładne wyjście lokalizacji inaczej "nie tak wiarygodne" wynik. W moim przypadku znajdowałem się około 200 metrów od mojej rzeczywistej lokalizacji. A Ty?
Aby dodać, GPS_PROVIDER nie działa tutaj w mojej okolicy. NETWORK_PROVIDER robi, i to ten, który daje wynik 200 metrów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-27 10:38:12
Wydaje się, że większość ludzi zakłada, że informacja o prędkości z GPS opiera się na porównaniu pozycji związanych z różnicą czasu. Metoda ta nie jest zbyt dobra do określania prędkości i jest gorsza przy niższych prędkościach jazdy.
Odbiorniki GPS mogą wyprowadzać pomiar prędkości na podstawie przesunięcia Dopplera z pomiarów sattelite. Dokładność pomiaru prędkości w oparciu o Dopplera jest znacznie lepsza w porównaniu z pomiarami prędkości w oparciu o obliczenia pozycji/czasu.
Google na gps speed doppler i znajdziesz wiele do czytania.
Jeden link jest tutaj: http://nujournal.net/HighAccuracySpeed.pdf
/Urban Holmdahl
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-12 16:44:59