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
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值