2009-02-24 11 views
6

Eksperymentuję z dodaniem funkcji GPS do mojej aplikacji na iPhone'a. Jest to aplikacja treningowa, która będzie używana podczas chodzenia lub biegania. Więc to, co chcę używać GPS, to pokazać prędkość, którą porusza się człowiek w Mph i minutę/milę.iPhone CoreLocation: jak uzyskać najdokładniejszą prędkość?

Jak skonfigurować menedżera CLLocationManager, aby uzyskać najlepsze możliwe wyniki? Co powinienem ustawić requireAccuracy i distanceFilter?

Próbowałem z:

distanceFilter = 10 i desiredAccuracy = kCLLocationAccuracyNearestTenMeters

i czytanie

nieruchomości CLLocation.speed

Testowanie podczas jazdy w moim samochodzie dokładność wydaje dobry w porównaniu do prędkościomierza samochodu, chociaż aktualizacja trwa trochę dłużej. Zdaję sobie sprawę, że opóźnienie aktualizacji może być bardzo czasochłonne, aby zapytać o lokalizację GPS, ale nie jestem pewien, czy zmiana powyższych dwóch parametrów dałaby lepsze wyniki.

Czy należy używać kCLLocationAccuracyBest i inne wartości dla distanceFilter?

Jestem zainteresowany, aby usłyszeć od innych za pomocą CoreLocation, aby uzyskać prędkość. Co robisz, aby uzyskać dokładniejsze wyniki?

Odpowiedz

3

Nota prawna: Grałem tylko z CoreLocation, nie testowałem dokładności bardzo dokładnie.

Spodziewałbym się, że uzyskasz najdokładniejsze wyniki, używając wartości domyślnych dla distanceFilter i desiredAccuracy. Mniej częste aktualizacje zapewnią tylko mniej danych do pracy.

Jednym z problemów, na które napotkasz, jest sytuacja, w której utrata lokalizacji zostanie chwilowo utracona, a następnie wróci. Naiwne podejście typu connect-the-dots do określania przejechanej odległości ma tendencję do zaniżania rzeczywistej prędkości biegacza. Zamiast używać CLLocation.speed, możesz uzyskać lepsze wyniki obliczające prędkość w oparciu o heurystyczne przybliżenie linii, którą faktycznie podąża biegacz.

5

Aby uzyskać najlepsze wyniki, należy użyć kCLLocationAccuracyBest. To, co umieścisz w filtrze dystansowym, zależy od tego, z jakimi wadami jesteś w stanie się zetknąć. Zasadniczo będziesz musiał podejmować decyzje w oparciu o dokładność vs dostępność. Oznacza to, że w okresach, w których odpowiedź o największej dokładności nie jest dostępna, co wyświetlisz?

Jednym podejściem jest umożliwienie telefonowi udzielania mniej dokładnych odpowiedzi, a przy użyciu projekcji tego, co się działo, gdy ostatnio uzyskałeś informacje o najlepszej dokładności, sprawdź, czy masz sens.

Oznacza to, że biegam z prędkością 6 mil na godzinę na północ. Spisujesz mnie wzdłuż punktu A, punktu B, punktu C ... otrzymujesz odpowiedź o małej dokładności (może kCLLocationAccuracyNearest100Meters). Spójrz na miejsce, w którym jest napisane, że jestem i znajdź "czy mogłem dojść do tego punkt od punktu C, jeśli kontynuowałbym moją obecną ścieżkę, dokonując rozsądnych korekt dla możliwych zmian prędkości? " Jeśli tak, to nowy punkt znajduje się w zakresie możliwości. (Jeśli nie, wyrzuć to.) Następnie wykonaj rzut z punktu C na moją ostatnią znaną prędkość i wymyśl, gdzie myślisz, że prawdopodobnie jestem, balistycznie. Uratuj to jako punkt balistyczny D.

Oczywiście używasz akcelerometru, aby uzyskać jakiś zmysł bezwładności, w jaki sposób poszedłem, prawda?Nie możesz więc znać kierunku (nie wiesz, w jaki sposób wskazuje telefon), ale możesz zrobić rozsądne dźgnięcie na odległość.

Wykorzystując wszystkie te informacje, zaplanuj najbardziej prawdopodobne miejsce, w którym według ciebie prawdopodobnie jestem.

UWAGA: Podczas testowania nie prowadź po prostu w obszarach o dobrym polu widzenia. Zobacz, jak Twoja aplikacja działa na wzgórzach, z dala od telefonów komórkowych. Wiele osób lubi jeździć na rowerze & pobiegać po tych obszarach!

Powiązane problemy