为了账号安全,请及时绑定邮箱和手机立即绑定

在Android中计算罗盘方位/前往位置

在Android中计算罗盘方位/前往位置

12345678_0001 2019-08-15 16:19:48
在Android中计算罗盘方位/前往位置我想在谷歌地图视图上的我的位置显示一个箭头,显示我相对于目的地位置(而不是北方)的方向。a)我使用磁力计和加速度计的传感器值计算了北方。我知道这是正确的,因为它与谷歌地图视图中使用的指南针对齐。b)我使用myLocation.bearingTo(destLocation)计算了从我的位置到目的地位置的初始方位;我错过了最后一步; 从这两个值(a和b)我用什么公式来得出手机相对于目的地位置的方向?感谢任何有关心灵的帮助!
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

好的,我想出来了。对于其他试图这样做的人,你需要:

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()
      );
      ...
   }}

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

首先用赤纬调整你的标题:

heading += geoField.getDeclination();

其次,您需要从目标目的地而不是真北偏移手机朝向(航向)的方向。这是我被困住的部分。从罗盘返回的航向值为您提供一个值,该值描述磁北向(相对于手机指向的位置的真北的度数)。因此,例如,如果值为-10,则您知道磁北向左侧10度。轴承为您提供目的地的角度,以真北为东。因此,在您补偿了赤纬后,您可以使用下面的公式来获得所需的结果:

heading = myBearing - (myBearing + heading);

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

Math.round(-heading / 360 + 180)


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 715 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信