搞Qt开发这么多年,地图控件一直是个让人头疼的事儿。早年间图省事,直接套个浏览器控件,加载百度高德地图的网页版,简单是简单,可一旦到了无人机地面站、机器人导航这种对实时性和性能要求高的场景,问题就全冒出来了——内存占用大、刷新卡顿、离线环境没法用,嵌入式板子上更是直接歇菜。后来也试过一些现成的方案,要么依赖QML,要么绑死了WebEngine,换个平台就编译不过。客户那边催得紧,说地面站软件要跑在国产操作系统上,无人机航线规划要能离线加载瓦片,机器人系统要能同时显示几百个标注点实时轨迹……现有的轮子,没有一个能完全兜住的。没办法,只能自己从头撸一个。
这个地图控件前前后后打磨了好几年,纯QWidget + QPainter绘制,不依赖任何浏览器组件。底图支持天地图、高德、谷歌、必应等多种瓦片源,在线离线都能跑。最上层是图形绘制层,折线、多边形、矩形、圆形、标注点、热力图,该有的都有。标注点支持轨迹移动和回放,折线支持编辑拖拽,航线规划可以直接在地图上画航线、插航点、调方向,体验上对标奥维地图,该有的功能一个不落。最关键是性能。之前用Web版本显示一百个无人机图标就开始卡,现在这个纯绘制的方案,上千个标注点同时刷新也稳得很,内存占用还小了一大截。跨平台也没问题,Windows、Linux、国产系统、安卓,甚至编译成WASM跑在网页里,都能正常用。
源码是开放的,拿到手可以直接集成到自己的地面站软件、无人机系统、机器人导航平台里,航线规划、电子围栏、实时轨迹回放这些功能都是现成的,改改就能用。说白了,做这个控件也是被需求逼的,但做出来后是真香。如果你也在找一套不依赖浏览器、性能够硬、功能够全、还能二次开发的地图控件,这个应该能入你的眼。
相比于QGIS和QGroundControl有哪些特点
1. 纯QWidget的painter绘制实现,无任何第三方依赖,可移植性超强,在任何Qt可以运行的环境,直接源码编译即可。而QGIS和QGC有大量的第三方库依赖,想要顺利编译跑起来,非常艰难。
2. 轻量级,代码量很少,核心代码1万行左右,而qgis大概130万行,qgc有80万行,对于大部分初学者望而却步,学习难度指数级增长。
3. 接口友好,按照地图厂家标准函数接口提供对应的交互函数,涵盖了方方面面的各种场景,使用的易用性做到一级棒。
4. 不追求大而全,只追求易用和性能,持续迭代更新。


