标题:Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图
作者:liudianwu
日期:2024-08-12 17:10
内容:
## 一、前言说明
这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearoverlay的方法,也不会去释放,不知道是地图js没有处理好还是。第二个版本是先按需生成曲线对象,每次轨迹点更新后,就调用polyline对应的setpath方法去设置新的路径,这样如果只有一条路径,则只有一个折线对象,每次都是更新他的路径就好。最后不需要的时候再去删除这个折线就好,怎大大提升了效率,减轻了频繁分配内存的压力。
按照上面的方法基本可用了,那是不是就到此为止了呢?肯定不是的,你会发现现在的方法,可以移动,但是移动起来很僵硬不连贯不平滑,需要两个点的间隔很密集才看起来不僵硬,那怎么行呢,如果用户提供的只有两个点的直线呢,突然跳跃一下子就抛到了终点,看起来多么的失败。用户希望的是平滑移动而不是跳跃运动,这个时候就需要根据两个点之间再插入点,以便移动的时候是平滑的效果,至于这个插值谁来做,可以自己用算法实现,网上也提供了类似的算法,或者从路书js文件中查看到源码,也可以直接用提供的路书功能去实现。
在对各种地图内核实现平滑移动的过程中,发现百度地图和天地图都是提供了js文件对应的类去实现,而高德地图和腾讯地图是直接将此功能放在标注点marker对象中,调用对应的moveAlong方法即可。这是两种不同的实现策略,各有优缺点。
## 二、功能特点
1. 支持多种地图内核,默认采用百度地图,可选高德地图、天地图、腾讯地图等。
2. 同时支持在线地图和离线地图两种模式,离线地图方便在不联网的场景中使用。
3. 支持各种地图控件的启用,比如地图导航、地图类型、缩略图、比例尺、全景导航、实时路况、绘图工具、结果面板等。
4. 支持多种地图功能的动态启用禁用,比如地图拖曳、键盘操作、滚轮缩放、双击放大、连续缩放、地图测距等。
5. 提供众多js函数接口用于交互,参数极其丰富,能够想到的应用场景需求都有。
6. 统一的信号槽机制,地图中的结果统一信号发送出去,收到后根据type类型区分。
7. 支持地图交互,比如鼠标按下获取对应位置的经纬度。单击标注点弹出对应点的信息。
8. 支持添加标注、删除标注、移动标注、清空标注。
9. 标注点可以指定图标图片和尺寸,支持gif动图,支持指定以图片中心对齐还是底部中心对齐。可以设置旋转角度,带富文本提示信息。
10. 标注点事件支持单击发 ..