10

ユーザーの標高が提供されるロケーションサービスアプリがあります。ただし、CLLocationManagerによって提供される標高精度は非常に不正確であることがわかりました。同じ2つのスポットを2回テストすると、標高差が40フィートになることもあれば、100フィートになることもあります。CLLocationの垂直精度を向上させる方法はありますか、またはユーザーの標高を取得する別の方法(サードパーティライブラリ)はありますか?CLLocationManagerによって提供されるnewLocationのverticalAccuracyプロパティを確認し、それが十分でない場合は破棄しようとしましたが、「正確」であっても、実際には正確でないことがよくあります。御時間ありがとうございます!

現在、私は以下を使用しています:

if([newLocation verticalAccuracy] < 30) {
    if(isCustomary)
        altitudeLabel.text = [NSString stringWithFormat:@"%.2f feet", ([newLocation altitude] * 3.2808399)];
    else
        altitudeLabel.text = [NSString stringWithFormat:@"%.2f meters", [newLocation altitude]];
}

そのコードの問題:多くの場合、verticalAccuracyが30を下回ることはなく、30を下回ると、それでも十分に正確に近くなりません。私は家の中を歩き回るコードをテストしましたが(1階建て)、標高が最大19フィート変化すると書かれていますが、これは間違いです。

4

2 に答える 2

28

GPS衛星から得られる高度は、衛星の形状が原因で、GPSからの水平解よりも本質的に精度が低くなります。通常、垂直方向の精度は水平方向の精度の約1.5〜3倍悪いと予想されます。これはGPSの制限であり、計器進入にGPSを使用する前に航空がWAAS補正を必要とする理由です。

垂直精度が20または30メートルの場合、高度は最大100フィート離れていると予想する必要があります。非現実的に家の中を歩き回っても、19フィート変化しないことを期待しています。

あなたができることは、測定誤差を取り除くのを助けるために、最近の「良い」高度測定値のローリング加重平均(またはカルマンフィルター)を維持することです。

于 2011-11-29T03:36:28.547 に答える
2

どのコードを試しましたか?これは標高に最適なコードなので、これ以上のものはないと思います。

-(void)awakeFromNib {
  locmanager = [[CLLocationManager alloc] init];
  [locmanager setDelegate:self];
  [locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
  [locmanager startUpdatingLocation];
}

  - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
  heightMesurement.text = [NSString stringWithFormat: @"%.2f m",   newLocation.altitude];
}

  - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
  heightMesurement.text = @"0.00 m";
}
于 2011-11-29T03:23:48.770 に答える