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

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

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

image.png

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

image.png

行驶里程数需要前台页面计算。开始查资料,百度提供计算里程的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就是最后的里程数。看下计算时间

image.png

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


相关文章
|
10月前
|
数据可视化 搜索推荐 JavaScript
数据可视化大屏百度地图区域掩膜MapMask实现地图指定区域非省市县行政区显示的实战案例解析(JavaScript API GL、个性化地图定制、指定区域经纬度拾取转化)
数据可视化大屏百度地图区域掩膜MapMask实现地图指定区域非省市县行政区显示的实战案例解析(JavaScript API GL、个性化地图定制、指定区域经纬度拾取转化)
705 0
|
6月前
|
JavaScript API
js日期、经纬度格式化
js日期、经纬度格式化
39 0
|
9月前
|
JavaScript 前端开发 定位技术
js实现地图选点获取经纬度
js实现地图选点获取经纬度
|
10月前
|
编解码 JavaScript 前端开发
百度地图:使用javascript和web服务API自动实现经纬度编码的解决方案
百度地图:使用javascript和web服务API自动实现经纬度编码的解决方案
90 1
|
10月前
|
JavaScript 安全 前端开发
js如何获取当前经纬度
js如何获取当前经纬度
|
JSON JavaScript 前端开发
百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度
百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度
411 0
|
Web App开发 JavaScript 前端开发
js 调用百度地图,并且定位用户地址,显示省市区街,经纬度
网上的一些百度地图例子,基本上没有连套的 定位 例子。下面我分享一套我自己弄的,废话不多说,看代码,里面有注释! 1 2 3 4 5 6 Hello, World 7 8 html ...
1651 0
|
JSON JavaScript 前端开发
javascript实现经纬度与地址的互转
原文:javascript实现经纬度与地址的互转   最近项目中会用到将地址转换为经纬的。从出来,还一直未遇到过这类问题,下来自己提前学习了,将自己所学的记录在案。   在网上找了很多资料,最后确定了,百度的API,有实现相关的接口(API地址)。
1107 0
|
JavaScript
利用JS实现的根据经纬度计算地球上两点之间的距离
最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下。 计算地球表面两点间的距离大概有两种办法。 第一种是默认地球是一个光滑的球面,然后计算任意两点间的距离,这个距离叫做大圆距离(The Great Circle Distance)。
894 0
|
13天前
|
存储 移动开发 JavaScript
学习javascript,前端知识精讲,助力你轻松掌握
学习javascript,前端知识精讲,助力你轻松掌握