JavaScript 计算坐标两点之间的距离

💡 注意
这里主要是使用 Haversine公式(半正矢公式)​ 来计算,Haversine公式​ 可以根据两个点的经纬度计算出它们在地球表面的距离。使用这种方式计算的出来的距离,数值较小时可视为两点之间的直线距离(实际上是大圆距离)。
如果需要根据具体的路线来进行计算,可以考虑通过高德地图的 SDK 来完成。

/**
 * 计算两个坐标点之间距离(单位KM)
 * @param {object} point1 坐标点1
 * @param {string} point1.longitude 经度
 * @param {string} point1.latitude 纬度
 * @param {object} point2 坐标点2
 * @param {string} point2.longitude 经度
 * @param {string} point2.latitude 纬度
 */
export function getDistance(point1, point2) {
  // 将两个点的纬度转换为弧度
  const radLat1 = (point1.latitude * Math.PI) / 180;
  const radLat2 = (point2.latitude * Math.PI) / 180;
  // 计算两个点的纬度差和经度差
  const latDiff = radLat1 - radLat2;
  const lngDiff = (point1.longitude * Math.PI) / 180 - (point2.longitude * Math.PI) / 180;
  // 使用Haversine公式计算两点间的大圆距离
  let distance =
    2 *
    Math.asin(
      Math.sqrt(
        Math.pow(Math.sin(latDiff / 2), 2) +
          Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(lngDiff / 2), 2)
      )
    );
  // 将距离乘以地球半径(千米)
  distance = distance * 6378.137;
  // 四舍五入到小数点后四位
  distance = Math.round(distance * 10000) / 10000;
  // 返回距离(千米)
  return distance;
}