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 - 如何获得两个位置之间的方位度?的主要内容,如果未能解决你的问题,请参考以下文章