Jump to content

Witaj!

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

Photo
- - - - -

CLLocationManager, dokładność metody startMonitoringForRegion


  • Please log in to reply
5 replies to this topic

#1 nightwish86

nightwish86
  • 146 posts
  • SkądOlsztyn, PL

Posted 17 July 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 posts
  • SkądWarszawa

Posted 17 July 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 posts
  • SkądOlsztyn, PL

Posted 17 July 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_*

Posted 19 July 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

  • 1846 posts
  • SkądSzczecin, PL

Posted 20 July 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 posts
  • SkądOlsztyn, PL

Posted 20 July 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.




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users