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

通过阅读文档,似乎有两种合理的方法可以做到这一点:

  • Sensor.TYPE_ORIENTATION方法:这是简单的方法。问题是它不准确。当我将我的读数与Snaptic Compass进行比较时,大约偏离10-15,这对我来说是 Not Acceptable 。
  • Sensor.TYPE_ACCELEROMETER,Sensor.TYPE_MAGNETIC_FIELD和getRotationMatrix()结合remapCoordinateSystem()和getOrientation()方法:文档说这“通常更准确”。问题是无论我向听众注册的延迟如何,即使设备固定在平坦的表面上,指南针也会发疯。

  • 解决该问题的任何建议将不胜感激。

    最佳答案

    看起来mob1lejunkie已经解决了这个问题,但仅供将来引用,我要提一提,这里的问题是magnetic declination(磁北与真北之间的差异)。您可以尝试an online model from NOAA来了解您所在地区的差异。

    Android包含一个称为GeomagneticField的模型,该模型可用于在给定纬度,经度和海拔高度的情况下计算近似磁偏角。因此,我认为您需要做的事才能计算出真正的北方,就是从Sensor.TYPE_ORIENTATION读取azimuth value,然后将其添加到GeomagneticField.getDeclination()中。

    关于android - 指南针精度困境,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2769484/

    10-13 00:41