Altitude iOS CoreLocation
-
28-10-2019 - |
Question
Avant iOS 4.0, CoreLocation
rapportait correctement altitude, maintenant il signale toujours que 0 pi.
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation
{
NSString *tLatitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude];
NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude];
/* the following returns 0 */
NSString *tAltitude = [NSString stringWithFormat:@"%i", newLocation.altitude];
/* theres more code, but it's not relevant,
and this worked prior to iOS 4.0*/
[manager stopUpdatingLocation];
}
ne fonctionne pas sur l'appareil ni Simulator, personne ne l'expérience d'autre cette question?
La solution
Si vous utilisez startMonitoringSignificantLocationChanges
, qui était une nouvelle fonctionnalité à iOS 4.0, vous ne pourrez pas obtenir les mises à jour d'altitude. Ce mode de faible puissance utilise uniquement des tours cellulaires pour comprendre l'emplacement d'un utilisateur, et cette méthode ne rapport altitude.
De manière plus générale, l'iPhone a trois façons de déterminer votre position - tours cellulaires, wi-fi et GPS. Vous n'obtiendrez d'altitude lorsque vous utilisez le GPS. Donc, même si vous définissez votre desiredAccuracy
paramètre pour être vraiment précis pour forcer l'appareil à utiliser le GPS, si un utilisateur est à l'intérieur de l'iPhone ne sera probablement pas en mesure d'obtenir un signal GPS et vont passer en mode cellulaire ou wi-fi. Dans ce cas, vous ne serez pas d'altitude. Pensez également à des utilisateurs qui sont sur un iPod Touch -. Il a seulement la possibilité d'obtenir un emplacement via wi-fi, et donc ne rapportera pas d'altitude
Autres conseils
Deux choses que vous pourriez essayer. Tout d'abord, essayez de mettre la desiredAccuracy
du gestionnaire de localisation à kCLLocationAccuracyBest
.
Si cela ne fonctionne pas, essayez de supprimer [manager stopUpdatingLocation];
et mettre un NSLog
dans le didUpdateToLocation
avec l'altitude. Parfois, il doit restreindre un peu avant qu'il affiche l'altitude.
De la Core Location des types de données de référence :
Le type de données CLLocationDistance
(le type de données pour l'altitude) est un double
. Le formateur que vous utilisez pour votre stringWithFormat
est un integer
. Vous devez jeter votre altitude à un integer
, d'abord, ou utilisez un formatter double
(% en f).
Core Location ne signale pas toujours immédiatement altitude. Je vérifie habituellement pour une altitude zéro dans ma méthode de délégué « succès ». Si l'altitude est toujours 0, je continue à vérifier, sinon, je me tourne de CoreLocation.