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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top