2

gpsを使用するアプリを開発しています。高精度が必要なので、desiredAccuracy に kCLLocationAccuracyBestForNavigation を使用しました。アプリを実行しているとき、次のメソッドが期待どおりに呼び出されます。

(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

このメソッド内で、次のコード セグメントで精度が十分かどうかを確認しています。

if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
...
}

しかし、newLocation.horizo​​ntalAccuracy が 17.00 メートルを下回らないため、この if ブロックがアクティブになることはありません。iPhone 3GS OS 3.1.2 でこのコードを実行していたとき、すべて正常に動作していました。しかし、4.0.1にアップグレードして以来、精度に問題があるようです。iOS 3.1.2 でもスムーズで安定して動作していた kCLLocationAccuracyNearestTenMeters でも機能しません。

何が起こっているのか、どうすれば問題を解決できるのか、何かヒントはありますか?

4

2 に答える 2

3

horizontalAccuracyif ブロックの問題は、メートル単位で報告desiredAccuracyされる と、定数値として設定される を比較していることですkCLLocationAccuracyBestForNavigation。これらの定数はドキュメントでは定義されていませんが、他の定数は列挙されているだけです。したがって、kCLLocationAccuracyBestForNavigation は文字通り 0 に等しい場合があります。 horizo​​ntalAccuracy がゼロ以下になることはありません。

実際の数値に対して水平精度をテストする必要があります。私が得た最高の水平精度は 5.0 です。そのため、if ステートメントを に変更することをお勧めします!(newLocation.horizontalAccuracy > 5.0)

于 2010-11-15T15:06:59.890 に答える
1

最後のアンサーを修正する必要があります。kCLLocationAccuracyHundredMeters は実際には 100 に解決されます。キロメートル (1000) と threkilometers (3000) についても同じことが言えます。したがって、それらを比較に使用できます。ただし、kCLLocationAccuracyBest は -1 で、BestForNavigation は -2 です。したがって、あなたの horizo​​ntalAccuracy をそれらと比較することはできませんでした。

于 2010-11-16T16:04:02.773 に答える