js根据经纬度换算行驶里程

简介: js根据经纬度换算行驶里程

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

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

行驶里程数需要前台页面计算。开始查资料,百度提供计算里程的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,对页面显示影响不大。至此结束。



相关文章
|
机器学习/深度学习 传感器 定位技术
基于WGS84 椭球恒向线距离计算沿纬度_经度路径行驶的距离附matlab代码
基于WGS84 椭球恒向线距离计算沿纬度_经度路径行驶的距离附matlab代码
|
3月前
|
前端开发 JavaScript 定位技术
三、前端高德地图、测量两个点之前的距离
文章介绍了如何在前端使用高德地图API实现测量两个点之间的距离,包括开启和关闭测量工具的方法,以及如何清除地图上的测量点、连线和文字。
47 1
三、前端高德地图、测量两个点之前的距离
|
4月前
|
定位技术
高德地图之获取经纬度并且根据获取经纬度渲染到路线规划
高德地图之获取经纬度并且根据获取经纬度渲染到路线规划
64 0
|
6月前
经纬度大0.1范围会变大多少
【6月更文挑战第18天】经纬度大0.1范围会变大多少
122 0
|
6月前
|
分布式计算 定位技术 Scala
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
123 0
|
JavaScript 前端开发 定位技术
js实现地图选点获取经纬度
js实现地图选点获取经纬度
162 0
|
前端开发 定位技术 API
百度地图API:根据起始点经纬度坐标确认最佳路线规划
百度地图API:根据起始点经纬度坐标确认最佳路线规划
130 0
|
定位技术
GPS坐标换算
GPS坐标换算
152 0
|
定位技术 API Android开发
安卓基于百度地图计算两个经纬度点的直线距离并只保留两位小数
安卓基于百度地图计算两个经纬度点的直线距离并只保留两位小数
402 0
|
Java 定位技术 Android开发
安卓(JAVA)已知两点经纬度,求出一条线上定距(比如隔20米或30一个点)的经纬度。
安卓(JAVA)已知两点经纬度,求出一条线上定距(比如隔20米或30一个点)的经纬度。
279 0