关于javascript:使用腾讯位置服务API完成车辆轨迹回放模拟真实的速度和方向

6次阅读

共计 2878 个字符,预计需要花费 8 分钟才能阅读完成。

产品需要:

依据可能回放进去车辆的运行轨迹路线、运行方向和速度。

需要剖析:

1、首先因为是 Web 网页端的性能,所以须要用到的是地图模块的 API,能够抉择百度地图或者腾讯地图。

2、因为须要地位信息,所以地图须要反对点到点的路线绘制性能。

3、关键点:须要一个小车,并且小车是能够依据不同的方向而扭转车头朝向。

因为前两点性能百度地图 API 能够满足,然而第三点,腾讯地图 LBS,更新了新版本的接口,图标能够主动依据方向扭转朝向。所以抉择腾讯地址,缩小凋谢量,另外就是间接 API 反对,缩小了很多的 BUG。

开发前的筹备:

1、在腾讯位置服务中注册为开发者:

2、在控制台配置 Key

配置实现之后,就能够通过开发文档 -web 前端 -JavaScript-API 来获取腾讯位置服务的 LBS 组件

开始开发:

第一步:画页面,初始化地图:

把 key 中的 XXXXXXXXXXX 更换为咱们方才在腾讯地图 LBS 后盾获取的 key。

<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>marker 轨迹回放 - 全局模式 </title>
</head>
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=XXXXXXXXXXX"></script>
<style type="text/css">
  html,
  body {
    height: 100%;
    margin: 0px;
    padding: 0px;
  }
 
  #container {
    width: 100%;
    height: 100%;
  }
</style>
 
<body>
  <div id="container"></div>
  <script type="text/javascript">
    var center = new TMap.LatLng(30.465512, 114.402740);
    // 初始化地图
    var map = new TMap.Map("container", {
      zoom: 15,
      center: center
    });
 
  </script>
</body>
 
</html>

成果如图所示:

第二步:画路线,并依据路线模仿运行

这里须要留神的是,如果路线比较复杂,尽可能的应用分钟级,甚至秒级的坐标,这样绘制的轨迹也会更精准。速度的展现,须要后盾在记录坐标的时候计算好,并实时反馈。

 <script type="text/javascript">
    var center = new TMap.LatLng(39.984104, 116.307503);
    // 初始化地图
    var map = new TMap.Map("container", {
      zoom: 15,
      center: center
    });
 
    var path = [new TMap.LatLng(39.98481500648338, 116.30571126937866),
      new TMap.LatLng(39.982266575222155, 116.30596876144409),
      new TMap.LatLng(39.982348784165886, 116.3111400604248),
      new TMap.LatLng(39.978813710266024, 116.3111400604248),
      new TMap.LatLng(39.978813710266024, 116.31699800491333)
    ];
 
    var polylineLayer = new TMap.MultiPolyline({
      map, // 绘制到指标地图
      // 折线款式定义
      styles: {
        'style_blue': new TMap.PolylineStyle({
          'color': '#3777FF', // 线填充色
          'width': 4, // 折线宽度
          'borderWidth': 2, // 边线宽度
          'borderColor': '#FFF', // 边线色彩
          'lineCap': 'round' // 线端头形式
        })
      },
      geometries: [{
        styleId: 'style_blue',
        paths: path
      }],
    });
 
    var marker = new TMap.MultiMarker({
      map,
      styles: {
        'car-down': new TMap.MarkerStyle({
          'width': 40,
          'height': 40,
          'anchor': {
            x: 20,
            y: 20,
          },
          'faceTo': 'map',
          'rotate': 180,
          'src': 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/car.png',
        }),
        "start": new TMap.MarkerStyle({
          "width": 25,
          "height": 35,
          "anchor": {x: 16, y: 32},
          "src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/start.png'
        }),
        "end": new TMap.MarkerStyle({
          "width": 25,
          "height": 35,
          "anchor": {x: 16, y: 32},
          "src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/end.png'
        })
      },
      geometries: [{
        id: 'car',
        styleId: 'car-down',
        position: new TMap.LatLng(39.98481500648338, 116.30571126937866),
      },{
        "id": 'start',
        "styleId": 'start',
        "position": new TMap.LatLng(39.98481500648338, 116.30571126937866)
      }, {
        "id": 'end',
        "styleId": 'end',
        "position": new TMap.LatLng(39.978813710266024, 116.31699800491333)
      }]
    });
    marker.moveAlong({  
      'car': {
        path,
        speed: 250
      }
    }, {autoRotation:true})
  </script>

另外须要后盾配合的是:

1、把汽车的轨迹坐标,依照秒级 / 分钟级记录,同时记录下轨迹记录的工夫。

2、把坐标绘制成轨迹,而不是仅仅设置终点和起点。

3、轨迹与轨迹之间用地图计算出来间隔,而后除以工夫计算出来速度。前端地图实时更新 marker.moveAlong 中的 car 的速度。来达到轨迹回放跟理论车辆运行速度统一的目标。

总结:
应用腾讯位置服务 API,是目前最简略的能够花轨迹 +Mark 图标追随轨迹挪动 +Mark 图标能够自适应转向的实现。

正文完
 0