【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