如何计算手机当前经纬度与目标经纬度之间的指向夹角?
实现基于经纬度的方位角计算函数getAngle
直接用经纬度计算方位角完全可行,不需要转DMS格式。下面是成熟的实现方案,核心用球面三角学公式计算从当前位置到目标位置的地理方位角(正北为0度,顺时针递增,范围0-360°):
function getAngle(lat1, lng1, lat2, lng2) { // 把角度转换为弧度(JS三角函数默认用弧度) const radLat1 = Math.PI * lat1 / 180; const radLng1 = Math.PI * lng1 / 180; const radLat2 = Math.PI * lat2 / 180; const radLng2 = Math.PI * lng2 / 180; // 计算经度差 const deltaLng = radLng2 - radLng1; // 球面方位角计算核心分量 const y = Math.sin(deltaLng) * Math.cos(radLat2); const x = Math.cos(radLat1) * Math.sin(radLat2) - Math.sin(radLat1) * Math.cos(radLat2) * Math.cos(deltaLng); // 计算弧度并转换为角度,调整到0-360°的范围 let angle = Math.atan2(y, x) * 180 / Math.PI; angle = (angle + 360) % 360; return angle; }
关键说明:
- 所有经纬度直接用原始十进制数值即可,无需转换DMS,转换反而会损失精度
- 输出的角度规则:0°=正北,90°=正东,180°=正南,270°=正西,符合常规的方位认知
atan2(y, x)返回的是-180°到180°的角度,通过(angle + 360) % 360调整为0-360°的正角度范围
测试示例:
比如当前位置是纽约(40.7128, -74.0060),目标是洛杉矶(34.0522, -118.2437),调用getAngle(40.7128, -74.0060, 34.0522, -118.2437)会返回约259°,对应西南方向,符合实际地理方位。
内容的提问来源于stack exchange,提问作者Jordy
相关产品推荐
相关产品推荐

