门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
账号
自动登录
找回密码
密码
登录
立即注册
请绘制轨迹完成人机验证
由vaptcha提供技术支持
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
开放区(网友自由发帖区)
›
文章教程
›
Qt/C++地图最简示例/在线离线切换/地图视图切换/执行各 ...
发布主题
返回列表
Qt/C++地图最简示例/在线离线切换/地图视图切换/执行各种js...
0
回复
253
查看
[复制链接]
liudianwu
当前离线
积分
2956
liudianwu
累计签到:7 天
连续签到:1 天
来源: 原创
2025-12-2 11:03:16
显示全部楼层
|
阅读模式
## 一、前言说明
为什么要搞个最简示例?因为整个地图组件的功能非常多,就算tab选项卡都开了好多个,还是全部演示不完全,何况还有各种结合实例,而很多用户,其实希望提供一个最简示例,几行代码,直接先跑起来,然后一步步慢慢来尝试其他的功能。编译跑起来永远都是第一步,这一步成了以后就是水到渠成的事情,如果第一步都没跑起来,那打击很大,没有继续下去的勇气。无论是二开还是开源的项目,跑起来极其重要,一定要保证用户能够有勇气继续下去,很多开源项目就死在这里,搞得焦头烂额就是跑不起来,甚是打击。
本地图组件设计初衷就是为了简单易用,所以只需要几行代码就能跑起来地图组件,先是new一个地图类,参数指定地图内核比如百度地图,然后new一个webview浏览器控件,然后这个浏览器控件放到一个布局中,如果不放布局中则需要指定大小位置,一般建议放到布局中,会自动适应调整大小。
## 二、效果图
## 三、相关代码
```cpp
#include "frmmapdemosimple.h"
#include "ui_frmmapdemosimple.h"
#include "qthelper.h"
#include "maphelper.h"
#include "maputil.h"
#include "webview.h"
frmMapDemoSimple::frmMapDemoSimple(QWidget *parent) : QWidget(parent), ui(new Ui::frmMapDemoSimple)
{
ui->setupUi(this);
this->initForm();
on_btnMapWeb_clicked();
}
frmMapDemoSimple::~frmMapDemoSimple()
{
delete ui;
}
void frmMapDemoSimple::initForm()
{
//设置右侧固定宽度
ui->frameRight->setFixedWidth(AppData::RightWidth - 50);
//实例化浏览器控件并加入到布局
webView = new WebView(this);
webView->setLayout(ui->gridLayout);
//实例化地图类
mapObj = MapHelper::getMapObj(this, AppConfig::MapDemoCore);
//传入网页控件用于执行函数
mapObj->setWebView(webView);
mapObj->setSaveFile(SaveFile);
}
void frmMapDemoSimple::runJs(const QString &js)
{
mapObj->runJs(js);
}
void frmMapDemoSimple:
n_btnMapWeb_clicked()
{
mapType = 0;
mapObj->setMapLocal(false);
mapObj->setZoom(11);
mapObj->load();
}
void frmMapDemoSimple:
n_btnMapLocal_clicked()
{
mapType = 0;
mapObj->setMapLocal(true);
mapObj->setZoom(5);
mapObj->load();
}
void frmMapDemoSimple:
n_btnMapType_clicked()
{
//街道图卫星图切换(0-街道图/1-卫星图/2-混合图)
mapType++;
mapType = (mapType > 2 ? 0 : mapType);
this->runJs(QString("setMapType(%1)").arg(mapType));
}
void frmMapDemoSimple:
n_btnRunJs_clicked()
{
QString js = ui->cboxJs->lineEdit()->text();
this->runJs(js);
}
void frmMapDemoSimple:
n_btnRunJs2_clicked()
{
//具体的js函数参数接口看类中的说明
QString js;
//设置地图级别(值越大放大/越小缩小)
js = "setZoom(9)";
//设置中心点(也可以叫定位)
js = "setCenter('116.475836,40.251114')";
this->runJs(js);
//添加一个标记(北京那边)
js = QString("addMarker('测试点', '%1', '测试点')").arg("116.475836,40.251114");
//最终通过浏览器控件执行
this->runJs(js);
//测距(两个经纬度坐标)
qDebug() << "测距结果: " << MapUtil::getDistance("116.475836,40.251114", "117.475836,41.251114");
}
```
## 四、相关地址
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. 支持多种地图内核,默认采用百度地图,可选高德地图、天地图、腾讯地图、谷歌地图等。
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,支持编译到安卓系统运行。
### 5.2 其他功能
1. 提供离线地图下载模块,可以选择不同的地图内核比如百度地图或者谷歌地图,不同的地图类型比如下载街道图还是卫星图,不同的地图层级,多线程极速下载。
2. 表格行实时显示对应的瓦片下载进度,有下载超时时间,重试次数,每个瓦片下载完成都发送信号通知,参数包括下载用时。
3. 提供省市轮廓图下载模块,自动下载各个地区的轮廓图,保存到脚本文件或者文本文件。
4. 支持手动调整不同区域的轮廓边界,调整后可以主动获取调整后的边界点集合。
5. 提供动态点位示例,手动在地图上选点并添加标注,附带自定义的信息比如速度和时间等。
6. 提供海量点位示例,批量添加标注点、点聚合、海量点。用于测试环境中支持的最大点位性能。
7. 提供动态轨迹示例,在地图上鼠标按下选择起点和终点后,查询路线,获取路径轨迹点,模拟轨迹平滑移动。可以筛选数据将过多的路径点筛选到设定的点数。
8. 提供轨迹回放示例,按照指定的轨迹点列表回放,也可以导入轨迹点数据进行回放。同时支持在街道图、卫星图、混合图中回放轨迹。
9. 提供省市区域地图示例,采用echart组件,同时支持闪烁点图、迁徙图、区域地图、世界地图、仪表盘等。可以设置标题、提示信息、背景颜色、文字颜色、线条颜色、区域颜色等各种颜色。
10. 省市区域地图示例,内置世界地图、全国地图、省份地图、地区地图,可以精确到县,所有地图全部离线使用。可设置城市的名称、值、经纬度集合。
11. 内置通用浏览器组件,同时支持webkit/webengine/miniblink等内核。提供网页控件示例,演示打开网页和本地网页文件。
12. 支持任意Qt版本、任意系统、任意编译器。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
x
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了