高德地图实现对应车辆的轨迹回放与轨迹的清除重绘制(浏览器支持: PathSimplifier目前依赖Canvas进行绘制,因此不支持IE9及以下浏览器)

高德地图 - 轨迹回放,消息框内展示车辆信息且随车辆移动 消息框跟随车辆移动并展示车辆实时信息 阅读详情

最近项目实践中接触高德地图比较多,也发现高德地图新增了一系列的UI组件库,因此遇到一些新问题也只能自己琢磨。

页面需求:查询输入框实现车辆的对应轨迹,在地图上显示相应的轨迹(此处,上一辆车的轨迹必须清除才能绘制下一辆车的运动轨迹)

自己写了个类似功能的demo效果如下:

项目中一般是通过输入车牌号并通过查询按钮请求接口得到数据并进行渲染(效果图如下)

此处直接用静态数据+两个车辆按钮查询,直接贴入代码:

<!doctype html>
<html lang="zh-CN">

<head>
    <!-- 原始地址://webapi.amap.com/ui/1.0/ui/misc/PathSimplifier/examples/simple-demo.html -->
    <base href="//webapi.amap.com/ui/1.0/ui/misc/PathSimplifier/examples/" />
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>简单路径</title>
    <style>
    html,
    body,
    #container {
        width: 100%;
        height: 100%;
        margin: 0px;
    }
    .btn-group{
      position:absolute;
      z-index: 10;
      right: 10px;
      bottom:50px;
    }
    .btn-group button{
      background-color:cornflowerblue;
      color:#fff;
    }
    </style>
</head>

<body>
    <div id="container"></div>
    <div class="btn-group">
      <button class="btn-car1">车辆一模拟</button>    
      <button class="btn-car2">车辆二模拟</button>  
    </div>
    <script type="text/javascript" src='https://webapi.amap.com/maps?v=1.4.4&key=您申请的key值'></script>
    <!-- UI组件库 1.0 -->
    <script src="https://webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
    <script type="text/javascript">
    //创建地图
    var map = new AMap.Map('container', {
        zoom: 4
    });
    //此处静态模拟两辆车数据:
    var Path={"car1": [
                [116.405289, 39.904987],
                [113.964458, 40.54664],
                [111.47836, 41.135964],
                [108.949297, 41.670904],
                [106.380111, 42.149509],
                [103.774185, 42.56996],
                [101.135432, 42.930601],
                [98.46826, 43.229964],
                [95.777529, 43.466798],
                [93.068486, 43.64009],
                [90.34669, 43.749086],
                [87.61792, 43.793308]
            ],
            "car2":[
            [113.964458, 40.54664],
            [98.46826, 43.229964],
            [116.405289, 39.904987],
            [103.774185, 42.56996],
            ]},navg1;
    //轨迹渲染函数,参数(Path:对应车辆的经纬度数组即轨迹相关数据)
    function renderTrace(Path){
      AMapUI.load(['ui/misc/PathSimplifier', 'lib/$'], function(PathSimplifier, $) {
        if (!PathSimplifier.supportCanvas) {
            alert('当前环境不支持 Canvas!');
            return;
        }
        var pathSimplifierIns = new PathSimplifier({
            zIndex: 100,
            //autoSetFitView:false,
            map: map, //所属的地图实例

            getPath: function(pathData, pathIndex) {

                return pathData.path;
            },
            getHoverTitle: function(pathData, pathIndex, pointIndex) {

                if (pointIndex >= 0) {
                    //point 
                    return pathData.name + ',点:' + pointIndex + '/' + pathData.path.length;
                }

                return pathData.name + ',点数量' + pathData.path.length;
            },
            renderOptions: {

                renderAllPointsIfNumberBelow: 100 //绘制路线节点,如不需要可设置为-1
            }
        });
        window.pathSimplifierIns = pathSimplifierIns;
        //设置数据
        pathSimplifierIns.setData([{
            name: '路线0',
            path:Path//传入的轨迹数据
        }]);

        //对第一条线路(即索引 0)创建一个巡航器
        navg1 = pathSimplifierIns.createPathNavigator(0, {
            loop: false, //循环播放
            speed: 1000000 //巡航速度,单位千米/小时
        });
        navg1.start();
        map.setFitView();//根据地图上添加的覆盖物分布情况,自动缩放地图到合适的视野级别,参数overlayList默认为当前地图上添加的所有覆盖物图层
    });
    }
    document.getElementsByClassName("btn-car1")[0].addEventListener("click",function(){
      renderTrace(Path.car1);
    });
    document.getElementsByClassName("btn-car2")[0].addEventListener("click",function(){
      renderTrace(Path.car2);
    });
    </script>
</body>
</html>

运行上述代码你会发现出现两条轨迹,然而,我们是想要实现将上一条轨迹清除然后重新绘制新的车辆的运动轨迹,在经过百度一系列说没办法实现轨迹清除,和通过下面两个方法都没办法清除之后

 

clearMap( )

 

删除地图上所有的覆盖物

remove(overlayers:Array)

 

删除地图覆盖物数组,数组为一个或多个覆盖物。

本着任何事情都能有对应的解决方法的想法,还是让自己找到了实现轨迹清除的方法,就是下面这段代码,完美的清除了上一条轨迹:

if (window.pathSimplifierIns) {
						//通过该方法清空上次传入的轨迹
						pathSimplifierIns.setData([]);
					}

首先判断是否存在对应的轨迹组件示例,如果已经存在,则将该轨迹示例进行清空(此处曾尝试设置pathSimplifierIns=null也无法清除轨迹),清空的方法为通过setData传入空数组的轨迹数据。

 

setData(data:Array)

 

设定数据源数组,并触发重新绘制。data为空时将清除显示内容。 

在本例demo中,只需将setData加入renderTrace方法开头处,即可每次进行重绘~

在此,也给下导航器事件触发方法:

 

start(pointIndex:number)

 

开始路径巡航。 pointIndex用于指定巡航的起始节点索引,默认为节点索引范围(range)的最小值

 

如果是浮点类型,则整数部分表示起始点索引,小数部分表示起始点和下一节点间的比例位置。比如7.5就表示7~8的中间位置

pause()

 

暂停巡航

resume()

 

恢复巡航

stop() 

 

停止巡航,同时清除已经过路径(这一点不同于pause)

destroy() 

 

销毁巡航器。巡航作为动画过程是非常耗费性能的,因此不再需要时应及时销毁

项目中往往还要对轨迹播放速度进行调整,只需通过如navg.setSpeed(num)进行设置即可

 

setSpeed(speed:number)

 

设定巡航器的速度,单位千米/小时

鉴于有好多朋友反馈说加上没有。因此附上最终的demo代码

<!doctype html>
<html lang="zh-CN">
 
<head>
    <!-- 原始地址://webapi.amap.com/ui/1.0/ui/misc/PathSimplifier/examples/simple-demo.html -->
    <base href="//webapi.amap.com/ui/1.0/ui/misc/PathSimplifier/examples/" />
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>简单路径</title>
    <style>
    html,
    body,
    #container {
        width: 100%;
        height: 100%;
        margin: 0px;
    }
    .btn-group{
      position:absolute;
      z-index: 10;
      right: 10px;
      bottom:50px;
    }
    .btn-group button{
      background-color:cornflowerblue;
      color:#fff;
    }
    </style>
</head>
 
<body>
    <div id="container"></div>
    <div class="btn-group">
      <button class="btn-car1">车辆一模拟</button>    
      <button class="btn-car2">车辆二模拟</button>  
    </div>
    <script type="text/javascript" src='https://webapi.amap.com/maps?v=1.4.4&key=您申请的key值'></script>
    <!-- UI组件库 1.0 -->
    <script src="https://webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
    <script type="text/javascript">
    //创建地图
    var map = new AMap.Map('container', {
        zoom: 4
    });
    //此处静态模拟两辆车数据:
    var Path={"car1": [
                [116.405289, 39.904987],
                [113.964458, 40.54664],
                [111.47836, 41.135964],
                [108.949297, 41.670904],
                [106.380111, 42.149509],
                [103.774185, 42.56996],
                [101.135432, 42.930601],
                [98.46826, 43.229964],
                [95.777529, 43.466798],
                [93.068486, 43.64009],
                [90.34669, 43.749086],
                [87.61792, 43.793308]
            ],
            "car2":[
            [113.964458, 40.54664],
            [98.46826, 43.229964],
            [116.405289, 39.904987],
            [103.774185, 42.56996],
            ]},navg1;
    //轨迹渲染函数,参数(Path:对应车辆的经纬度数组即轨迹相关数据)
    function renderTrace(Path){
        //判断是否已有轨迹,进行清除!!!注意,就是在此处清除了轨迹
        if(window.pathSimplifierIns){
            pathSimplifierIns.setData([]);
        }
      AMapUI.load(['ui/misc/PathSimplifier', 'lib/$'], function(PathSimplifier, $) {
        if (!PathSimplifier.supportCanvas) {
            alert('当前环境不支持 Canvas!');
            return;
        }
        var pathSimplifierIns = new PathSimplifier({
            zIndex: 100,
            //autoSetFitView:false,
            map: map, //所属的地图实例
 
            getPath: function(pathData, pathIndex) {
 
                return pathData.path;
            },
            getHoverTitle: function(pathData, pathIndex, pointIndex) {
 
                if (pointIndex >= 0) {
                    //point 
                    return pathData.name + ',点:' + pointIndex + '/' + pathData.path.length;
                }
 
                return pathData.name + ',点数量' + pathData.path.length;
            },
            renderOptions: {
 
                renderAllPointsIfNumberBelow: 100 //绘制路线节点,如不需要可设置为-1
            }
        });
        window.pathSimplifierIns = pathSimplifierIns;
        //设置数据
        pathSimplifierIns.setData([{
            name: '路线0',
            path:Path//传入的轨迹数据
        }]);
 
        //对第一条线路(即索引 0)创建一个巡航器
        navg1 = pathSimplifierIns.createPathNavigator(0, {
            loop: false, //循环播放
            speed: 1000000 //巡航速度,单位千米/小时
        });
        navg1.start();
        map.setFitView();//根据地图上添加的覆盖物分布情况,自动缩放地图到合适的视野级别,参数overlayList默认为当前地图上添加的所有覆盖物图层
    });
    }
    document.getElementsByClassName("btn-car1")[0].addEventListener("click",function(){
      renderTrace(Path.car1);
    });
    document.getElementsByClassName("btn-car2")[0].addEventListener("click",function(){
      renderTrace(Path.car2);
    });
    </script>
</body>
</html>

 

 

JSAPI 高德地图应用--车辆的轨迹回放、并附有信息框(下) 上篇文章提到了车辆的轨迹回放主要有两个方案:一种是通过标记点moveAlong()的方法,另一种是PathSimplifier是一个轨迹展示组件;上篇使用了标记点的方法,这篇就来使用PathSimplifier的轨迹展示的方法,同样的效果图: ... 阅读详情

相关推荐

高德地图轨迹平滑移动改进demo

对高德地图轨迹平滑移动的官方demo做了一点改进,易于大家理解。

高德地图清除巡航播放轨迹

近期在做地图项目,利用的是高德地图API。遇到了一些问题。在此记录下来。 问题描述 动态生成的轨迹利用setData来设置数据,同样我们可以利用这个方法来清除数据。 以下只展示相关代码,自己本身业务相关代码不做展示。 代码如下: trackInit() { // 重要!!! 就是它起到清除数据的作用。注意它放在方法的最顶部 if (window.pathSimplifierIns) { //通过该方法清空上次传入的轨迹 pathSimplifierIns.set.

qq_19249021的博客 1857

AMapReplayDemo:高德地图轨迹回放 Demo

AMapReplayDemo 高德地图轨迹回放 Demo 效果图 使用 示例的高德 API Key 已经去掉了,如果运行不起来请自行申请高德 API Key,填入如下区域: <meta-data android:name="com.amap.api.v2.apikey" android:value="<你的Key>"/>

vue使用高德地图轨迹活动效果demo(整理)

vue使用高德地图轨迹活动效果demo

在北风吹起的时候加入我们的队伍 在秋雨到来的时候成为彼此的温暖 1171

工业相机与ABB机器人Socket通信实战:手把手教你用RobotStudio 6.08搭建视觉引导工作站

本文详细介绍了工业相机与ABB机器人通过Socket通信实现视觉引导工作站的实战教程。使用RobotStudio 6.08平台,涵盖工作站搭建、坐标系标定、RAPID代码开发及TCP/IP通信配置,特别解析了欧拉角与四元数转换等关键技术难点,助力智能制造产线升级。

weixin_42531516的博客 411

C++时间复杂度分析

如果想要知道一个程序运行需要花费多少时间,直接运行测试不是更简单更准确吗?何必去花精力推算复杂度!首先,这个想法没问题,确实可以直接跑出来,但这属于马后炮,无法提前预估算法的时间复杂度,而且也非常受限:1、测试结果在不同处理器上运行的结果会有很大波动2、即使在同一环境下运行,不同数据也会导致结果有很大波动所以需要一个不用具体测试就能评估程序执行效率的方法,也就是时间、空间复杂度分析方法。

hls0611的博客 3845

高德地图js api:轨迹在vue项目中的隐藏、显示、清空.hide().show().setData([])

记录一下在使用vue重构项目时,高德地图轨迹使用的问题。 在做项目中,碰到提供给用户radio-box,让用户选择看哪条轨迹,高德地图js api手册只是陈列了方法.hide()以及.show(),但没有仔细介绍如何使用方法,实例中也没有使用。 (调用Amap这里就不讲了) 我在网上搜了很多博客都没有找到如何使用这两种方法,但是手册里写着就觉得肯定可以实现所以不断尝试,最后总结一下写两个简单的例子...

weixin_43823766的博客 5132

从光斑图到锤形优化:一次搞定Zemax双胶合透镜的像散与场曲问题

本文详细解析了Zemax双胶合透镜设计中像散与场曲问题的诊断与优化方法。从光斑图分析到锤形优化技巧,提供了完整的光学设计实战指南,帮助设计师快速定位问题并有效改善系统性能,特别适合光学设计工程师和Zemax使用者参考。

weixin_27134495的博客 235

高德地图--- 会动的小汽车(行动轨迹回放)demo效果(整理)

高德地图--- 会动的小汽车(行动轨迹回放)

在北风吹起的时候加入我们的队伍 在秋雨到来的时候成为彼此的温暖 2190

用户存续期价值评估(CLV) 一

用户存续期价值评估(CLV) 1 一. 定义 ​     用户存续期价值(Customer Lifetime Value),也可称为CLTV、LCV或者LTV,是企业对未来一个客户与其的关系所带来的净收益的预测。这个预测模型可以有不同水平的复杂度和精确度,从一个直观感觉到使用复杂的预测技术。CLV可以被简单理解为客户关系的价值,也就是未来由于与客户的关系所带...

weixin_43171270的博客 8027

从Protocol到硬件控制:揭秘高通UEFI中ABL与XBL的协作机制

本文深入解析了高通UEFI架构中ABL与XBL的协作机制,重点探讨了Protocol通信在硬件控制中的关键作用。通过对比传统GPIO控制方式,揭示了Protocol架构在安全性、可维护性和灵活性方面的优势,并提供了关机充电场景的实战案例分析及调试技巧。

weixin_29185199的博客 431

VUE3+TS+element UI +高德地图实现轨迹回放带进度条

3,使用AMap UI的轨迹巡航器来实现,配合进度条,这样写会有个BUG就是点击开始的时候,直接拖动进度条会报错。记录一下,由于项目需要做车辆的历史轨迹回放,查了很多资料,在高德地图里有这几种解决方案。所用技术:vue3 + TS +element UI plus +高德地图。1,轨迹回放的有两种写法,第一个是初始化加载的时候就把监听事件放进去。2,这是使用的高德地图AMap UI的巡航器。1,这是高德地图提供的轨迹回放demo。2,轨迹回放的第二种写法,比较灵活一点。这是相关的Demo借鉴。

Mr_simoon的博客 5714

解决pd.read_json报错ValueError: Trailing data问题

首先,我们使用open函数打开JSON文件,然后使用json.load函数将JSON文件数据解码为Python对象。在使用Python进行数据处理中,我们经常需要将JSON格式的数据读入到DataFrame中进行处理。而使用pandas库的read_json函数,就可以方便地将JSON数据读入到DataFrame中。但是有时候在读取JSON数据时,会遇到一个非常常见的错误:ValueError: Trailing data。这个错误的解决方案并不难,只需要在read_json中添加一个参数即可。

学习使你进步。 2234

根据经纬度坐标,实现轨迹回放功能

需求描述: 根据数据库中的经纬度坐标,实现车辆的轨迹回放功能。,类似下图 实现思路: 我们可以根据第三方的api 来实现,高德,百度都有这种解决方法。我们使用高德的api 来解决 解决步骤: 高德地图轨迹回放demo 地址:轨迹回放-点标记-示例中心-JS API 2.0 示例 | 高德地图API高德开放平台官网https://lbs.amap.com/demo/jsapi-v2/example/marker/replaying-historical-run...

阿涩的博客 3022

HBase在物流行业的应用:轨迹数据存储

想象一下,每天在全球范围内,数以亿计的物流包裹在各个城市、乡镇间穿梭。每一个包裹从发货人手中出发,经过仓储中心、转运站,最终到达收货人手中,这一路上都留下了它的“足迹”,也就是我们所说的轨迹数据。这些数据就像一个个拼图碎片,完整拼接起来后,能够清晰地呈现出整个物流网络的运行状况。例如,你在网上购买了一件心仪已久的商品,迫不及待地想知道它现在到哪儿了。物流平台实时更新的轨迹信息,让你可以准确了解包裹是在运输途中,还是已经到达附近的站点。

架构师的AI之路,分享AI应用开发架构的学习与实践。 966

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Vue-amap高德地图+ElementUI的slider组件实现车辆轨迹拖动和回放

交通行业,轨迹回放是过不去的坎,算是基本功能。本文讲述通过查询车辆某一时间段的Gps数据,将不同状态的路段绘制在高德地图上,并通过slider滑块拖动轨迹,并且marker能沿轨迹行走,本文可算是个人开发过程的记录笔记,并非基础教程,不负责解答。 由于本人也刚接触Vue没多久,本来有同事在其他项目实现类似的功能,但封装太多功能复杂,看起来费劲,于是自己花了两三天时间研究了下,好在vue-amap兼容高德地图原生sdk,所以我感觉基本上是用JavaScript的方式实现轨迹回放。 先放效果图吧 1、

m0_58397838的博客 5653

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

高德地图单点、多点标记,轨迹绘制,自定义标记覆盖物,给标记添加点击事件,移除所有标记和轨迹,轨迹回放功能

文档地址 https://lbs.amap.com/api/javascript-api/guide/abc/prepare 注册 到官网注册一下就可以了https://lbs.amap.com/并创建应用拿到key值 项目引入 <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的key值" ></script> 初始化 <t.

九段刀客的博客 4639

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

百度地图显示车辆运行轨迹(静态)

jspopular | 百度地图API SDK2、实现效果图如下:首先说明一下,这个功能主要是完成后台在地图上图层显示车辆的运行轨迹(线),一般车辆的轨迹可能通过app采集 或 车载终端上传到服务器。

zgphacker2010的专栏 1777

类似滴滴打车,多辆小车在地图上平滑移动的实现,基于百度地图实现(轨迹已画好)

类似滴滴打车,多辆小车在地图上平滑移动的实现,基于百度地图实现

qq_30651537的博客 6084

vue 使用高德JSapi 实现轨迹回放和海量点效果(点击显示详情提示窗口) 采用AMapLoader 和 AMapUI

使用高德Api 结合Vue项目,AMapLoader 和 AMapUI实现轨迹巡航和海量点的效果。 还有实现海量点点击提示信息的效果

AICE1的博客 3929

Netty使用websocket协议实现汽车行驶轨迹追踪demo

一、demo说明 本demo使用netty实现了在网页上实时查看汽车行驶当前位置的功能。当然这里只是一个演示的demo,所有的位置数据都是预先在百度地图上采集好保存在服务端的。代码参考了《Netty权威指南》。效果如下: 二、流程说明 当打开网页时,创建一个websocket连接到服务端。服务端用一个map来保存ChannelHandlerContext,key是Channe

2719

高德地图实时轨迹播放或 历史轨迹查看demo

<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"> <titl

wodecc_u的博客 2735

android 百度地图走动轨迹,百度地图实现小车规划路线后平滑移动功能

文章目的项目开发所需,所以结合百度地图提供的小车平滑轨迹移动,自己写的demo实现效果代码下载下面是实现的关键步骤集成百度地图怎么集成自然是看百度地图开发平台提供的文档。规划线路看百度地图的文档,写一个规划线路的工具类(驾车的)package com.wzhx.car_smooth_move_demo.utils;import android.util.log;import com.baidu.m...

weixin_33610261的博客 847
上一篇: 高德地图实现矩形围栏绘制和编辑
下一篇: 安装基于Vue-cli脚手架的Vue项目
小简GoGo
博客等级 码龄10年 50粉丝 32原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值