js根据经纬度换算行驶里程_js经纬度转换度分秒

boyanx4个月前技术教程12

最近在做有关车辆定位及历史轨迹的项目,需要显示车辆当前位置信息、车辆历史轨迹及行驶公里数,需要这样的效果。

轨迹回放使用的百度的路书功能,包含了开始、暂定、重置功能,但是后台返回的数据只包含了坐标点,

行驶里程数需要前台页面计算。开始查资料,百度提供计算里程的api,提供开始和结束的几个坐标点,再选择是骑车、步行、驾车、是否走高速之类的条件,百度自动计算行车里程,但是这种误差相对比较大,于是放弃。换了另一种方案,根据两个坐标点计算段之间的距离,再累加,这种计算的是实际行驶的里程,开始coding。

先找到计算两个坐标点之间距离的方法

// 计算两个坐标点距离
getFlatternDistance(lon1, lat1, lon2, lat2) {
  var DEF_PI = 3.14159265359; // PI
  var DEF_2PI = 6.28318530712; // 2*PI
  var DEF_PI180 = 0.01745329252; // PI/180.0
  var DEF_R = 6370693.5; // radius of earth
  var ew1, ns1, ew2, ns2;
  var dx, dy, dew;
  var distance;
  // 角度转换为弧度
  ew1 = lon1 * DEF_PI180;
  ns1 = lat1 * DEF_PI180;
  ew2 = lon2 * DEF_PI180;
  ns2 = lat2 * DEF_PI180;
  // 经度差
  dew = ew1 - ew2;
  // 若跨东经和西经180 度,进行调整
  if (dew > DEF_PI) dew = DEF_2PI - dew;
  else if (dew < -DEF_PI) dew = DEF_2PI + dew;
  dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度)
  dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度)
  // 勾股定理求斜边长
  distance = Math.sqrt(dx * dx + dy * dy).toFixed(0);
  return distance;
}

获取坐标集合,调用计算公式

// 计算里程数
calculateMileage(history) {
  let mileage = 0;
  for (let i = 0; i < history.length - 1; i++) {
    mileage += parseInt(
      this.getFlatternDistance(
        history[i].longitude,
        history[i].latitude,
        history[i + 1].longitude,
        history[i + 1].latitude
      )
    );
  }
  this.mileage =
    mileage == 0 ? "--:--" : (mileage / 1000).toFixed(2) + "公里";
}

mileage就是最后的里程数。看下计算时间

749个坐标点,用时1.39501953125ms,对页面显示影响不大。至此结束。

标签: 百度路书

相关文章

vivo OriginOS 5“原子岛”适配高德地图

IT之家 11 月 13 日消息,vivo 官方昨日发文宣布,OriginOS 5“原子岛”功能适配高德地图,支持骑 / 步行导航路线、打车动态显示。vivo OriginOS 5 于今年 10 月发...

导航出错 商家贴指路告示为外地游客指路

来源:重庆晨报“高德上是错的,百度上也是错的,去朝天门请看这个路书……”导航出错 商家贴指路告示为外地游客指路附近商家希望有关部门在(曹家巷)路口设立指路牌,引导游客,不要再让他们迷路了“城管,清洁...

高!德地图2025正式发布:10亿人的AI出行助手

导航软件永远读不懂用户真正想要什么——明明赶飞机却推送网红餐厅、下班回家被堵在景区路线、周末出游推荐的都是人挤人的景点。高德地图2025版本本周正式上线,号称用“空间智能”实现了从工具到AI行动伙伴的...

2014中秋乌兰布统自驾啦~~主要写写怎么走能省下塞罕坝的过路费

2014中秋我们两对四人自驾去乌兰布统时间:9.6-9.8,三天两夜,随车路书的照片不在,回头补上具体耗时多久车型:朗逸1.6(建议去草原还是开吉普这种底盘高的车比较好,这次去就托底了。。。)我这次就...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。