Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

CLLocationManager, dokładność metody startMonitoringForRegion


  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 nightwish86

nightwish86
  • 146 postów
  • SkądOlsztyn, PL

Napisano 17 lipca 2012 - 10:29

Witajcie,

Mam duży problem z dokładnością metody startMonitoringForRegion. Dokumentacja Apple wyraźnie wskazuje, że funkcja przyjmuje poniższe parametry:
- (void)startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy
Jednakże, jakąkolwiek wartość nie przypiszę do parametru desiredAccuracy monitorowany punkt wyzwala się zawsze w pobliżu ~100 metrów. Potrzebuję dokładności ok. 10 metrów (korzystając z GPS). Krótki przykład kodu:
-(void) queuePoint: (CLLocationCoordinate2D)pointLocation radius: (CLLocationDistance)radius identifier:(NSString*)identifier clear:(BOOL)clear {
    CLRegion *pointRegion = [[CLRegion alloc] initCircularRegionWithCenter:pointLocation radius:radius identifier:identifier];
    CLLocationAccuracy acc = kCLLocationAccuracyBest;
    if (clear){
        [self.locationManager stopMonitoringForRegion:pointRegion];
    } else {
        [locationManager startMonitoringForRegion:pointRegion desiredAccuracy:acc];
    }
    [CLLocationManager regionMonitoringEnabled];
}
Próby przypisania do zmiennych acc oraz radius wartości "10.0" niestety nie działają, punkt zawsze wyzwala się w odległości 100 metrów. Czy ktoś spotkał się z podobnym problemem? Czy jest to do rozwiązania za pomocą monitorowania regionów dostępnego w iOS czy muszę napisać własną metodę?

Dziękuję za wszelką pomoc, pozdrawiam.

#2 P_P

P_P
  • 131 postów
  • SkądWarszawa

Napisano 17 lipca 2012 - 10:39

Są takie możliwości: extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; extern const CLLocationAccuracy kCLLocationAccuracyBest; extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; extern const CLLocationAccuracy kCLLocationAccuracyKilometer; extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;

#3 nightwish86

nightwish86
  • 146 postów
  • SkądOlsztyn, PL

Napisano 17 lipca 2012 - 10:47

Tak naprawdę CLLocationAccuracy to wartość 'float', można ją ustawić ręcznie (aplikacja "Regions" w dokumentacji Apple to pokazuje). Próbowałem oczywiście ustawiać wartości 'acc' i 'radius' na powyższe stałe, efekt jest cały czas ten sam, punkt wyzwala się z odległości 100 metrów i nie mniej.

#4 Gość_oneghost_*

Gość_oneghost_*

Napisano 19 lipca 2012 - 22:58

Nie wiem czy dobrze zrozumialem "wyzwala sie". Chodzi o to, ze po wlaczeniu aplikacji masz dokladnosc ok 100m? Jesli tak, to jest to normalne, lepsza dokladnosc otrzymasz dopiero po jakims czasie w metodzie locationManager:didUpdateToLocation:; w delegate locationManagera

#5 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 20 lipca 2012 - 05:32

nie wiem skąd pobierasz dane, ale zawsze możesz zebrać dane swoich POI i użyć metody distanceFromLocation i punkty, które są niedaleko wyświetlać na mapie, a te dalej usuwać. Zwraca odległość w metrach od twojego położenia. Ja robiłem tak testową aplikację i działało. Nawet do 5-ciu metrów.

#6 nightwish86

nightwish86
  • 146 postów
  • SkądOlsztyn, PL

Napisano 20 lipca 2012 - 09:15

Nie wiem czy dobrze zrozumialem "wyzwala sie". Chodzi o to, ze po wlaczeniu aplikacji masz dokladnosc ok 100m? Jesli tak, to jest to normalne, lepsza dokladnosc otrzymasz dopiero po jakims czasie w metodzie locationManager:didUpdateToLocation:; w delegate locationManagera


Dokładniej "wyzwala się" -> uruchamiana jest metoda didEnterRegion z CLLocationManager.

Dla wyjaśnienia, Region Monitoring jest skopany w iOS i nie pozwala na monitorowanie obszarów w zasięgu mniej niż 200 metrów. Jeśli chcemy mieć większą dokładność należy napisać własną klasę, która korzysta z distanceFromLocation (jak podał @tmkszlc). Jest wtedy trochę zabawy z eventami wejścia/wyjścia w punkt jednak dokładność jaką możemy uzyskać to nawet +-5 metrów.




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych