2010-08-15 4 views
2

Je développe une application qui utilise le GPS. J'ai besoin d'une grande précision, donc j'ai utilisé kCLLocationAccuracyBestForNavigation pour l'attribut désiré. lorsque j'utilise l'application, la méthode follwing est appelée comme prévu.iPhone CoreLocation - la précision ne fonctionne pas correctement?

(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 

au sein de cette méthode je vérifie si la précision est assez bon avec le segment de code follwing:

if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) { 
... 
} 

mais si bloc ne devient jamais actif, car le newLocation.horizontalAccuracy ne va pas au-dessous 17.00 mètres. Quand je courais ce code sur iPhone 3GS OS 3.1.2 tout fonctionnait bien. mais depuis que j'ai mis à jour à 4.0.1, il semble qu'il y ait un problème avec la précision. Il ne fonctionne même pas avec kCLLocationAccuracyNearestTenMeters qui était également en cours d'exécution lisse et stable sur iOs 3.1.2.

avez-vous des conseils pour moi ce qui se passe et comment je peux résoudre mon problème?

Répondre

3

Le problème avec votre si le bloc est que vous comparez horizontalAccuracy, qui est indiqué en mètres, contre desiredAccuracy, qui est défini comme la valeur constante kCLLocationAccuracyBestForNavigation. Ces constantes ne sont pas définies dans la documentation, mais d'autres constantes sont simplement énumérées. Donc, kCLLocationAccuracyBestForNavigation peut être littéralement égal à 0. Votre horizontalAccuracy ne sera jamais inférieur ou égal à zéro.

Vous devez tester votre précision horizontale contre un nombre réel. La meilleure précision horizontale que j'ai obtenue est 5.0. Donc, vous voudrez peut-être changer votre instruction if à !(newLocation.horizontalAccuracy > 5.0).

1

Je dois corriger ma dernière Anser. kCLLocationAccuracyHundredMeters se résout en réalité à 100. Il en va de même pour le kilomètre (1000) et le troisrekilomètres (3000). Donc, vous pouvez utiliser ceux pour la comparaison. Cependant, kCLLocationAccuracyBest vaut -1 et BestForNavigation vaut -2. Donc, vous ne pouviez pas comparer votre horizontalAccuracy avec ceux-ci.