我想在谷歌地图视图上的我的位置显示一个箭头,显示我相对于目的地位置(而不是北方)的方向。
a) 我使用磁力计和加速度计的传感器值计算了北方。我知道这是正确的,因为它与 Google 地图视图中使用的指南针对齐。
b) 我已经使用 myLocation.bearingTo(destLocation) 计算了从我的位置到目的地位置的初始方位;
我错过了最后一步;根据这两个值(a 和 b),我使用什么公式来获取手机相对于目标位置的指向方向?
感谢对头脑混乱的任何帮助!
原文由 Damian 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,我想通了。对于其他尝试这样做的人,您需要:
a) 航向:您从硬件罗盘获得的航向。这是在 磁 北以东度数
b) 方位:从您所在位置到目的地位置的方位。这是 真 北以东的度数。
c) 偏角:真北和磁北之间的差异
从磁力计 + 加速度计返回的航向以真(磁)北(-180 到 +180)以东的度数为单位,因此您需要了解您所在位置的北和磁北之间的差异。这种差异是可变的,具体取决于您在地球上的位置。您可以使用 GeomagneticField 类获取。
有了这些,您就可以计算出要在地图上绘制的箭头的角度,以显示您所面对的相对于目标对象的位置,而不是真正的北方。
首先用偏角调整航向:
其次,您需要将手机面向(航向)的方向从目标目的地而不是真正的北方偏移。这是我卡住的部分。从罗盘返回的航向值为您提供了一个值,该值描述了与手机指向的位置相关的磁北位置(以真北以东的度数)。例如,如果该值为 -10,您就知道磁北在您的左侧 10 度。方位以真北以东的度数为您提供目的地的角度。因此,在补偿偏角后,您可以使用下面的公式来获得所需的结果:
然后,您需要将真北以东的度数(-180 到 +180)转换为正常度数(0 到 360):