android - 如何获得两个位置之间的方位度?

Posted

技术标签:

【中文标题】android - 如何获得两个位置之间的方位度?【英文标题】:android - how can I get the bearing degree between two locations? 【发布时间】:2014-01-30 09:42:32 【问题描述】:

正如标题所说,我有当前位置,并且想知道从我当前位置到其他位置的方位角。我已阅读this post,location.getBearing() 返回的值是我的答案吗?

简单说一下:从图片上看,我预计值是45度。

【问题讨论】:

该方法的文档告诉您什么?这个问题是不可能回答的,因为你没有说为什么你认为这个getBearing()不是正确的方法。 使用浮动轴承 = myLocation.bearingTo(otherLocation); 【参考方案1】:

位置有方法bearingTo: floatbearingTo(Location dest)

Location from = new Location(LocationManager.GPS_PROVIDER);
Location to = new Location(LocationManager.GPS_PROVIDER);
from.setLatitude(0);
from.setLongitude(0);
to.setLongitude(10);
to.setLatitude(10);

float bearingTo = from.bearingTo(to);

【讨论】:

此方法在同一位置和具有 180 度方位角的位置上给我 90 度偏移【参考方案2】:

我在执行此操作时遇到了麻烦,并设法解决了转换 C 的问题?轴承度数的计算方法。

我用 4 个坐标点算出这个

起始纬度

起始经度

结束纬度

结束经度

代码如下:

    protected double bearing(double startLat, double startLng, double endLat, double endLng)
    double latitude1 = Math.toRadians(startLat);
    double latitude2 = Math.toRadians(endLat);
    double longDiff= Math.toRadians(endLng - startLng);
    double y= Math.sin(longDiff)*Math.cos(latitude2);
    double x=Math.cos(latitude1)*Math.sin(latitude2)-Math.sin(latitude1)*Math.cos(latitude2)*Math.cos(longDiff);

    return (Math.toDegrees(Math.atan2(y, x))+360)%360;

只需更改需要的变量名称。

TextView 的输出方位

希望对您有所帮助!

【讨论】:

我尝试过同样的方法,但我得到了 90 度的偏移,我为开始和结束提供了相同的位置,这应该给我 0 度,我也尝试了 180 度的位置,但结果相同 【参考方案3】:

这里是计算两点(startPoint, endPoint)之间方位角的代码:

public float CalculateBearingAngle(double startLatitude,double startLongitude, double endLatitude, double endLongitude)
    double Phi1 = Math.toRadians(startLatitude);
    double Phi2 = Math.toRadians(endLatitude);
    double DeltaLambda = Math.toRadians(endLongitude - startLongitude);

    double Theta = atan2((sin(DeltaLambda)*cos(Phi2)) , (cos(Phi1)*sin(Phi2) - sin(Phi1)*cos(Phi2)*cos(DeltaLambda)));
    return (float)Math.toDegrees(Theta);

调用函数:

float angle = CalculateBearingAngle(startLatitude, startLongitude, endLatitude, endLongitude);

【讨论】:

以上是关于android - 如何获得两个位置之间的方位度?的主要内容,如果未能解决你的问题,请参考以下文章

计算两个位置之间的方位角

计算两个 CLLocationCoordinate2D 位置之间的偏移量

计算两个位置(纬度、经度)之间的方位角

如何通过地图API获得任意两个地点的距离

找到两个轴承之间的角度

计算两个 GPS 坐标之间的罗盘方位问题