基于Qt实现百度地图路径规划功能

news/2025/10/16 16:04:09/文章来源:https://www.cnblogs.com/wiwi1313/p/19145906

一、环境配置

1. 项目依赖

// .pro文件配置
QT += webenginewidgets webchannel
LIBS += -lQt5WebEngineCore -lQt5WebChannel

2. 百度地图API配置

<!-- map.html -->
<script src="http://api.map.baidu.com/api?type=webgl&v=3.0&ak=YOUR_API_KEY"></script>
<script src="qwebchannel.js"></script>

二、核心代码实现

1. Qt端界面设计

// mainwindow.h
class MainWindow : public QMainWindow {Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);private slots:void onPlanRoute();void handleRouteResult(const QString &points);private:QWebEngineView *m_webView;QWebChannel *m_channel;
};

2. 地图初始化

// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {m_webView = new QWebEngineView(this);m_channel = new QWebChannel(this);// 设置通信对象m_channel->registerObject("mapBridge", this);m_webView->page()->setWebChannel(m_channel);// 加载地图页面m_webView->setUrl(QUrl("qrc:/map/map.html"));setCentralWidget(m_webView);
}// 地图控件初始化
void initMap() {QString js = R"(var map = new BMapGL.Map("container");map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 14);map.enableScrollWheelZoom(true);// 注册Qt回调new QWebChannel(qt.webChannelTransport, function(channel) {window.qtBridge = channel.objects.mapBridge;});)";m_webView->page()->runJavaScript(js);
}

3. 路径规划实现

// 路径规划请求
void MainWindow::onPlanRoute() {QString startLng = ui->startLng->text();QString startLat = ui->startLat->text();QString endLng = ui->endLng->text();QString endLat = ui->endLat->text();QString js = QString(R"(var driving = new BMapGL.DrivingRoute(map, {renderOptions: { map: map, autoViewport: true }});driving.search(new BMapGL.Point(%1, %2), new BMapGL.Point(%3, %4));driving.setSearchCompleteCallback(function(results) {if (driving.getStatus() == BMAP_STATUS_SUCCESS) {var points = [];var route = results.getPlan(0).getRoute(0);for(var i=0; i<route.getNumSteps(); i++) {points.push(route.getStep(i).getPath());}qtBridge.handleRouteResult(JSON.stringify(points));}});)").arg(startLng).arg(startLat).arg(endLng).arg(endLat);m_webView->page()->runJavaScript(js);
}// 处理路径结果
void MainWindow::handleRouteResult(const QString &points) {QJsonDocument doc = QJsonDocument::fromJson(points.toUtf8());QJsonArray pathPoints = doc.array();QPainterPath path;for(auto point : pathPoints) {QPointF p = point.toObject()["lng"].toDouble(), point.toObject()["lat"].toDouble());path.lineTo(p);}// 在地图上绘制路径QString drawJs = QString("addPolyline(%1)").arg(path.toString());m_webView->page()->runJavaScript(drawJs);
}

三、JavaScript交互层

1. 路径绘制函数

// map.html
function addPolyline(points) {var path = [];points.forEach(function(p) {path.push(new BMapGL.Point(p.lng, p.lat));});var polyline = new BMapGL.Polyline(path, {strokeColor: "#FF0000",strokeWeight: 5,strokeOpacity: 0.8});map.addOverlay(polyline);
}

2. 坐标转换接口

// 实现WGS84转BD09坐标
function convertCoords(lng, lat) {var point = new BMapGL.Point(lng, lat);return BMapGL.convertor.translate(point, 1);
}

四、界面布局示例

<!-- mainwindow.ui -->
<widget class="QMainWindow" name="MainWindow"><layout class="QGridLayout"><item row="0" column="0"><QLineEdit placeholderText="起点经度"/></item><item row="0" column="1"><QLineEdit placeholderText="起点纬度"/></item><item row="1" column="0"><QLineEdit placeholderText="终点经度"/></item><item row="1" column="1"><QLineEdit placeholderText="终点纬度"/></item><item row="2" column="0" colspan="2"><QPushButton text="规划路径" clicked="onPlanRoute"/></item></layout>
</widget>

五、关键调试技巧

  1. 坐标验证

    console.log("起点坐标:", new BMapGL.Point(116.404, 39.915));
    
  2. 路径可视化调试

    map.addOverlay(new BMapGL.Marker(new BMapGL.Point(116.404, 39.915)));
    
  3. 网络请求监控

    connect(m_webView->page(), &QWebEnginePage::networkRequestFinished,[](QNetworkReply* reply){qDebug() << "请求状态:" << reply->url() << reply->error();});
    

六、扩展功能实现

1. 实时路径更新

// 定时刷新路径
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=]{m_webView->page()->runJavaScript("updatePath()");
});
timer->start(1000);

2. 路径优化算法

// 道路平滑处理
QString smoothJs = R"(var points = [];for(var i=0; i<path.length-1; i++) {var p1 = path[i], p2=path[i+1];for(var t=0; t<=10; t++) {var x = p1.lng + (p2.lng-p1.lng)*t/10;var y = p1.lat + (p2.lat-p1.lat)*t/10;points.push(new BMapGL.Point(x, y));}}return points;
)";

参考代码 基于QT的百度地图开发。实现简单的路径规划功能 www.youwenfan.com/contentcnj/69896.html

七、完整工程结构

MapApp/
├── Src/
│   ├── main.cpp
│   ├── mainwindow.cpp
│   └── mapengine.cpp
├── Res/
│   ├── html/
│   │   ├── map.html
│   │   └── qwebchannel.js
│   └── styles/
├── CMakeLists.txt
└── .pro

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求职,从大一开始

分类 凡事预则立,不预则废。 仕途:强烈的社会责任感,不求大富大贵,只求工作稳定,生活舒适的人。 学术:稳定,深厚的学术功底,严谨的治学态度。 如果想毕业后从事学术研究,在大学里讲讲课,做做学问,或者从事科…

基于C#的湿度上位机实现方案

基于C#的湿度上位机实现方案,包含实时曲线显示、数据存储和报警功能一、系统架构 graph TDA[传感器数据] --> B[串口通信模块]B --> C[数据处理中心]C --> D[实时显示模块]C --> E[历史存储模块]C -->…

2025 年珠澳宠物托运公司联系方式推荐:爱宠国际,港澳内地宠物运输的安全专业之选

随着宠物经济的持续升温,宠物已成为家庭重要成员,跨区域宠物运输需求显著增长。尤其是港澳与内地间,因工作调动、移民定居等产生的宠物托运需求逐年攀升。但宠物托运涉及检疫申报、通关核验等多重流程,且宠物在运输…

男人要懂心理学

恋爱中的心理学 1、大方,绅士,自信。 2、女人都会口是心非,甜言蜜语,欣赏谎言。 3、恋爱成功:流露出爱意,欣赏优点,小礼物。 4、追求女人:学会观察,有分寸的赞美她,适当表现出男子汉形象(直率,爽朗,刚毅,果…

斩获双项第一,天翼云问鼎中国医学影像云解决方案市场!

报告显示,中国电信天翼云凭借领先的技术能力和全面的服务生态,位列中国医学影像云解决方案市场第一,市场份额占比7.5%,在中国医学影像云解决方案云服务子市场中,其竞争力进一步凸显,以高达23.4%的市场份额,稳居…

2025 年铝单板厂家最新推荐榜:聚焦西南及全国头部企业,精选 实力品牌助力项目采购

在建筑装饰行业高速发展的当下,铝单板因高强度、耐候性与美观性,成为大型公共建筑、商业综合体、文旅项目的核心装饰材料。但市场乱象频发,部分厂家用再生铝掺混基材,导致产品强度不足、易损坏;部分厂家设备落后,…

proxmox 去除无订阅提示和企业付费仓库,解决apt 安装问题

#!/bin/bashecho "🔧 开始修复 Proxmox 软件源和 UI 无订阅提示..."# 注释企业版主源 PVE_ENT="/etc/apt/sources.list.d/pve-enterprise.list" if [ -f "$PVE_ENT" ]; thenecho &quo…

2025 最新隔音板源头厂家口碑排行榜:涵盖阻尼 / 吸音 / 聚酯纤维等全品类,权威推荐实力品牌

随着建筑声学需求升级,隔音板已成为家装、公装不可或缺的核心材料,但市场乱象却让采购者陷入困境:部分产品隔音量不足行业标准 30%,劣质原材料导致甲醛超标,小厂缺乏定制能力且售后响应滞后。尤其在医疗、文教等高…

vulntarget-b-01

vulntarget-b-01 1、黑客是从哪个端口作为入口点的 通过ls看到文件install.sh安装一个宝塔面板并且这个面板开启了几个端口这里提到端口,我们可以尝试用 ss -tulnp来进行显示监听端口(TCP/UDP)及关联进程来排除除了…

设置 Firefox 在点击书签后在新标签页打开

设置 Firefox 在点击书签后在新标签页打开设置 Firefox 在点击书签后在新标签页打开,可以通过修改浏览器的高级配置参数来实现。下面我给你详细说明操作方法。🔧 修改配置参数主要通过修改 about:config 中的两个参…

C盘满了怎么清理?10种安全释放Win10/Win11空间的方法(详细图文版)

C盘空间不足让电脑变慢、更新失败怎么办?本文详细讲解 C盘满了怎么清理 的 10 种安全方法,涵盖 Win10/Win11 系统,从系统自带“存储感知”、磁盘清理、删除 Windows.old,到关闭休眠、调整虚拟内存与一键清理工具,…

没有运作项目,就不干了?

我接触的大部分人认为:没有运作的项目,不会投标。因为成功几率小嘛,这个判断的出发点是:(1)技术层面只能依靠招标技术要求,可能和实际的需求相差较大;(2)商务层面是完全没有接触过甲方的相关人员,从人性的角…

adobe illustrator中选中对象后按方向键无法移动对象

001、打开AI,选择视图,去掉对齐像素、对齐点的选择,重新选择对齐网格: 002、测试方向键移动; 或者按shift同时按方向键移动。

元素周期表

元素周期表元素周期表 https://baike.baidu.com/item/元素周期表/282048网站:http://shibowl.topgithub:https://github.com/hanbinjxnc博客园:https://www.cnblogs.com/hool 博客:https://blog.shibowl.top淘宝店…

2025 防爆接线盒/防爆穿线盒/防爆接电箱厂家精选榜:安全与专业并存的行业之选

在石油、化工、矿山等易燃易爆的工业场景中,防爆接线盒作为电气系统的 “安全屏障”,其产品性能直接关系到生产作业的安全底线。基于产品合规性、市场应用反馈及综合服务能力,本文梳理出五家值得关注的防爆接线盒制…

7M参数,干翻巨无霸LLM!这款超小递归模型(TRM),在ARC-AGI上证明了“少即是多”

TRM仅使用一个超小的2层网络(7M参数),通过更直接、完整的递归和深度监督机制,在多个基准测试上显著超越了HRM和许多主流LLMs。其最引人注目的成果是在ARC-AGI-1上达到45%的测试准确率,超过了参数量是其数百万倍的…

如何获取百度地图API的密钥以及调用百度地图api

原文链接:https://jingyan.baidu.com/article/4b52d702902cb5fc5c774b38.html

神器 iotdebug

https://iotdebug.com/

2025 护眼灯生产厂家最新推荐榜:精选资深与新锐品牌,深度解析生产实力与市场口碑

当下电子设备全面渗透生活,国人日均用眼时长突破 8 小时,护眼灯成为家庭、校园及办公场景的刚需产品,市场规模年增速超 20%。但行业繁荣背后乱象频发:部分商家炒作 “伪护眼” 概念,产品蓝光危害超标、频闪严重,…

【IEEE出版|快至3-4个月EI检索】第五届电力系统与能源互联网国际学术会议(PoSEI 2025)

第五届电力系统与能源互联网国际学术会议(PoSEI 2025)将于2025年11月7日-9日在中国常德召开。能源互联网是将系统性思维和数字化技术与能源生产、传输、存储、消费以及能源市场深度融合的新型生态化能源系统,以可再…