Je développe une application qui calcule la distance parcourue par l'utilisateur. J'utilise la classe CLLocationManager pour le faire, mais j'obtiens les données mises en cache initialement et aussi la variable de distance augmente à un rythme soudain. S'il vous plaît aidez-moi ... J'ai utilisé le code suivant ....Corelocation distances incorrectes
Note: la distance est une variable statique. ici
- (void)viewDidLoad {
[super viewDidLoad];
//bestEffortAtLocation = nil;
oldLocat = [[CLLocation alloc]init];
newLocat = [[CLLocation alloc]init];
locationManager =[[CLLocationManager alloc]init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
// test that the horizontal accuracy does not indicate an invalid measurement
if (newLocation.horizontalAccuracy < 0) return;
NSLog(@"accuracy %d",newLocation.horizontalAccuracy);
// test the age of the location measurement to determine if the measurement is cached
// in most cases you will not want to rely on cached measurements
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
//NSLog(@"time %d",locationAge);
if (locationAge > 5.0) return;
self.oldLocat = oldLocation;
self.newLocat = newLocation;
double latDegrees = newLocation.coordinate.latitude;
NSString *lat = [NSString stringWithFormat:@"%1.5f°",latDegrees];
latLabel.text = lat;
double longDegrees = newLocation.coordinate.longitude;
NSString *longt = [NSString stringWithFormat:@"%1.5f°",longDegrees];
longLabel.text = longt;
[self computeDistanceFrom:oldLocat tO:newLocat];
}
-(void)computeDistanceFrom:(CLLocation *)oldL tO:(CLLocation *)newL
{
NSLog(@"oldd %@",oldL);
NSLog(@"new %@",newL);
distance = distance + [oldL getDistanceFrom:newL];
NSLog(@"distance %f",distance);
}
La console affiche les données suivantes .......
précision 0 oldd (null) < nouvelle 28,62114850, 77,37001021> +/- 80.00m (vitesse -1.00 mps/cours -1,00) @ 2010-06-22 19:21:59 0530 Distance 0,000000
précision 0 oldd < 28,62114850, +77.37001021> +/- 80.00m (vitesse -1.00 mps/cours -1.00) @ 2010-06-22 19:21:59 +0530 nouveau < 28,61670485, 77,37068155> +/- 80.00m (vitesse -1.00 mps/cours -1,00) @ 2010-06-22 19:22:00 0530 la distance 498,211345
précision 0 oldd < 28,61670485, +77.37068155> +/- 80.00m (vitesse -1.00 mps/cap -1.00) @ 2010-06-22 19:22:00 +0530 nouveau < +28.62112748, +77.36998540> +/- 80.00m (vitesse -1.00 mps/course -1.00) @ 2010-06-22 19:23:02 +0530 distance 994.432508
merci progrmr mais pouvez-vous me dire exactement comment supprimer les données mises en cache en utilisant les horodatages ........ et si l'approche ci-dessus pour calculer la distance est fausse alors comment dois-je procéder ...... est-il tout autre moyen de calculer la distance ..... coz j'ai vu de nombreuses applications dans l'App Store qui font le même travail comme le calcul de la distance, la vitesse etc.pls me donner vos suggestions précieuses. – Siddharth
J'ai ajouté un exemple de code pour montrer comment supprimer les anciennes données en cache, mais vous le faites déjà dans votre code. – progrmr