gpt4 book ai didi

android - 在Android中计算指南针方位/航向

转载 作者:IT王子 更新时间:2023-10-28 23:41:08 25 4
gpt4 key购买 nike

我想在谷歌地图 View 上的我的位置显示一个箭头,显示我相对于目标位置的方向(而不是北方)。

a) 我使用磁力计和加速度计的传感器值计算了北。我知道这是正确的,因为它与 Google map View 中使用的指南针对齐。

b) 我使用 myLocation.bearingTo(destLocation); 计算了从我所在位置到目标位置的初始方位;

我错过了最后一步;从这两个值(a 和 b)中,我使用什么公式来获取手机相对于目标位置指向的方向?

感谢任何对头脑困惑的帮助!

最佳答案

好的,我想通了。对于其他尝试这样做的人,您需要:

a) 航向:您在硬件罗盘上的航向。这是

以东的度数

b) 方位:从您所在位置到目的地位置的方位。这是北以东的度数。

myLocation.bearingTo(destLocation);

c) 偏角:真北和磁北的区别

从磁力计 + 加速度计返回的航向位于真(磁)北(-180 到 +180)以东的度数,因此您需要获取您所在位置的北和磁北之间的差异。这种差异是可变的,具体取决于您在地球上的位置。可以通过 GeomagneticField 类获取。

GeomagneticField geoField;

private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
geoField = new GeomagneticField(
Double.valueOf(location.getLatitude()).floatValue(),
Double.valueOf(location.getLongitude()).floatValue(),
Double.valueOf(location.getAltitude()).floatValue(),
System.currentTimeMillis()
);
...
}
}

有了这些,您可以计算在 map 上绘制的箭头的角度,以显示您相对于目标对象所面对的位置,而不是真正的北方。

首先根据偏角调整航向:

heading += geoField.getDeclination();

其次,您需要将手机面向(前进)的方向从目标目的地偏移,而不是真正的北方。这是我卡住的部分。指南针返回的航向值为您提供了一个值,该值描述了与手机指向的位置相关的磁北位置(以真北以东的度数)。所以例如如果值为 -10,则您知道磁北在您的左侧 10 度。方位角以正北以东的度数为您提供目的地的角度。因此,在您补偿了偏角之后,您可以使用以下公式来获得所需的结果:

heading = myBearing - (myBearing + heading); 

然后,您需要将正北以东的度数(-180 到 +180)转换为正常度数(0 到 360):

Math.round(-heading / 360 + 180)

关于android - 在Android中计算指南针方位/航向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com