【QT–使用百度地图API显示地图并绘制路线】
QT–使用百度地图API显示地图并绘制路线
- 前言
- 准备工作
-
- 申请百度地图密钥(AK)
- 安装开发环境
- 开发过程
-
- 新建项目
- ui界面
- GPSManager类
- 主窗口
- Map
- 效果展示
前言
先吐槽一下下,本身qt学的就不咋滴,谁想到第一件事就是让写一个上位机工具,根据CAN总线传来的位置信息,在地图上去绘制路线,并获取当前路段的限速信息等。当听到这个需求的时候,第一时间是有点懵逼的。自己原本是没接触过这方面的知识,而且qt学的也特别的垃圾,但是以我的性格还是答应了下来。最终也是花了几天的时间做了出来。通过做这个简单的小工具,自己也学到了还能多。接下来我就简单说一说如何使用百度地图API来显示地图并根据位置信息绘制路线这一功能。其他的就不方便说了。
准备工作
申请百度地图密钥(AK)
在使用百度地图之前,我们需要拥有一个自己的百度账号,申请注册成为百度开发者,然后我们需要创建一个浏览器端应用,就可以获取到一个唯一的服务秘钥(AK)
具体的步骤小伙伴们可以去看一些其他博主的文章,这里我就不详细的去说了。
安装开发环境
说到开发环境,这里我踩了很多的坑啊,这里我来强调一下。
首先我的qt版本是5.14.2,在安装QT的时候一定把MSVC2017给选上!!!不然后面写代码导入模块时会出错的。
还有就是一定要安装一个Visual Studio 2017,因为我QT上是MSVC2017,所以这里我安装的是Visual Studio 2017。
如果环境搞得差不多了,就可以进行下面的开发了。
开发过程
新建项目
打开QT新建一个Application,在Kits页面将MSVC2017勾选上,如下图:

新建完成后,打开.pro文件添加如下代码:
QT +=webenginewidgets
重新构建一下项目,如果出现错误,请检查前面的开发环境。
ui界面

其中包括三个QLabel用来显示信息,分别是GPS信息,Speed信息,和绘制情况信息,一个按钮,来触发绘制,还有一个webEngineView,这个需要在Designer下拖拽上去。
GPSManager类
一、gpsmanager.h
#ifndef GPSMANAGER_H
#define GPSMANAGER_H
#include
#include
class GPSManager : public QObject
{
Q_OBJECT
public:
explicit GPSManager(QObject *parent = nullptr);
signals:
void routeDrawn();
void speedLimitReceived(int limit);
void gpsUpdated(double latitude, double longitude);
public slots:
void drawRoute(QWebEnginePage *webPage);
void setGPSLocation(double latitude, double longitude);
public:
int getSpeedLimit(double latitude, double longitude);
private:
double currentLatitude;
double currentLongitude;
};
#endif // GPSMANAGER_H
这个类旨在处理Qt应用程序中与GPS相关的功能。它发射信号以通知应用程序其他部分有关路线绘制、速度限制更新和GPS坐标更改的信息,并提供槽和函数来执行这些操作。
二、gpsmanager.cpp
构造函数:
GPSManager::GPSManager(QObject *parent) : QObject(parent)
{
currentLatitude = 0.0;
currentLongitude = 0.0;
}
这是 GPSManager 类的构造函数。它初始化了 currentLatitude 和 currentLongitude 两个成员变量为0.0。
drawRoute 函数:
void GPSManager::drawRoute(QWebEnginePage *webPage)
{
// 在这里触发在 HTML 页面中编写的 JavaScript 代码来绘制路线
QString javascriptCode = QString("drawNewPoint(%1, %2);").arg(currentLatitude).arg(currentLongitude);
if (webPage) {
// 执行 JavaScript 代码
webPage->runJavaScript(javascriptCode);
qDebug() << javascriptCode << endl;
}
// 获取限速信息并触发信号
int speedLimit = getSpeedLimit(currentLatitude, currentLongitude);
emit speedLimitReceived(speedLimit);
// 触发路线绘制完成的信号
emit routeDrawn();
}
这个函数用于绘制路线。它构建一个包含纬度和经度信息的 JavaScript 代码字符串,然后通过 QWebEnginePage 对象的 runJavaScript 方法在 HTML 页面中执行该代码。接着,它调用 getSpeedLimit 函数获取速度限制信息&#
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/1feb2433f1.html
