CLLocationManager dire je me suis déplacé 1200 + pieds quand je suis toujours assis dans ma chaise
-
25-09-2019 - |
Question
Je reçois des lectures étranges lors de l'utilisation CLLocationManager. Le Lat / long sont rapporté sur place, mais la distance parcourue est loin. J'ai mis la méthode suivante en tant que délégué si:
.h:
CLLocationManager *mLocationManager;
CLLocation *mStartDistance;
.m:
- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSLog(@"%g", newLocation.coordinate.latitude);
NSLog(@"%g", newLocation.coordinate.longitude);
NSLog(@"%g", newLocation.altitude);
NSLog(@"%g", newLocation.verticalAccuracy);
if (mStartDistance == nil)
{ mStartDistance = newLocation; }
CLLocationDistance dist = [newLocation getDistanceFrom:mStartDistance];
NSLog(@"%gm", dist);
}
Et quand je lance sur mon appareil que je reçois le texte suivant (lat / long masqué pour protéger le heh coupable):
] xx.xxxx
] -yy.yyyy
] 0
] -1
] 0m
] xx.xxxx
] -yy.yyyy
] 0
] -1
] 0m
] xx.xxxx
] -yy.yyyy
] 0
] -1
] 376.133m <-- wat?
Je ne comprends pas pourquoi le dire que je suis passé + 376m..that est comme + 1200ft!
La solution
Si vous aussi vous connectez votre newLocation.horizontalAccuracy
, vous verrez probablement que pour les deux premières mises à jour c'est sur 400 m. Il n'utilise pas GPS (vous êtes à l'intérieur et il vous donne -1 pour une précision verticale de l'altitude), et la triangulation de téléphone cellulaire peut être assez mauvais départ. Parfois, ma position de départ est seulement une précision de 10 miles, mais il met toujours en baisse sa meilleure estimation. Une fois qu'il obtient un meilleur verrouillage, ce point peut se déplacer assez loin assez vite.
Une partie de la rouerie à l'aide CoreLocation consiste à déterminer votre propre heuristique pour accepter ou rejeter une mise à jour. Certaines choses à considérer sont la précision horizontale, la mise à jour le temps passé, et le nombre de mises à jour précédentes que vous avez reçus. Je l'ai vu tout à fait quelques régimes ont été discutés sur ce site auparavant.