2011-02-02 12 views
10

は、CoreLocationが正しく高度を報告したが、今では常に0フィートとして報告します。のiOS CoreLocation高度

-(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]; 
} 

デバイスやシミュレータ上で動作していない、他の誰がこの問題を経験していますか? Core Location Data Types Referenceから

+0

デバイスまたはシミュレータでこれをテストしていますか? –

+0

デバイスとシミュレータ。 – WrightsCS

答えて

11

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

さらに一般的に、iPhoneには、セルタワー、Wi-Fi、GPSの3つの場所がわかります。 GPSを使用しているときにのみ標高を得ることができます。あなたのdesiredAccuracyの設定を本当に正確に設定して、GPSを使用するように強制すると、ユーザーが屋内にいればiPhoneはGPS信号を受信できなくなり、セルやWi-Fiにフォールバックします。その場合、高度は得られません。また、iPod Touchを使用しているユーザーも考慮してください。Wi-Fi経由でロケーションを取得する機能しかないため、高度を報告することもありません。

1

CLLocationDistance

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

+0

高度を整数に変換しています。私が述べたように、これはiOS 4.0より前には完全に機能しました(つまり、コードは変更されません)。 – WrightsCS

+0

また、私はそれを持っている/私/完璧な標高、例えば5280フィート – WrightsCS

+0

@ WrightsCSを表示するために使用されているあなたは違いがあるかどうかを確認するために示唆されたダブルフォーマッタを試してみましたか? – raidfive

1

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

これで解決しない場合は、[manager stopUpdatingLocation];を削除し、NSLogを高度でdidUpdateToLocationに配置してみてください。場合によっては、高度を表示する前に少し絞り込む必要があります。

+0

kCLLocationAccuracyBestは常に設定されており、stopUpdatingLocationを削除しても効果はありません。 – WrightsCS

0

コアの位置が常に高度を報告するとは限りません。私は通常、成功のデリゲートメソッドでゼロ高度をチェックします。標高がまだ0の場合、私はチェックを続け、そうでなければCoreLocationを回します。

関連する問題