在已知两点坐标的情况,我们如果去计算两点的角度呢?
在计算角度之前,先了解下会用到的函数Math.atan2
Math.atan2()
概述
Math.atan2(
)
返回从原点(0,0)到(x,y)点的线段与x轴正方向之间的平面角度(弧度值),也就是Math.atan2(y,x)
语法
Math.atan2(y, x)
参数
y, x
数值
描述
atan2
方法返回一个 -pi 到 pi 之间的数值,表示点 (x, y) 对应的偏移角度。这是一个逆时针角度,以弧度为单位,正X轴和点 (x, y) 与原点连线 之间。注意此函数接受的参数:先传递 y 坐标,然后是 x 坐标。
atan2
接受单独的 x 和 y 参数,而 atan
接受两个参数的比值。
由于 atan2
是 Math
的静态方法,所以应该像这样使用:Math.atan2()
,而不是作为你创建的 Math
实例的方法。
还用到leaflet的转换方式latLngToContainerPoint把地理坐标转换成容器相应的像素坐标
/**
* 求两点坐标角度
* @param startLatlng 坐标
* @param endLatlng 坐标
* */
function getAngle(startLatlng, endLatlng){
// 转换容器的相应像素坐标
let start = map.latLngToContainerPoint(startLatlng),
end = map.latLngToContainerPoint(endLatlng)
let y = end.y - start.y,
x = end.x - start.x
var angle = Math.atan2(y, x) * ( 180 / Math.PI) + 90
return angle
}
其他计算方式:
var angle = 360*Math.atan(y/x)/(2*Math.PI);
这里得注意每个象限的不同情况了