指南针准确性困境

时间:2010-05-04 22:51:06

标签: android compass-geolocation digital-compass

我需要为我的应用程序构建指南针。

通过阅读文档,似乎有两种合理的方法:

  • Sensor.TYPE_ORIENTATION方法:这是一种简单的方法。这个问题是它不准确。当我将我的阅读与Snaptic Compass进行比较时,它大约是10-15度,这对于我的目的来说是不可接受的。
  • Sensor.TYPE_ACCELEROMETER,Sensor.TYPE_MAGNETIC_FIELD和getRotationMatrix()以及remapCoordinateSystem()和getOrientation()方法:文档说这“通常更准确”。问题是无论我向听众注册的延迟如何,即使设备在平坦表面上静止,指南针也会发疯。

非常感谢任何解决此问题的建议。

2 个答案:

答案 0 :(得分:8)

看起来mob1lejunkie已经解决了这个问题,但仅供将来参考,让我提一下这里的问题是magnetic declination(磁北和真北的区别)。您可以尝试an online model from NOAA来了解您所在地区域的差异。

Android包含一个名为GeomagneticField的模型,可用于计算给定纬度,经度和海拔高度的近似偏差。所以,我认为你需要做的是计算真北,从Sensor.TYPE_ORIENTATION读出azimuth value,然后添加到那个GeomagneticField.getDeclination()。

答案 1 :(得分:1)

这是为手机制造的紧凑型零件的缺点。我们现在使用的5000美元IMU的误差为+/- 2度,在这个范围内它似乎也很疯狂。

尝试远离干扰,金属表面,看看它是否有所改善。如果没有,我讨厌打破坏消息,但这就是硬件。

你见过这些吗?

http://developer.android.com/reference/android/hardware/SensorManager.html

http://groups.google.com/group/android-developers/browse_thread/thread/bbb0e8b97c673cf9/5c16bc2e49f6e972?lnk=raot