Qt - 读取GPS数据

2023-05-16

1.GPS型号为ublox(EVK-M8L),配有USB接口,Qt版本5.7

2.实现步骤:

(1)实现串口通信

  采用Qt5.7 内置的串口操作类QSerialPort和QSerialPortInfo,通过QSerialPortInfo提供的函数availablePorts(),可枚举出当前计算机中可用的com口。使用该类需在pro文件中添加:

QT += serialport

(2)筛选感兴趣的信号,解析

  GPRMC数据包基本上包含经纬度、航向角、时间等常用的信号。

3.效果图

4.源码

4.1 头文件

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QSerialPort>
 6 #include <QSerialPortInfo>
 7 
 8 namespace Ui {
 9 class MainWindow;
10 }
11 
12 class MainWindow : public QMainWindow
13 {
14     Q_OBJECT
15 
16 public:
17     explicit MainWindow(QWidget *parent = 0);
18     ~MainWindow();
19 
20 public:
21  QSerialPort serial;//串口实例
22  void initSeialPort();//初始化串口函数
23 private:
24     void gpsParse(QByteArray GPSBuffer);//gps解析函数
25 
26 
27 private slots:
28     void serialRead();
29 
30     void on_connectBtn_clicked();
31 
32     void on_closeBtn_clicked();
33 
34 private:
35     Ui::MainWindow *ui;
36 };
37 
38 #endif // MAINWINDOW_H

4.2实现文件

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 #include<QDebug>
  4 #include <QList>
  5 
  6 MainWindow::MainWindow(QWidget *parent) :
  7     QMainWindow(parent),
  8     ui(new Ui::MainWindow)
  9 {
 10     ui->setupUi(this);
 11     QStringList strBaud;
 12     strBaud<<"4800"<<"9600"<<"115200";
 13     ui->baudcomboBox->addItems(strBaud);
 14 
 15     initSeialPort();
 16 }
 17 
 18 MainWindow::~MainWindow()
 19 {
 20     delete ui;
 21 }
 22 
 23 void MainWindow::initSeialPort()
 24 {
 25     connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead()));   //连接槽
 26 
 27     //获取计算机上所有可用串口并添加到comboBox中
 28     QList<QSerialPortInfo>  infos = QSerialPortInfo::availablePorts();
 29     if(infos.isEmpty())
 30     {
 31         ui->portcomboBox->addItem("无串口");
 32         return;
 33     }
 34     foreach (QSerialPortInfo info, infos) {
 35         ui->portcomboBox->addItem(info.portName());
 36         qDebug() << info.portName();
 37     }
 38 
 39 }
 40 
 41 
 42 void MainWindow::serialRead()
 43 {
 44     QByteArray qa = serial.readAll();
 45 
 46     ui->textEdit->append(qa);
 47 
 48      gpsParse(qa);
 49 
 50      ui->statusLabel->setText("读取中...");
 51 }
 52 
 53 void MainWindow::gpsParse(QByteArray GPSBuffer)
 54 {
 55 
 56  //    qDebug()<<GPSBuffer.size();
 57 
 58     if(GPSBuffer.contains("$GNRMC") )
 59     {
 60 
 61         QList<QByteArray> gpsByteArrays = GPSBuffer.split(',');
 62         int count = gpsByteArrays.count();
 63 
 64     int  gpsLat_1 = static_cast<int>(gpsByteArrays.at(3).toDouble()/100);
 65     double gpsLat_2 = (gpsByteArrays.at(3).toDouble() - gpsLat_1 * 100)/60;
 66     double gpslat=gpsLat_1 + gpsLat_2;
 67 
 68     int gpsLong_1 = static_cast<int>(gpsByteArrays.at(5).toDouble()/100);
 69     double gpsLong_2 = (gpsByteArrays.at(5).toDouble()-gpsLong_1 * 100)/60;
 70     double gpsLong = gpsLong_1 + gpsLong_2;
 71     
 72     ui->timelineEdit->setText(gpsByteArrays.at(1));
 73     ui->latlineEdit->setText(QString::number(gpslat,'g',9));
 74     ui->longlineEdit->setText(QString::number(gpsLong,'g',10));
 75 
 76     if(!gpsByteArrays.at(8).isEmpty())
 77         ui->headlineEdit->setText(gpsByteArrays.at(8));
 78 
 79 
 80     }
 81 }
 82 
 83 void MainWindow::on_connectBtn_clicked()
 84 {
 85     QSerialPortInfo info;
 86         QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
 87         int i = 0;
 88         foreach (info, infos) {
 89             if(info.portName() == ui->portcomboBox->currentText()) break;
 90             i++;
 91         }
 92 
 93         if(i != infos.size ()){//can find
 94            ui->statusLabel->setText("串口打开成功");
 95 
 96             serial.close();
 97             serial.setPort(info);
 98             serial.open(QIODevice::ReadWrite);          //读写打开
 99             switch (ui->baudcomboBox->currentIndex()) {
100             case 0:
101                 serial.setBaudRate(QSerialPort::Baud4800);
102                 break;
103             case 1:
104                   serial.setBaudRate(QSerialPort::Baud9600);
105                   qDebug()<<"9600";
106                 break;
107             case 2:
108                   serial.setBaudRate(QSerialPort::Baud115200);
109                   qDebug()<<"115200";
110             default:
111                 break;
112             }
113 
114       //      serial.setBaudRate(QSerialPort::Baud9600);  //波特率
115     //      serial.setDataBits(QSerialPort::Data8);     //数据位
116     //      serial.setParity(QSerialPort::NoParity);    //无奇偶校验
117     //      serial.setStopBits(QSerialPort::OneStop);   //无停止位
118     //      serial.setFlowControl(QSerialPort::NoFlowControl);  //无控制
119         }else{
120             serial.close();
121 
122             ui->statusLabel->setText("串口打开失败");
123         }
124 }
125 
126 void MainWindow::on_closeBtn_clicked()
127 {
128     serial.close();
129     ui->statusLabel->setText("串口断开");
130 }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt - 读取GPS数据 的相关文章

  • Geopy:计算 GPS 航向/方位

    第一次在这里发海报 我正在对桥梁检查 ROV 八旋翼收集的 GPS 数据进行一些数据分析 我们有八旋翼在运行ROS http 20www ros org wiki 使用 3D 扫描激光雷达 立体视觉 INS 和其他一些巧妙的技术 我目前正在
  • 当活动被破坏时,GPS图标不会消失吗?

    作为一个尝试 GPS 东西的 Android 新手 我设法将这段代码组合在一起 它的工作原理就像我期望的那样 除了一件事 GPS 图标永远不会消失 如何让GPS图标在Activity被破坏时消失 我有 locationManager rem
  • 根据 GPS 坐标计算 PNG 地图上的 X 和 Y 位置

    我正在 iPhone 应用程序上实现自定义地图 尺寸为 map width 和 map height 的图像 并尝试在该地图上显示当前用户位置 current long 和 current lat 我有 2 个参考点 具有已知的 GPS 坐
  • Android 手机和模拟器中的mapView不同

    关于应用程序 这是一个简单的应用程序 可以查找用户当前位置 问题 该应用程序在模拟器上运行良好 请参见图片 但在手机中它没有显示MapView 请看图片 请告诉我手机出了什么问题 在手机中 它只下载巨大的 20 MB 数据 但不显示实际地图
  • 如何在 JavaScript 中查找到已知位置的距离

    在浏览器中使用 JavaScript 如何确定从我当前位置到另一个我有纬度和经度的位置的距离 如果您的代码在浏览器中运行 您可以使用 HTML5 地理定位 API window navigator geolocation getCurren
  • 通过js获取WebView中的位置

    我正在尝试创建 WebView 它将通过 js 获取 GPS 本地化 但是当我单击应该显示本地化的按钮时 在android 4 1 1 模拟器 中 错误代码2 无法启动地理定位服务 在 android 4 1 2 phone 中什么也没有发
  • 位置侦听器从服务工作,但不是 IntentService

    我有一个应用程序 我试图定期获取用户位置并将其发送到服务器 我有一项服务附加到AlarmManager每分钟执行一次 用于测试 该服务正确找到用户位置并注销 GPS 坐标 一旦出现 GPS 锁定 我就会取消位置请求并停止服务 当我请求位置更
  • GPS/GIS 计算:根据运动/每小时预测未来位置的算法?

    寻找资源或算法来在导航应用程序中计算以下内容 如果我当前的 GPS 位置为 0 0 并且我以 15 英里 小时的速度前进 32 度 我如何计算 10 秒后我的位置 i e GPSCoordinate predictedCoord GPSCo
  • 如何测试GPS状态?

    我现在创建一个应用程序来通过 GPS 检测设备的位置 我对 GPS 状态有疑问 我查看 GpsStatus Listener 但它很复杂 因为我是 Android 新手 这是我尝试对 GPS 状态执行的操作 我是否走在正确的轨道上 fina
  • 如何在 Android 中找到附近的应用程序用户?

    我正在制作一个应用程序 需要能够找到附近的人 他们是我的应用程序的用户 我看了很多类似问题的答案 似乎我别无选择 只能不断将用户的当前位置上传到服务器 并在必要时获取附近的用户列表 那么我的问题是 1 要获取附近的列表 应该有一些计算距离的
  • Java中的多点三边测量算法

    我正在尝试在我的 Android 应用程序中实现三边测量算法来确定用户的室内位置 我正在使用超宽带信标来获取到固定点的距离 我能够采用中建议的方法三边测量法 Android Java https stackoverflow com ques
  • GMSPolyline 非常大的内存峰值

    在允许用户在各种不同类型的地图上显示我们称之为轨迹的复杂位置点列表的 GPS 应用程序中 每个轨迹可以包含 2k 到 10k 个位置点 当轨迹在非 Google 地图类型上呈现时 它们会被大量剪切 修剪和路径简化 这是为了降低内存使用量并提
  • GPS 坐标(以度为单位)来计算距离

    在iPhone上 我以十进制度数获取用户的位置 例如 纬度39 470920和经度 0 373192 也就是A点 我需要用另一个 GPS 坐标 同样以十进制表示 B 点创建一条线 然后 计算从 A 到 B 的线与另一个点 C 之间的距离 垂
  • 如何使用卡尔曼滤波器预测测量之间的 GPS 位置

    我研究了OpenCV卡尔曼滤波器的实现 并做了一些基本的鼠标指针模拟并了解了基础 我似乎错过了在我的应用程序中使用它的一些关键点 并希望这里有人可以提供一个小例子 使用具有速度和位置的简单模型 KF statePre at
  • Android 应用无法获取位置权限

    我的清单中有以下内容
  • 如何将timestamp_t转换为实际时间?

    我见过很多使用 time t 的例子 但 timestamp t 让我感到困惑 我正在做一个作业 我们需要打印出 GPS 数据 并且 GPS 设备返回一个类型 timestamp t 来表示它的时间戳和纪元时间 我尝试过使用 gmtime
  • 在没有互联网的情况下使用 Javascript 获取 GPS 位置 [重复]

    这个问题在这里已经有答案了 您好 如果设备具有 GPS 硬件 我们可以在没有互联网连接的情况下使用 JavaScript 获取 GPS 位置吗 请注意谁将其标记为重复 我需要 JavaScript 在没有互联网连接的情况下工作 并使用 GP
  • 如何知道jar文件是否已经在运行?

    经过谷歌研究后 我找到了很好的答案 例如 1 using jps or jps l让 jars 在 JVM 下运行 这个答案可以 但是如果用户根本没有安装java并且我使用例如 bat文件和带有java JRE的文件夹运行我的jar 另外
  • LocationManager requestLocationUpdates minTime OR minDistance

    我用的是安卓系统LocationManager及其方法requestLocationUpdates像这样 locationManager requestLocationUpdates LocationManager GPS PROVIDER
  • 使用 Google 电子表格中的脚本从手机获取我的当前位置

    有没有办法使用 Google Apps 脚本从手机的 GPS 数据中获取我的当前位置 纬度和经度 最好是十进制形式 另外 是否可以打开和关闭 GPS 或者至少检测它是否打开或关闭 这是我尝试做的 我带着电动助力车去一些地方 在每个地方我都会

随机推荐

  • ROS学习笔记3:ROS架构(了解)

    笔记3不涉及实际操作 xff0c 主要是用自己的语言和思路简略整理了 ROS机器人开发实践 一书第2章内容 第一次看这一章的内容会有不知道在讲什么的感觉 xff0c 但这一章的内容确实对后续实践操作章节的理解有非常大的帮助 一 ROS架构
  • SLAM学习笔记2:SLAM的数学表述

    1 SLAM问题 xff1a 在了解了SLAM中各个模块的组成和主要功能后 xff0c 我们将上升到理性层次 xff0c 用数学语言来描述SLAM过程 现在假设由无人车搭载传感器 对于传感器来说 xff0c 虽然它的运动是时间连续的 xff
  • ROS学习笔记10:TF坐标变换(ROS常用组件)

    前言 xff1a 机器人本体和机器人的工作环境中往往存在大量的组件元素 xff0c 在机器人设计和应用中会涉及不同组件的位置和姿态 xff0c 这就需要引入坐标系和坐标变换的概念 一 机器人中空间描述和变换 xff1a 1 位置描述 xff
  • ROS学习笔记11:launch启动文件(ROS常用组件)

    一 launch启动文件介绍 xff1a 上节的海龟跟随实验 xff0c 输入的指令比较繁杂 xff0c 很容易输错命令 对于这种多节点任务 xff0c 可以使用启动文件 启动文件是ROS中一种可以通过xml文件 xff0c 同时启动多个节
  • 学习ARM架构,系统移植和驱动开发总结

    本次结束了对ARM架构 xff0c 系统移植和驱动开发的学习 xff0c 它们都是属于底层 xff0c 难度想对都比较的难一点 xff0c 但先学习arm架构之后去学习系统移植和驱动开发 xff0c 会使自己对系统移植和驱动开发容易理解点
  • Robocup2D环境搭配以及安装(Ubuntu18.04)

    个人是看过很多安装教程并且在一次次实验成 xfeff 功后得出的成果 xff1a 首先 xff0c 在gitee网站下载安装所需的文件夹 xfeff gitee网站下载zip压缩包 其次 xff0c 进行依赖库的安装 终端输入 sudo a
  • 树莓派配置网络实现ssh登录

    上面一篇文章我实现了串口方式访问树莓派 xff0c 可以实现树莓派开发 xff0c 但每次都需要接线 xff0c 比较麻烦所以我们可以对树莓派进行配置让他可以用IP地址登录 1 配置树莓派接入网络 sudo nano etc wpa sup
  • 字符串查找函数strstr

    前言 xff1a 本章我们将学习如何用strstr函数在字符串中查找是否存在指定的字符串 strstr 功能 xff1a 在一个字符串中查找是否存在指定的字符串 xff08 定位子字符串 xff09 cplusplus介绍如下 xff1a
  • Module not found: Error: Can‘t resolve ‘querystring‘ in ‘xxxxxxxxx‘

    解决办法 request js里面 import qs from 34 querystring 34 改为import qs from 34 qs 34
  • 【C语言】初学者写基础代码的基本步骤

    一 写代码 xff08 底阿妈 xff09 步骤 xff1a 1 创建一个项目 2 创建一个源文件 什么是源文件 xff1a xxxx c c开头的叫源文件 xxxx h h开头的叫头文件 3 写代码 xff08 底阿妈 xff09 one
  • ROS新手学习路线

    希望这些信息能够帮助你学习ROS 如果你有任何其他问题 xff0c 请随时告诉我 安装ROS 首先 xff0c 你需要在你的计算机上安装ROS 请参阅官方文档中的 安装 章节 xff0c 了解如何在你的系统上安装ROS xff1a http
  • JAVA学习心得体会

    这周是考试结束第一周 xff0c 刚开始继续学习JAVA时 xff0c 短时间不学习就感觉遗忘了许多有关JAVA的知识 xff0c 所以及时的复习所学内容是真的很重要 通过学长学姐的介绍 xff0c 我发现Typora记笔记是真的很方便 x
  • Ubuntu18.04在ROS下利用realsenseD435i相机实时运行ORB-SLAM2

    1 安装realsenseD435i的SDK Librealsense 可以参照这位博主 6条消息 Ubuntu18 04 43 ROS melodic 安装使用 InterRealSenseD435i SDK2和RealSense ROS
  • opencv-python识别魔方特定颜色方块,并输出各方块中心坐标

    先叠个甲 xff08 作者寒假才开始自学opencv xff0c 做题练手 xff0c 还不是很熟练 xff0c 如果有不正确或者有更好的方法 xff0c 欢迎在评论区指出 xff09 题目 xff1a 从网上寻找任一魔方图片 xff0c
  • Git教程学习笔记及VScode中Git使用

    文章目录 前言1 配置git2 创建版本库3 版本回退4 工作区和暂存区5 添加远程仓库6 分支管理处理bug分支多人协作 7 标签管理8 自定义git9 VScode中的Git使用 前言 欢迎通过我的个人博客看本篇文章https sunm
  • Qt的基本数据类型

    1 1 基本数据类型 qint8 signed charqint16 signed shortqint32 signed intqint64 long long int int64 on Windows qreal doublequint8
  • Qt——Javascript/Qt交互、脚本化

    Qt提供了对Javascript的良好支持 如果查阅过文档你就知道Qt有两个不同的Js封装引擎 xff1a QScriptEngine QJSEngine QScriptEngine出现的比较早 xff08 自Qt4 3始 xff09 xf
  • QT自绘标题和边框

    在QT中如果想要自绘标题和边框 xff0c 一般步骤是 xff1a 1 xff09 在创建窗口前设置Qt FramelessWindowHint标志 xff0c 设置该标志后会创建一个无标题 无边框的窗口 2 xff09 在客户区域的顶部创
  • Qt:QSqlQuery

    0 说明 QSqlQuery提供了执行SQL代码的方法 QSqlQuery封装了在QSqlDatabase中查询 检索数据的相关函数 它可以用来执行如SELECT INSERT UPDATE DELETE等方法 xff0c 也可以执行如CR
  • Qt - 读取GPS数据

    1 GPS型号为ublox xff08 EVK M8L xff09 xff0c 配有USB接口 xff0c Qt版本5 7 2 实现步骤 xff1a 1 实现串口通信 采用Qt5 7 内置的串口操作类QSerialPort和QSerialP