JS计算两个坐标点之间的距离和角度

计算两个GPS坐标点之间的距离,函数使用了 Haversine 公式来计算两点之间的距离,单位为米

function calcDistance(lat1, lon1, lat2, lon2) {
      const R = 6371e3; // 地球半径
      const φ1 = (lat1 * Math.PI) / 180; // 第一个点的纬度转化为弧度
      const φ2 = (lat2 * Math.PI) / 180; // 第二个点的纬度转化为弧度
      const Δφ = ((lat2 - lat1) * Math.PI) / 180; // 两点纬度之差转化为弧度
      const Δλ = ((lon2 - lon1) * Math.PI) / 180; // 两点经度之差转化为弧度

      const a =
        Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
        Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

      const distance = R * c; // 距离,单位为米

      return distance;
    }

计算两点对于正北方向的朝向角度,第二个点相对于第一个点的正北方向的角度
这个公式计算出的朝向角度是以正北方向为0度,顺时针旋转为正,逆时针旋转为负。如果需要以正南方向为0度,可以将计算结果加上180度,然后对360取模即可

function getAngle(lat1, lon1, lat2, lon2) {
      const dLon = ((lon2 - lon1) * Math.PI) / 180;
      const y = Math.sin(dLon) * Math.cos((lat2 * Math.PI) / 180);
      const x =
        Math.cos((lat1 * Math.PI) / 180) * Math.sin((lat2 * Math.PI) / 180) -
        Math.sin((lat1 * Math.PI) / 180) *
          Math.cos((lat2 * Math.PI) / 180) *
          Math.cos(dLon);
      const brng = (Math.atan2(y, x) * 180) / Math.PI;
      const angle = (brng + 360) % 360;
      return angle;
    }

测试

const a = {
      latitude: 45.539301,
      longitude: 84.823943,
    };
    const b = {
      latitude: 45.539285,
      longitude: 84.823943,
    };
console.log(
      calcDistance(a.latitude, a.longitude, b.latitude, b.longitude),
      getAngle(a.latitude, a.longitude, b.latitude, b.longitude)
    );
    // 输出结果:1.7791188265616218 180

你可能感兴趣的:(初入前端开发从0到1,javascript,js,前端,前端框架,html)