废话不多说,开整
// 参数为寄件人经纬度和收件人经纬度
// 根据寄收件人经纬度弧度π进行rotate旋转计算
const getRotate = (po1, po2) => {
if (!(po1 && po2)) return 0
const lng_a = po1.longitude
const lat_a = po1.latitude
const lng_b = po2.longitude
const lat_b = po2.latitude
const a = ((90 - lat_b) * Math.PI) / 180
const b = ((90 - lat_a) * Math.PI) / 180
const AOC_BOC = ((lng_b - lng_a) * Math.PI) / 180
const cosc = Math.cos(a) * Math.cos(b) + Math.sin(a) * Math.sin(b) * Math.cos(AOC_BOC)
const sinc = Math.sqrt(1 - cosc * cosc)
const sinA = (Math.sin(a) * Math.sin(AOC_BOC)) / sinc
const A = (Math.asin(sinA) * 180) / Math.PI
let rotate = 0
if (lng_b > lng_a && lat_b > lat_a) rotate = A
else if (lng_b > lng_a && lat_b < lat_a) rotate = 180 - A
else if (lng_b < lng_a && lat_b < lat_a) rotate = 180 - A
else if (lng_b < lng_a && lat_b > lat_a) rotate = 360 + A
else if (lng_b > lng_a && lat_b == lat_a) rotate = 90
else if (lng_b < lng_a && lat_b == lat_a) rotate = 270
else if (lng_b == lng_a && lat_b > lat_a) rotate = 0
else if (lng_b == lng_a && lat_b < lat_a) rotate = 180
if (rotate > 360) {
rotate = rotate - 360
}
return rotate
}