目前,我在谷歌地图上有两个点(LatLng)A和B. 我提出了我的问题,如下图所示:
在垂直轴上旋转设备时,我希望在A点和B点之间获得角度@
我想得到AB和北轴之间的角度(y轴) 我该怎么办 我创建了一个函数来获取角度,但它返回null:(
public double getAngleTwoPoint(LatLng point1,LatLng point2){
double lat1=point1.latitude;
double lat2=point2.latitude;
double long1=point1.longitude;
double long2=point2.longitude;
double deltaLong=long2-long1;
double angle = Math.atan2(Math.sin(deltaLong)*Math.cos(lat2), Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(deltaLong));
return Math.toDegrees(angle);
}
答案 0 :(得分:4)
你可以使用这个公式来获得lat长度之间的角度。
θ= atan2(sin(Δlong)* cos(lat2),cos(lat1)* sin(lat2) - sin(lat1)* cos(lat2)* cos(Δlong))
请注意,在使用此公式和Δlong= long2 - long1之前,应将角度(θ)转换为弧度。
atan2是几乎所有编程语言中常见的函数(主要在Math包中)。通常还有在度和弧度之间进行转换的函数(也在Math包中)。
请记住,atan2返回-π... +π范围内的值,要将结果转换为罗盘方位,需要将θ乘以180 /π然后使用(θ+ 360)%360,其中%是模数除法运算返回除法的其余部分。
以下链接是涉及纬度和经度的公式的良好资源。他们还提供其公式的Javascript实现。实际上答案是基于此页面的信息:
答案 1 :(得分:0)
如果你有三角形
CB
A
然后AB和y轴之间的角度等于CAB角。 tg(CAB)= BC / AC,你需要角度,所以实际上你所要求的是arctg(BC / AC)。