2010-11-06 8 views
3

Je commence à jouer avec le CLLocationManager et j'essaie d'utiliser la méthode de rappel ci-dessous. Je suis sorti dehors pour le tester sur mon iPhone, et avec les premières mises à jour, il semble que je reçois des valeurs de charabia, comme si tout à coup ma distance est de 39 mètres, même si je n'ai pas bougé. Ou parfois, il va commencer à 5, puis sauter à 20 mètres, encore une fois sans moi déplacer n'importe où. Je suis sorti et j'ai marché, et les mises à jour du point de départ initial m'ont semblé «ok», et quand je suis revenu, je suis revenu au point de départ de 39 mètres. Je me demandais si ce que je fais ci-dessous est correct. J'ai également inclus ma méthode viewDidLoad où j'initialise mon objet CLLocationManager.Obtenir un emplacement précis avec CLLocationManager

Y at-il un moyen de s'assurer que mes premières valeurs sont exactes? Merci d'avance.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
} 
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (startingPoint == nil) { 
     NSLog(@"NIL starting point"); 
     self.startingPoint = newLocation; 
    } 

    CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint]; 
    NSString *distanceString = [[NSString alloc] initWithFormat:@"%g m", distance]; 
    distanceLabel.text = distanceString; 
    [distanceString release]; 

    numberOfUpdates++; 
    NSString *countString = [[NSString alloc] initWithFormat:@"%d", numberOfUpdates]; 
    countLabel.text = countString; 
    [countString release]; 
} 

Répondre

5

Le GPS est une technologie imparfaite. Les conditions atmosphériques, la disponibilité (et la position) des satellites, la visibilité dans le ciel, les signaux qui rebondissent sur les objets proches (bâtiments) contribuent tous à son inexactitude inhérente. Bien qu'il y ait même une valeur de "précision" (qui est habituellement plutôt bien) - même ceci n'est pas complètement fiable.

Les avions ne sont pas autorisés à utiliser le GPS pour des approches de précision - même leurs récepteurs ne sont pas assez précis, et ils nécessitent d'autres technologies (qui ont leurs propres problèmes). Essayez l'application standard "Maps" et utilisez-la comme comparaison. Je pense que votre code est bon - c'est GPS Jut.

Bien sûr, je le dis parce que je travaille sur ma propre application de navigation maritime, et que je suis moi-même confronté à toutes ces questions.

2

Dans votre méthode didUpdate, vous pouvez tester la propriété .horizontalAccuracy de pour obtenir une valeur acceptable et rejeter toute valeur impossible (voire improbable!).

3

Bien que ce soit une vieille question que j'aime toujours répondre. Le premier appel à "didUpdateToLocation" est généralement une ancienne valeur et vous devriez toujours vérifier l'horodatage. À partir de la documentation Apple:

NSDate* eventDate = newLocation.timestamp; 
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 
if (abs(howRecent) < 15.0) 
{ 
    // use the value 
} 
Questions connexes