一、前言说明

这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearoverlay的方法,也不会去释放,不知道是地图js没有处理好还是。第二个版本是先按需生成曲线对象,每次轨迹点更新后,就调用polyline对应的setpath方法去设置新的路径,这样如果只有一条路径,则只有一个折线对象,每次都是更新他的路径就好。最后不需要的时候再去删除这个折线就好,怎大大提升了效率,减轻了频繁分配内存的压力。

按照上面的方法基本可用了,那是不是就到此为止了呢?肯定不是的,你会发现现在的方法,可以移动,但是移动起来很僵硬不连贯不平滑,需要两个点的间隔很密集才看起来不僵硬,那怎么行呢,如果用户提供的只有两个点的直线呢,突然跳跃一下子就抛到了终点,看起来多么的失败。用户希望的是平滑移动而不是跳跃运动,这个时候就需要根据两个点之间再插入点,以便移动的时候是平滑的效果,至于这个插值谁来做,可以自己用算法实现,网上也提供了类似的算法,或者从路书js文件中查看到源码,也可以直接用提供的路书功能去实现。

在对各种地图内核实现平滑移动的过程中,发现百度地图和天地图都是提供了js文件对应的类去实现,而高德地图和腾讯地图是直接将此功能放在标注点marker对象中,调用对应的moveAlong方法即可。这是两种不同的实现策略,各有优缺点。

二、功能特点

  1. 支持多种地图内核,默认采用百度地图,可选高德地图、天地图、腾讯地图等。
  2. 同时支持在线地图和离线地图两种模式,离线地图方便在不联网的场景中使用。
  3. 支持各种地图控件的启用,比如地图导航、地图类型、缩略图、比例尺、全景导航、实时路况、绘图工具、结果面板等。
  4. 支持多种地图功能的动态启用禁用,比如地图拖曳、键盘操作、滚轮缩放、双击放大、连续缩放、地图测距等。
  5. 提供众多js函数接口用于交互,参数极其丰富,能够想到的应用场景需求都有。
  6. 统一的信号槽机制,地图中的结果统一信号发送出去,收到后根据type类型区分。
  7. 支持地图交互,比如鼠标按下获取对应位置的经纬度。单击标注点弹出对应点的信息。
  8. 支持添加标注、删除标注、移动标注、清空标注。
  9. 标注点可以指定图标图片和尺寸,支持gif动图,支持指定以图片中心对齐还是底部中心对齐。可以设置旋转角度,带富文本提示信息。
  10. 标注点事件支持单击发信号通知和自己弹框显示信息。
  11. 提供地址转坐标和坐标转地址接口。
  12. 支持各种图形绘制,包括折线图、多边形、矩形、圆形、弧线等。
  13. 可显示悬浮的绘图工具栏,直接在地图上划线、标注点、矩形、圆形等。
  14. 支持各种区域搜索,比如矩形区域、圆形区域,可以按照关键字匹配将搜索结果显示在地图中。
  15. 可动态添加离线的行政区边界点数据。可以搜索行政区划并获取该区域的边界点数据。数据可以保存到文件以便离线使用。
  16. 支持点聚合功能,多个小标注点合并到一个大标注点,防止点密集导致交互不友好。
  17. 可以添加海量点,每个点都可以单击获取对应坐标和信息。
  18. 所有的覆盖物信息比如标注点、矩形、多边形、折线图等,都可以主动获取对应的信息比如坐标点和路径等。
  19. 支持路径规划,支持公交路线、自驾路线、步行路线、骑行路线,不同查询支持不同策略,可选最少时间、最少换乘、不走高架等。
  20. 路径规划结果可以显示在地图中,也可以获取到路径点坐标集合。这个数据可以保存到文件,以便发给机器人或者无人机做导航用来轨迹移动。
  21. 可以设置不同的地图视图比如街道图、卫星图、混合图。
  22. 可以设置不同的样式,比如午夜蓝、青草绿等样式风格。
  23. 可以设置地图的旋转角度和倾斜角度。
  24. 提供经纬度坐标纠偏转换功能,比如传入的GPS坐标需要转换到百度地图坐标或者高德地图坐标。各种坐标系转换全部离线函数,支持地球坐标系WGS-84、火星坐标系GCJ-02、百度坐标系BD-09之间的互相转换,涵盖了各种地图的坐标系。
  25. 提供动态轨迹点移动功能,按照给定的经纬度坐标集合平滑移动。
  26. 同时支持qwidget和qml,支持编译到安卓系统运行。

三、使用说明

  1. 第一步:选择地图内核,下拉地图内核可以动态切换地图内核。
  2. 第二步:选择移动模式,支持多种移动模式,用来控制是否重新动态绘制当前轨迹进度以及是否循环移动。
  • 重新绘制-单次:标注点移动到哪里,轨迹折线就绘制到哪里,只移动一次就结束。
  • 重新绘制-循环:标注点移动到哪里,轨迹折线就绘制到哪里,移动完成后再次从起始点开始移动。
  • 沿线运动-单次:标注点沿着路径点移动,只移动一次就结束。
  • 沿线运动-循环:标注点沿着路径点移动,移动完成后再次从起始点开始移动。
  • 沿线绘制-单次:标注点沿着路径点移动,同时以不同颜色绘制走过的路径,只移动一次就结束。
  • 沿线绘制-循环:标注点沿着路径点移动,同时以不同颜色绘制走过的路径,移动完成后再次从起始点开始移动。
  1. 第三步:选择移动速度,一般值越大速度越快。
  2. 第四步:选择起始点和结束点坐标,文本框哪个右焦点,则鼠标左侧选点后的值就填在哪个文本框中。
  3. 第五步:单击查询轨迹,查询结果路径中的经纬度坐标集合显示在右上角表格中。
  4. 第六步:筛选数据,这一步可选,不筛选则以最原始的路径点数据进行。
  • 筛选数据是根据设定的点数量,从原始数据中取平均值。数量表示最终筛选后的点数。
  • 比如原始数据总数量是90个,点数填30,表示依次从90个数据中每3个点取一个,这样刚好是30个点。
  • 为了保证数据完整性,第一个点和末位点一定在筛选数据中。也就是按照设定的点数取值后,可能会多出两个数据点。
  • 为什么需要筛选?因为查询出来的轨迹点数量可能很多,比如几千几万个,如果每次移动一个点,这样速度很慢。
  • 实际使用过程中还有一种情况是,无人机或者机器人,下发给他的经纬度坐标点数量有限制,这就也需要筛选数据。
  • 筛选后如果想恢复数据,数量填0重新筛选即可,0表示不筛选直接用原始数据。
  1. 第七步:保存轨迹,这一步可选,可以将当前查询的轨迹点保存到文本文件中,以便提供给轨迹回放模块使用。
  2. 第八步:模拟轨迹,单击模拟轨迹按钮,会按照设定的速度模拟轨迹点移动,按钮字样变成停止模拟,再次单击则停止模拟。
  3. 第九步:轨迹回放,这一步可选,单击轨迹回放按钮,弹出轨迹回放界面。

四、相关链接

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 名称:bin_map.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun

五、效果图

Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图的更多相关文章

  1. Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

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

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

  3. 使用GMap.NET类库,实现地图轨迹回放。(WPF版)

    前言 实现轨迹回放,GMap.NET有对应的类GMapRoute.这个类函数很少,功能有限,只能实现简单的轨迹回放.要实现更复杂的轨迹回放,就需要自己动手了. 本文介绍一种方法,可以实现复杂的轨迹回放 ...

  4. 使用百度地图API实现轨迹回放

    调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...

  5. Google地图轨迹回放模拟

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. iOS 高德地图轨迹回放的 思路, 及方法

    // 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度, 开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法 /** * @brief 将经纬度转换为指定vie ...

  7. 百度地图api设置点的自定义图标不显示

    百度地图api设置点的设置代码为: var myIcon = new BMap.Icon(): 所以首先要找到这行代码,并在括号中加上图片信息: var myIcon = new BMap.Icon( ...

  8. 轨迹系列4——WebGIS中使用ZRender实现轨迹前端动态播放特效

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在地图上以时间轴方式播放人员.车辆在地图上的历史行进 ...

  9. GPS/轨迹追踪、轨迹回放、围栏控制

    折腾一个多月终于弄完了这个项目,起初都未曾接触GPS/轨迹追踪.轨迹回放.圈划围栏...等一些在百度地图或者Googel地图操作的一些业务,后端的业务相对来说简单点 cas单点登录,mongdb灵活的 ...

  10. Windows 8.1——将网站固定到开始菜单,自定义图标、颜色和Windows推送通知

    记得在IE 9和Windows 7刚出来那会儿我写过一篇文章来介绍如何自定义网站将其固定到Windows的任务栏上,同时自定义图标及任务内容.那个功能在IE 9中被称之为JumpList.http:/ ...

随机推荐

  1. SpringBoot进阶教程(八十二)Spring Security图形验证码

    在之前的博文<SpringBoot进阶教程(八十)Spring Security>中,已经介绍了在Spring Security中如何基于formLogin认证.基于HttpBasic认证 ...

  2. 云原生周刊:Linkerd 发布 v2.14 | 2023.9.4

    开源项目推荐 Layerform Layerform 是一个 Terraform 包装器,可帮助工程师使用纯 Terraform 文件构建可重用的基础设施. 为了实现重用,Layerform 引入了层 ...

  3. Ros环境创建相关!超级简单!!超级详细!!

    1.创建工作空间workspace 其中catkin_ws后面的ws是work_space的简写,指代工作空间 <catkin_ws是你的工作空间的名字,随便取> mkdir -p ~/c ...

  4. 模拟器运行环境及Lua代码——使用遗传进化算法(neat算法)玩超级玛丽游戏

    SuperMario_GeneticEvolution_Neat 项目介绍: 模拟器运行环境及Lua代码--使用遗传进化算法(neat算法)玩超级玛丽游戏 代码地址: https://openi.pc ...

  5. .NET 全功能流媒体管理控制接口平台

    前言 视频会议.在线教育.直播娱乐还是远程监控,流媒体平台的性能和稳定性直接影响着用户体验. 给大家推荐一个基于 C# 开发的全功能流媒体管理控制接口平台. 项目介绍 AKStream是一个基于 C# ...

  6. 2-1 C++内置类型

    目录 2.1.1 算术类型(Arithmetic Types) 概览 分类 整型与浮点型 有符号和无符号 存储 单位转换 常见类型的大小 几点说明 选择 2.1.2 类型转换(Type Convers ...

  7. RT-Thread Studio刚新建工程后直接打开main.c编译就board.c里产生报错,解决办法

    如题,RT-Thread Studio刚新建工程后直接打开main.c编译就产生报错. 具体为:刚新建了一个stm32F407ZGT6和一个STM32F103RCT6的工程,之后啥代码也没有改,直接打 ...

  8. 7. jenkins的代码审查

    sonar基本使用 1,sonar安装和配置 SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误.目前 支持java,C#,C/C++,Python,PL/S ...

  9. 使用NTP,该如何同步时间?一文详解!

    ​ 一.NTP通信概述 很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作.但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为 ...

  10. Wgpu图文详解(03)缓冲区Buffer

    在上一篇文章中,我们介绍了Wgpu中的渲染管线与着色器的概念以及基本用法.相信读者还记得,我们在渲染一个三角形的时候,使用了三角形的三个顶点的索引作为了顶点着色器的输入,并根据索引值计算了三个几何顶点 ...