10

iOS 4.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];
}

デバイスやシミュレーターで作業していませんが、他の誰かがこの問題を経験していますか?

4

4 に答える 4

12

iOS 4.0の新機能であるを使用している場合startMonitoringSignificantLocationChanges、高度の更新は行われません。この低電力モードは、セルタワーを使用してユーザーの位置を把握するだけであり、この方法では高度は報告されません。

より一般的には、iPhoneには、セルタワー、Wi-Fi、GPSの3つの方法で現在地を把握できます。GPSが使用されている場合にのみ高度を取得します。したがってdesiredAccuracy、デバイスにGPSを使用させるように設定を非常に正確に設定した場合でも、ユーザーが屋内にいる場合、iPhoneはGPS信号を取得できず、セルまたはWi-Fiにフォールバックします。その場合、高度は取得できません。また、iPod Touchを使用しているユーザーについても検討してください。iPodTouchは、Wi-Fi経由で位置情報を取得する機能しかないため、高度を報告しません。

于 2012-01-27T03:30:44.960 に答える
2

あなたが試すことができる2つのこと。まず、ロケーションマネージャdesiredAccuracyをに設定してみてくださいkCLLocationAccuracyBest

それでも問題が解決しない場合は、を削除[manager stopUpdatingLocation];NSLogdidUpdateToLocation、高度を指定してください。高度を表示する前に、少し絞り込む必要がある場合があります。

于 2011-02-02T04:17:41.887 に答える
1

コアロケーションデータタイプリファレンスから:

CLLocationDistanceデータ型(高度のデータ型)はですdoublestringWithFormat使用しているフォーマッタはですintegerinteger最初に高度をにキャストするか、 double(%f)フォーマッターを使用する必要があります。

于 2011-02-02T03:31:27.887 に答える
0

コアロケーションは、常に高度をすぐに報告するとは限りません。私は通常、「成功」デリゲートメソッドで高度がゼロかどうかをチェックします。高度がまだ0の場合はチェックを続け、そうでない場合はCoreLocationをオフにします。

于 2011-05-31T13:32:10.527 に答える