腾讯地图轨迹回放的实现

效果图

  • 首先了解一下需要使用到的API
API 定义
MultiMarker(必选) 用于实现在地图中的点标注功能,可以根据用户设置的样式同时标注多个位置
InfoWindow(可选) 信息窗口,一般用于地点的摘要性信息的展示,Javascript API GL 提供了TMap.infoWindow类,用于实现这一功能
MultiPolyline(可选) 矢量图形指绘制在地图上的二维线、面覆盖物, 具有广泛的应用场景,用于构建折线,常用于表现规划线路、行动轨迹、区域边界等
  • 实现思路
    1、将轨迹数据进行处理,遍历经纬度,全部转为腾讯地图new TMap.LatLng(lat,lng),放进一个数组变量,用于后面渲染回放轨迹和渲染轨迹线;
    2、创建一个数组变量,用来存放信息窗口需要展示的内容
for (let i = 0; i < arr.length; i++) {if (i !== arr.length - 1) {if (arr[i + 1].lon !== arr[i].lon && arr[i + 1].lat !== arr[i].lat) { // 去重和一些没有经纬度的数据this.polylineData.push(new TMap.LatLng(arr[i].lat, arr[i].lon));this.trackData.push({position: new TMap.LatLng(arr[i].lat, arr[i].lon),updateTime: arr[i].updateTime,speed: arr[i].speed,imei: arr[i].imei,coordType: arr[i].coordType,});}} else {this.polylineData.push(new TMap.LatLng(arr[i].lat, arr[i].lon));this.trackData.push({position: new TMap.LatLng(arr[i].lat, arr[i].lon),updateTime: arr[i].updateTime,speed: arr[i].speed,imei: arr[i].imei,coordType: arr[i].coordType,});}}

3、设置轨迹的相关图标样式,包括起点、终点和行走的图标

this.playBackMarkers.setStyles({'car-down': new TMap.MarkerStyle({width: 30,height: 30,anchor: {x: 10,y: 20,},faceTo: 'screen',rotate: 0,src: require('../../assets/images/car.png'),}),polyMark: new TMap.MarkerStyle({width: 40,height: 40,anchor: { x: 15, y: 32 },src: require('../../assets/images/coordinate-spot.png'),}),start: new TMap.MarkerStyle({width: 25,height: 35,anchor: { x: 15, y: 32 },src: require('../../assets/images/start.png'),}),end: new TMap.MarkerStyle({width: 25,height: 35,anchor: { x: 15, y: 32 },src: require('../../assets/images/end.png'),}),});

4、通过MultiMarker.setGeometries设置固定的起点、终点和行走开始点的图标

this.playBackMarkers.setGeometries([{id: 'car',styleId: 'car-down',rank: 4,position: this.polylineData[0],},{id: 'start',styleId: 'start',updateTime: this.trackData[0].updateTime,speed: this.trackData[0].speed,rank: 4,imei: this.trackData[0].imei,coordType: this.trackData[0].coordType,position: this.trackData[0].position,},{id: 'end',styleId: 'end',rank: 4,updateTime: this.trackData[this.trackData.length - 1].updateTime,speed: this.trackData[this.trackData.length - 1].speed,imei: this.trackData[this.trackData.length - 1].imei,coordType: this.trackData[this.trackData.length - 1].coordType,position: this.trackData[this.trackData.length - 1].position,},]);

5、通过MultiMarker.add将需要回放的点数据全部添加进坐标点,从而在地图上将所有的轨迹点显示出来

this.trackData.map((item, index) => {if (index != 0 && index != this.trackData.length - 1) {return this.playBackMarkers.add([{id: index,styleId: 'polyMark',position: item.position,updateTime: item.updateTime,speed: item.speed,imei: item.imei,rank: 2,coordType: item.coordType,},]);}});

6、创建MultiPolyline轨迹线,设置PolylineStyle的相关样式,将前面处理好的轨迹数据通过MultiPolyline.add添加进去

this.polylineLayer = new TMap.MultiPolyline({map: this.map, // 绘制到目标地图// 折线样式定义styles: {style_blue: new TMap.PolylineStyle({color: '#3777FF', // 线填充色width: 6, // 折线宽度borderWidth: 2, // 边线宽度borderColor: '#FFF', // 边线颜色lineCap: 'round', // 线端头方式// eraseColor: 'rgba(190,188,188,1)',eraseColor: 'rgba(74, 179, 34, .7)',showArrow: true,arrowOptions: {width: 6,height: 4,},}),},geometries: [],});this.polylineLayer.setGeometries([{id: 'erasePath',styleId: 'style_blue',paths: this.polylineData,},]);

7、创建InfoWindow信息窗体
8、做一个开始回放、暂停回放、重新回放、结束回放的事件处理

switchType(type) {if (type == 'start') {this.playBackMarkers.moveAlong({car: {path: this.polylineData, speed: 70,},},{autoRotation: true,});} else if (type == 'stop') {this.playBackMarkers.pauseMove();} else if (type == 'continue') {this.playBackMarkers.resumeMove();} else if (type == 'reStart') {this.playBackMarkers.moveAlong({car: {path: this.polylineData,speed: 70,},},{autoRotation: true,});} else if (type == 'closePlackBack') {if (this.trackData.length > 3) {this.infoWindow.destroy();this.polylineData = [];this.trackData = [];this.playBackMarkers.stopMove();this.playBackMarkers.setGeometries([]);this.playBackMarkers.setMap(null);this.polylineLayer.setMap(null);}}}

8、对轨迹回放的进行监听,执行腾讯地图的路线擦除,保证轨迹的填充线能够跟着行走图标的实际情况走

 // 使用路线擦除接口 eraseTo, https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVectorthis.polylineLayer.eraseTo('erasePath',passedLatLngs.length - 1,passedLatLngs[passedLatLngs.length - 1]);

9、监听marker点的点击,将点击后获取到的marker点赋值到信息窗体

  • 总结
    1、轨迹回放结束时务必要清除MultiMarker、MultiPolyline,关闭infoWindow信息窗体
    2、infoWindow上的点击事件需要通过监听元素来添加,并且通过bind来改变this指向,否则不生效
    3、轨迹数据一定要做去重处理,否则轨迹的填充线在回放的时候会有问题

腾讯地图GL(轨迹回放)相关推荐

  1. 高德地图3D轨迹回放 + 视野跟随功能

    高德地图3D轨迹回放 + 视野跟随功能 概述 代码实现步骤 完整代码 (需要添加一个2.0的key) 概述 若有帮助到你,麻烦点一波关注,博主会持续推出Echarts,D3,地图,Three.js方面 ...

  2. android 基于高德地图的轨迹回放

    android 基于高德地图的轨迹回放 前段时间公司项目有一个需求,就是需要看到设备上传之后的轨迹路线,并且可以实现回放的整个过程,功能包括路线回放.地图位置插点.回放之后的轨迹标记颜色.回放加速等功 ...

  3. js室内地图开发_如何使用JS来开发室内三维地图的轨迹回放功能

    在制作完成室内三维地图的功能后,最经常有的需求就是如何做人员的轨迹回放,一般流程都是从数据库中查询轨迹坐标后,经过后台查询接口返回给前端,接下来的事情都交给JS来完成. 如果想做好一个性能好的轨迹回放 ...

  4. 百度地图的轨迹回放和实时监控

    最近写了两个页面,是跟百度地图有关的,本来以为是用的鹰眼的轨迹,才发现没那么麻烦,直接用的是百度地图自带的api. 1 轨迹回放 <template><div class=" ...

  5. 地图跑步轨迹回放动画实现

    一.要求1.轨迹动画流畅,慢-快-慢:2.渐变色尽量与地图渐变API的效果一致:3.拖动地图,动画消失,显示完整渐变轨迹. 二.分析1.高德地图并没有提供相应效果的API,但是可以通过经纬度坐标,转换 ...

  6. 百度地图实现轨迹回放(显示到达时间)

    使用了百度路书 直接上代码,添加秘钥直接运行 <!DOCTYPE html> <html> <head><meta http-equiv="Cont ...

  7. H5移动端 高德地图 巡查轨迹回放 2.0版

    注意是HTTPS还是HTTP index.html引入 <script type="text/javascript" src="http://webapi.amap ...

  8. bing地图车辆轨迹回放代码

    1导入js <script type="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jque ...

  9. 高德地图轨迹回放功能

    一.介绍        在项目过程中,需要对自己设备产品输出的定位信息进行验证.通过路跑测试获取到了一组经纬度数据.这时需要验证这组数据是否是实际路跑测试的轨迹,就用到了高德地图的轨迹回放功能.下面将 ...

最新文章

  1. Oracle 优化器
  2. ubuntu安装sublime
  3. MySQL 数据库添加数据时为什么会产生外码(外键)约束?原理就是什么?如何解决?
  4. Java 网络实例二(查看主机指定文件的最后修改时间、Socket实现多线程服务器程序、Socket连接到指定主机、网页抓取)
  5. 强力推荐几种多媒体播放器方案(jQuery、Flash、HTML5)
  6. Java编程:递归(迷宫问题、八皇后问题)
  7. perl mysql 时间戳_讲Perl中的本地时间与UNIX时间戳间相互转换的方法
  8. 首次出现日访问量突破10000,祝贺
  9. 全链路压测应该怎么做?答案都在这里了!
  10. weka的java环境配置_weka环境配置
  11. r语言和python的区别-Python和R语言的区别_Python与R的区别和联系
  12. IP 地址 与硬件地址
  13. 微信小程序——推荐简洁和高可用性的插件WxP UI
  14. python 报错'tuple' object does not support item assignment
  15. 网页版全景图服务器搭建,云服务器全景图
  16. Spring Cloud Alibaba与Spring Cloud的区别
  17. 2022年全球市场菱镁矿和水镁石总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. xdoj-37 排序2
  19. 开源论坛软件Flarum的安装
  20. linux五文件类型,Linux中常见的文件类型

热门文章

  1. [MySQL] 日志刷盘机制
  2. javascript打印发票
  3. 公众号开发(1) —— natapp 内网穿透
  4. WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集和播放语音混音后的数据(onMixedAudioFrame)
  5. 公司采购阿里云服务器配置怎么选?
  6. 好酒也需要伯乐,你真的懂酒吗?
  7. 如何给PDF文件添加自定义图章的方法
  8. [Python][自己写的杀病毒脚本]
  9. html对li设置背景色,更改li上的背景颜色:visited
  10. CIA1 皇宫看守(树形dp)