You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从已知经纬度点出发按指定方位角移动一定距离后计算新坐标

经纬度方位角位移计算解决方案

原代码核心错误

  • JS内置Math.cos()、Math.sin()方法仅支持弧度单位输入,直接传入45度的角度值会得到错误的三角函数计算结果
  • 经纬度是球面坐标,不能直接套用平面直角坐标系的位移公式,地表位移的公里数不能直接叠加到经纬度角度值上,计算需要引入地球平均半径参数
  • 同一经度差对应的地表距离会随纬度升高而缩短,不能直接用统一系数换算

正确实现(基于球面大圆航位推算公式)

采用地球平均半径6371km参与计算,完整JS代码如下:

// 配置参数
const bearing = 45; // 方位角,单位度
const distance = 10; // 位移距离,单位km
const position = {
  latitude: 30,
  longitude: -87
};
const earthRadius = 6371; // 地球平均半径,单位km

// 角度转弧度工具函数
const degToRad = deg => deg * Math.PI / 180;
// 弧度转角度工具函数
const radToDeg = rad => rad * 180 / Math.PI;

// 所有角度统一转弧度
const latRad = degToRad(position.latitude);
const lonRad = degToRad(position.longitude);
const bearingRad = degToRad(bearing);
const angularDistance = distance / earthRadius; // 角距离,单位弧度

// 计算新纬度弧度值
const newLatRad = Math.asin(
  Math.sin(latRad) * Math.cos(angularDistance) +
  Math.cos(latRad) * Math.sin(angularDistance) * Math.cos(bearingRad)
);

// 计算新经度弧度值
const newLonRad = lonRad + Math.atan2(
  Math.sin(bearingRad) * Math.sin(angularDistance) * Math.cos(latRad),
  Math.cos(angularDistance) - Math.sin(latRad) * Math.sin(newLatRad)
);

// 弧度转角度,同时归一化经度到[-180, 180]区间
const newLat = radToDeg(newLatRad);
const newLon = ((radToDeg(newLonRad) + 540) % 360) - 180;

console.log({newLat, newLon});

计算结果说明

代入你给出的参数计算,最终得到的坐标约为北纬30.063°、西经86.935°,误差在米级,符合常规使用需求。

内容的提问来源于stack exchange,提问作者lmg1114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:45:01