首页| 论坛| 消息
主题:不断迭代十几年/终于修成正果/超强悍地图组件/满足各种场景需求/支持天地图百度地图高德地图谷歌地图等
liudianwu发表于 2025-06-20 08:34
## 一、前言说明
这个地图组件前前后后写了十几年,是真没想到,最开始仅仅是搞个简单的百度地图的js交互,能显示个地图和设备点,主要用在视频监控系统上展示摄像头点位,后面慢慢的有个无人机监控系统要用,需要显示无人机的轨迹,于是又加入了轨迹显示的功能,有了轨迹呢又需要轨迹回放,最开始做的在线地图,后面用户实际场景需求还需要支持离线,于是又做了瓦片离线地图下载。以为这就结束了?还差得远呢,随着百度地图和高德地图慢慢的收费了,现在大家都转向国家队的天地图,于是彻底花了半年多时间重构这个地图组件,最大发挥C++的继承多态优势,搞了个地图基类,不同的具体实现采用继承方式,实现具体的函数即可,比如实现具体的添加标注点函数,然后依次实现了天地图、高德地图、腾讯地图、谷歌地图。做完这些地图的支持,以为就万能的了,其实还没有,比如有时候需要杂交,天地图的离线API加上谷歌地图的瓦片,后面又找了个通用的地图js库叫leaflet,也做了支持,这样利用通用的组件加载不同的瓦片地图。
地图组件基础功能都有了,高级功能也慢慢的增加了,那如何提供给用户可以方便快速的用起来,又是个大问题,所以必须给每个功能都要提供对应的调用示例,于是专门写了各种示例代码,随着实际现场的需求增加,又增加了高级绘图功能,专门提供了雷达模拟、航迹回放、轨迹规划等功能,这些都是在基础功能上做的二次开发,专门写了单独的类去实现的。
## 二、效果图

## 三、相关代码
1. 将core_map(地图组件)/core_webview(浏览器组件)这两个组件目录拷贝到你的项目目录,并在pro中填写引入代码加入到你的项目中。$$PWD/../表示上级目录。
```cpp
include ($$PWD/../core_map/core_map.pri)
include ($$PWD/../core_webview/core_webview.pri)
```
2. 在pro中启用地图内核,比如百度地图内核对应需要在pro文件中增加一行定义DEFINES += baidux,天地图内核对应 DEFINES += tianx。如果是vsqt环境,添加的位置大概在属性-》配置属性-》C/C++-》预处理器。
3. 引入头文件。
```cpp
#include "webview.h"
#include "maphelper.h"
#include "mapobjbase.h"
```
4. 新建一个窗体,上面放一个布局,推荐用表格布局 gridlayout,可以放多个浏览器控件。
5. 实例化浏览器类和地图类。
```cpp
//实例化浏览器控件
WebView *webView = new WebView(this);
//加入到布局
webView->setLayout(ui->gridLayout);
//实例化地图类/参数2表示何种地图内核
MapObjBase *mapObj = MapHelper::getMapObj(this, MapCore_BaiDu);
//传入网页控件用于执行函数
mapObj->setWebView(webView);
//直接加载地图
mapObj->load();
//异步加载地图
//QMetaObject::invokeMethod(mapObj, "load", Qt::QueuedConnection);
```
6. 所有地图相关的函数接口在MapObjBase类中,可以打开mapobjbase.h查看具体说明。
7. 地图中大部分的功能都是通过执行js函数来触发,比如添加标注、添加折线图等。这些必须严格按照提供的js函数名称和参数来执行。对应示例都提供了相关的调用方法。
8. 部分函数接口。
```cpp
QString js;
//设置地图级别(值越大放大/越小缩小)
js = "setZoom(9)";
//街道图卫星图切换(0-街道图/1-卫星图/2-混合图)
js = "setMapType(1)";
//添加一个标记(北京那边)
js = QString("addMarker('测试点', '测试地址', '', '', 100, '%1', 2)").arg("116.475836,40.251114");
//最终通过浏览器控件执行
webView->runJs(js);
```
9. 浏览器组件使用示例。
```cpp
//实例化浏览器控件
WebView *webView = new WebView(this);
//加入到布局
webView->setLayout(ui->verticalLayout);
//打开网址
webView->load("https://www.baidu.com", "", "");
```
## 四、相关地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 文件地址:[https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A](https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A) 提取码:o05q文件名:bin_map.zip
## 五、功能特点
### 5.1 地图功能
1. 支持多种地图内核,默认采用百度地图,可选高德地图、天地图、腾讯地图、谷歌地图等。

浏览大图

浏览大图

浏览大图

浏览大图

浏览大图
下一页 (1/3)
回帖(0):

全部回帖(0)»