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

JavaScript循环获取前后游标差值 计算相邻经纬度点距离

相邻经纬度点距离计算实现方案

核心遍历逻辑

你要的配对规则是严格按顺序的相邻元素匹配,不需要复杂的游标控制:

  • 循环直接从数组的索引1开始遍历,直到数组最后一个元素
  • 每轮循环中,当前索引i对应的点是后序点,索引i-1对应的点就是需要匹配的前序点

这种写法不会出现下标越界,也不会漏配、错配,完全符合你要求的「第一次取0和1、第二次取1和2」的规则。

完整可运行代码

// Haversine公式实现,接收两个[纬度, 经度]格式的坐标点,返回两点间直线距离,单位:米
function getHaversineDistance(pointA, pointB) {
  const earthRadius = 6371000;
  const lat1 = pointA[0] * Math.PI / 180;
  const lat2 = pointB[0] * Math.PI / 180;
  const deltaLat = (pointB[0] - pointA[0]) * Math.PI / 180;
  const deltaLng = (pointB[1] - pointA[1]) * Math.PI / 180;

  const a = Math.sin(deltaLat / 2) ** 2 +
            Math.cos(lat1) * Math.cos(lat2) *
            Math.sin(deltaLng / 2) ** 2;
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  return earthRadius * c;
}

// 你的经纬度坐标数组
const trackPoints = [
  [51.06745252933975, -114.11267548799515],
  [51.067506465746014, -114.09559518098831],
  [51.0827140244322,-114.0949085354805],
  [51.088267312195484,-114.10709649324417]
];

// 核心遍历:计算每一段相邻点的距离
const segmentDistances = [];
for (let i = 1; i < trackPoints.length; i++) {
  const prev = trackPoints[i - 1];
  const curr = trackPoints[i];
  segmentDistances.push(getHaversineDistance(prev, curr));
}

// 如需计算整条路径总长度,直接累加分段距离即可
const totalDistance = segmentDistances.reduce((sum, val) => sum + val, 0);

更简洁的函数式写法

如果你偏好无显式循环的写法,可以用数组方法实现,逻辑和for循环完全一致:

const segmentDistances = trackPoints.slice(1).map((curr, index) => {
  const prev = trackPoints[index];
  return getHaversineDistance(prev, curr);
});

边界兼容说明:当传入的坐标数组长度小于2(空数组、仅存1个点)时,上述两种写法都会直接返回空数组,不会触发下标越界报错,不需要额外编写异常判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:01:09