2013-06-16 4 views
0

J'utilise le CoreLocation Framework et je suis curieux de savoir combien de fois il met à jour, c'est vraiment inexact et je suis en train de débattre en appelant la méthode d'un NSTimer pour augmenter sa fréquence d'utilisation. Mon code est ci-dessousQuelle est la fréquence de mise à jour coreLocation

dans viewDidLoad

//location update 
CLController = [[CoreLocationController alloc] init]; 
CLController.delegate = self; 
[CLController.locMgr startUpdatingLocation]; 

mes méthodes vides

- (void)locationUpdate:(CLLocation *)location { 

    int speedInt = [location speed]*2.23693629; 
    if(speedInt < 0){ 
     speedInt = 0; 
    } 
    speedLabel.text = [NSString stringWithFormat:@"%d", speedInt]; 
} 

- (void)locationError:(NSError *)error { 
    speedLabel.text = [error description]; 
} 

Répondre

5

La fréquence des mises à jour est déterminée par une combinaison de desiredAccuracy et distanceFilter (et, évidemment, combien l'utilisateur est en train de déplacer). Un distanceFilter de kCLDistanceFilterNone et desiredAccuracy de kCLLocationAccuracyBest ou kCLLocationAccuracyBestForNavigation vous obtiendrez le plus de mises à jour (mais vider votre batterie le plus rapide).

L'utilisation d'un NSTimer n'obtient pas une plus grande précision. S'appuyer sur CLLocationManager pour mettre à jour avec la fréquence désirée, avec une certaine sensibilité à un équilibre raisonnable entre les exigences de l'application et le désir de l'utilisateur de ne pas vider sa batterie inutilement.

Voir la section Starting the Standard Location Service du Guide de programmation Awareness . Voir également la section Tips for Conserving Battery Power dans ce guide.

+0

Petit ajout: le «meilleur pour la navigation» est actuellement mis à jour une fois par seconde. Ce n'est pas souvent suffisant pour mon application de navigation - je prévois d'essayer d'utiliser l'accéléromètre pour évaluer l'emplacement entre les mises à jour de l'emplacement de base. –

2

Vous pouvez attribuer la propriété desiredAccuracy de CLLocationManager à kCLLocationAccuracyBest:

- (void) viewDidLoad 
{ 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate= self; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [self.locationManager startUpdatingLocation]; 
} 

l'espoir que cela vous aide.

0

Suivez votre sens de code, que vous pouvez ajouter ceci:

CLController.locMgr.desiredAccuracy = kCLLocationAccuracyBest; 
CLController.locMgr.distanceFilter = 10.0f; //To set updating distance up with x meter when you leaved the scope. 
[CLController.locMgr startUpdatingLocation]; 

L'espoir peut vous aider.

Questions connexes