2012-04-12 6 views
1

iPhoneが高精度で指し示す方向を知りたいのですが、私はCLLocationManagerを試しました:問題はCLHeading.magneticHeadingが例えば36.44323のようなdoubleを返しますが、デバイスの回転を開始するとCLLocationManagerは方向1度であるので、数字は36.44323、37.44323、38.44323のようになります。より正確にすることは可能ですか?iOSコンパスの見出しの度合い精度を取得することは可能ですか?

+0

あなたは 'kCLLocationAccuracyBestForNavigation'に' CLLocationManager'に 'desiredAccuracy'を設定することがありますか?これはジャイロなどの磁力計以上のものを利用します。多分、これはあなたのより良い精度を得るでしょうか? – larsacus

+0

はい、テスト結果は同じですが、私はこれらも幸運ではなかった:1 - headingFilterを1未満に設定し、またそれをkCLHeadingFilterNoneに設定する、2 - CLLocationManagerデータを更新と3 - didUpdateHeadingメソッドの終了時にstopUpdatingHeadingを呼び出し、別のスレッドを使用して再度オンにしますが、結果が安定するまでに時間がかかるため、結果は信頼できません。 – sadegh

答えて

1

私が知っているわけではありません。

正確さと正確さを混同しないでください。ちょうどそれが36.44323と言っているのは、小数点以下5桁まで正確であるとは限りません。その値の誤差範囲は±1度かもしれません:(

iPhoneのコンパスは、

+2

私は数の正確さに気にしないで、むしろ私はデバイスの方向に非常に小さな変化に興味がある、結果の数が整数ではなく倍である必要があります – sadegh

1

正確さは気にしないが、方向の小さな変化に興味があるなら、CMMotionManagerを見たいかもしれません。デバイスのattitude(特にyaw)を取得できるプロパティ(deviceMotion)を使用してください。&磁気見出しの間に差異(例:x)を記録することによって各見出しの更新では、更新の間のおおよその見出しをyaw + xとすることができます。あなたはdeviceMotionUpdateIntervalを自分で設定できるので、CMMotionManagerからタイムリーなアップデートを受け取ります。

私はあなたが磁気見出しを返しますCLLocationManagerとしてxを計算する際度に戻って変換する必要がありますので、正しくyaw値は-piとpiまでのラジアンで返された覚えている場合は、度(360から0)です。

あなたはおそらく同様にデバイスの向きの調整を行うことになるでしょう。コンパスはデバイスの上部から見出しデータを返します。したがって、あなたがlandscapeLeftにいる場合は、見出し値に90 °を引く必要があります。landscapeRight見出し値に90 °を追加する必要があり、portraitUpsideDownには180 ° 。

0

精度が必要な場合は、ジャイロを使用する必要があります。 CoreMotionのデバイスモーションデータが役立ちます。コンパスは本当に正確ではありません。

4

セットCLLocationManagerheadingFilterkCLHeadingFilterNoneまたはデフォルトの1度未満のもの。

+0

これは精度を向上させませんより頻繁に更新されます –

関連する問題