iOS corelocation高度
-
28-10-2019 - |
質問
iOS4.0の前に CoreLocation
高度を正しく報告していましたが、今では常に0フィートとして報告されています。
-(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];
}
デバイスやシミュレータで作業していないのですが、他の誰かがこの問題を経験していますか?
解決
使用している場合 startMonitoringSignificantLocationChanges
, 、iOS 4.0を新しい機能であるため、高度の更新は取得されません。この低電力モードは、セルタワーのみを使用してユーザーの位置を把握し、この方法は高度を報告しません。
より一般的には、iPhoneにはあなたの場所を把握する3つの方法があります - セルタワー、Wi-Fi、およびGPS。 GPSが使用されている場合にのみ高度が得られます。だからあなたがあなたを設定したとしても desiredAccuracy
ユーザーが屋内である場合、iPhoneがGPS信号を取得できず、セルまたはWi-Fiにフォールバックすることはおそらくない場合、デバイスにGPSを使用するように非常に正確に設定します。その場合、高度は得られません。また、iPod Touchを使用しているユーザーを考慮してください。Wi-Fi経由で場所を取得する機能があるため、高度も報告しません。
他のヒント
試してみることができる2つのこと。まず第一に、ロケーションマネージャーを設定してみてください desiredAccuracy
に kCLLocationAccuracyBest
.
それがうまくいかない場合は、削除してみてください [manager stopUpdatingLocation];
, 、およびput a NSLog
の中に didUpdateToLocation
高度で。時々、高度を表示する前に少し絞り込む必要があります。
から コアロケーションデータ型参照:
CLLocationDistance
データ型(高度のデータ型)は double
. 。あなたがあなたのために使用しているフォーマッタ stringWithFormat
です integer
. 。あなたはあなたの高度をanに投げ込む必要があります integer
, 、最初に、または使用します double
(%f)フォーマッタ。
コアの場所は、常にすぐに高度を報告するとは限りません。私は通常、「成功」デリゲート方法で高度ゼロをチェックします。高度がまだ0の場合、チェックし続けます。そうしないと、cor脱体を回します。