Salut Je développe sur un iPad Mini 1ère génération avec cellulaire et besoin d'utiliser son GPS interne pour acquérir lat/longues coordonnées. Je serai sur un bateau et j'appuierai sur un bouton qui enregistrera les coordonnées dans un fichier texte sur l'iPad (répertoire du document). Ensuite, je vais naviguer à 10 miles de distance et appuyez à nouveau sur le bouton qui ajoutera les nouvelles coordonnées au fichier texte. Je vais le faire 8 fois et devrait avoir 8 paires de coordonnées différentes. Cependant, l'application est très incohérente et garde les mêmes coordonnées ou n'en acquiert pas du tout. Pour rappel je n'utilise pas le wifi/cellulaire, seul le GPS interne (le GPS sur le bateau est capable d'acquérir du signal donc ce n'est pas un problème matériel). Mon code est ci-dessous. Merci d'avance!CoreLocation Mises à jour avec GPS
//in viewDidLoad
self.locman = [[CLLocationManager alloc] init];
self.locman.delegate = self;
self.locman.desiredAccuracy = kCLLocationAccuracyBest;
self.locman.distanceFilter = kCLDistanceFilterNone;
self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters;
// méthode délégué
#define REQ_ACC 10
#define REQ_TIME 10
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation* loc = locations.lastObject;
CLLocationAccuracy acc = loc.horizontalAccuracy;
NSDate* time = loc.timestamp;
CLLocationCoordinate2D coord = loc.coordinate;
if (!self.startTime) {
self.startTime = [NSDate date];
return; // ignore first attempt
}
NSLog(@"%f", acc);
NSTimeInterval elapsed = [time timeIntervalSinceDate:self.startTime];
if (elapsed > REQ_TIME) {
NSLog(@"%@", @"This is taking too long");
[self stopTrying];
return;
}
if (acc < 0 || acc > REQ_ACC) {
return; // wait for the next one
}
// got it
NSLog(@"You are at: %f %f", coord.latitude, coord.longitude);
self.lat = [NSString stringWithFormat:@"%.8f",coord.latitude];
self.longString = [NSString stringWithFormat:@"%.8f",coord.longitude];
[self stopTrying];
}
-(void) stopTrying {
[self.locman stopUpdatingLocation];
self.startTime = nil;
self.trying = NO;
}
// Ceci est un IBAction (un bouton presse lorsque l'utilisateur souhaite enregistrer les coordonnées)
[self.locman startUpdatingLocation];
Donc, gardez-vous les mises à jour de localisation en cours en arrière-plan? Commencez-vous des mises à jour quelques minutes avant de vouloir enregistrer l'état? – Wain
Non, les mises à jour démarrent immédiatement après la pression d'un UIButton et s'arrêtent après avoir atteint la méthode stopTrying. – user2402616
Donc, vous autorisez un maximum de 10 secondes pour verrouiller un emplacement - ne va pas être assez ... – Wain