前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux项目实战系列之:再谈一次GPS数据解析

Linux项目实战系列之:再谈一次GPS数据解析

作者头像
用户2366192
发布于 2021-05-31 02:48:25
发布于 2021-05-31 02:48:25
1.2K0
举报
文章被收录于专栏:TopSemic嵌入式TopSemic嵌入式

上一篇已经写过GPS解析的话题,今天之所以又写一次,是因为又有了一些的新的内容想和大家分享。

第一个要分享的是,来源于一位微信公众号网友的留言,

在上一篇文章里,我采用的是用strtok函数进行字段分割,该网友建议试试sscanf,sscanf函数不知道大家平时有没有用过,它用来分割并处理一串数据比较方便。看个小例子,

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

char *tokenstring = "first,25.5,second,15";

int result, i;

double fp;

char o[10], f[10], s[10], t[10];

void main()

{

result = sscanf(tokenstring, "%[^','],%[^','],%[^','],%s", o, s, t, f);

fp = atof(s);

i = atoi(f);

printf("%s %lf %s %d", o, fp, t, i);

}

运行结果如下:

所以用这个sscanf来解析NMEA语句也是可以的,类似上述例子的处理方式就可以,有一点和使用strtok函数一样,要注意处理连续逗号的情况,也可以采用先将连续逗号之间插入特殊字符再解析的办法。

咱们再来看一个sscanf函数的使用例子,

/* sscanf example */

#include <stdio.h>

int main ()

{

char sentence []="Rudolph is 12 years old";

char str [20];

int i;

sscanf (sentence,"%s %*s %d",str,&i);

printf ("%s -> %d",str,i);

return 0;

}

运行结果如下:

通过这个例子,可以看到sscanf函数用起来其实是很灵活的,参数中的星号*表示数据是从流 stream 中读取的,但是可以被忽视,即它不存储在对应的参数中。关于sscanf函数详细用法,可参考:http://www.cplusplus.com/reference/cstdio/scanf/

它的第二个参数和scanf函数第二个参数用法一样。

第二个要分享的是,有一个网友建议去了解一下nmealib,官方介绍在:http://nmea.sourceforge.net/ ,源码下载地址在:https://sourceforge.net/projects/nmea/files/latest/download

我之前听说过有GPS相关的开源代码,正好就借机去学习了下,这个库用起来挺简单的,我花了点时间将它应用到了ARM Linux下。

使用过程中有几点需要注意的是:

1) 本身这个库对于GGA、RMC语句,只支持GP开头的,即GPGGA、GPRMC,无法处理GNGGA、GNRMC语句,我采用的方法是将读取到的GN开头的语句替换为GP开头,没有修改库本身的源代码,另外需要注意的是要重新生成一个校验值更新过去,否则校验不通过。

2) 传入解析函数nmea_parse的数组必须是\r\n结尾,否则也无法正常解析。

3) 解析得到的经纬度格式是度分格式,如果需要使用其他格式,自己得再换算一次。

第三个要分享的是,还有一个网友建议去了解minmea,该源码在:https://github.com/kosma/minmea

GitHub上介绍: a lightweight GPS NMEA 0183 parser library in pure C。

它是一个轻量级的库,并且该网友反馈他在单片机实际项目中用的就是这个。

感兴趣的童靴可以自己去研究研究。

我在它的README文件里看到一句话:Good documentation on NMEA is at https://gpsd.gitlab.io/gpsd/NMEA.html ,提到了一个NEMA比较好的网址,这个网址比绝大多数东抄西抄的中文网址内容要好的多。

我们在平时工作写代码的时候,可以多利用一些开源的代码,它会加速我们的进度,同时开源代码中的编程思想、代码实现细节也值得我们学习和参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TopSemic嵌入式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux项目实战系列之:GPS数据解析
在之前一篇文章:嵌入式Linux系列第21篇:应用程序之开篇闲聊 里,当时给自己定了一个小目标,要实现如下功能的小项目:
用户2366192
2021/05/31
1.6K0
嵌入式之GPS
GPS模块属于字符设备,只需要和FL2440开发板的第二个串口连接既可以,然后将GPS测试模块放在室外便可以每隔一段时间向开发板的串口发一个数据包。
心跳包
2020/08/31
2.9K0
C语言实例_解析GPS源数据
GPS(全球定位系统)数据格式常见的是NMEA 0183格式,NMEA 0183格式是一种用于导航设备间传输数据的标准格式,定义了一套规范,使得不同厂商的设备可以通过串行通信接口(常见的是RS-232)进行数据交换。这个标准最初由美国航海电子协会(National Marine Electronics Association,简称NMEA)在1980年推出,并被广泛应用于全球的导航系统。
DS小龙哥
2023/08/21
8670
C语言实例_解析GPS源数据
sscanf,sscanf_s及其相关使用方法「建议收藏」
定义函数 int sscanf (const char *str,const char * format,……..);
全栈程序员站长
2022/07/06
6K0
干货 | 分享一种有趣的数据解析方法
本篇笔记是一篇开发小结,总结GPS数据的接收、解析示例,以实例为基础分享一些思考过程:
用户2366192
2021/07/12
8330
干货 | 分享一种有趣的数据解析方法
GPS数据格式解析「建议收藏」
每行以字符”$”开头,以<CR><LF>为结尾,CR—Carriage Return,LF—Line Feed,表示回车和换行。信息类型有以下几种,如表1,
全栈程序员站长
2022/09/07
7.2K0
strtok()函数详解!
strtok()函数详解! 1.定义 分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。在头文件#include<string.h>中。 2.原型 char *strtok(char s[], const char *delim); 3.说明 (1)当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。 (2)返回值
全栈程序员站长
2022/09/14
1.5K0
GPS数据包格式+数据解析[通俗易懂]
  每个时区跨15°经度。以0°经线为界向东向西各划出7.5°经度,作为0时区。即0时区的经度范围是7.5°W——7.5°E。从7.5°E与7.5°W分别向东、向西每15°经度划分为一个时区,直到东11区和西11区。东11区最东部的经度是172.5°E,由172.5°E——180°之间就是东12区。西11区最西部的经度是172.5°W,由172.5°W——180°之间就是西12区。东、西12区各占经度7.5°,合成一个完整的时区,即全球总共划分为24个时区。东、西12区钟点相同,日期相差1天,因此180°称为理论上的国际日期变更线。   由于地球的自转运动,不同地区有不同的地方时间,为了解决时间混乱的问题,采取了划分时区的办法。每个时区中央经线所在地的地方时间就是这个时区共用的时间,称为区时。在实际应用中各国不完全按照区时来定时间,许多国家制定一个法定时,作为该国统一使用的时间,例如我国使用120°E的地方时间,称为北京时间。
全栈程序员站长
2022/09/07
5.3K0
GPS数据Python解析及地图可视化
本篇文章主要介绍如何使用pynmea2库解析传感器的GPS信号,以及如何使用folium库绘制GPS轨迹图。
活用数据
2020/07/20
9K1
GPS数据Python解析及地图可视化
流动的代码:文件流畅读写的艺术(三)
scanf、fscanf 和 sscanf 是 C 语言中用于输入操作的函数,特别是用于格式化输入。它们属于标准输入/输出库,用于按照指定格式从不同来源读取数据。 以下是它们的基本详情和区别:
用户11029103
2024/03/19
2040
流动的代码:文件流畅读写的艺术(三)
【Linux】进程实践项目 —— 自主shell编写
不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 —— 宫崎骏《千与千寻》
叫我龙翔
2024/04/02
1690
【Linux】进程实践项目 —— 自主shell编写
用于用户输入|的内置库函数scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
鲸落c
2022/12/18
1.8K0
【C语言篇】从字符海洋到整数大陆——atoi 的探险之旅
在编程世界中,数据的存储和展示往往以字符串形式存在,例如从用户输入、文件读取或网络传输中获取的数据。为了对这些数据进行数值计算,我们需要一种可靠的方法将字符串转换为整数。这正是 atoi(ASCII to Integer)函数的用武之地。
熬夜学编程的小王
2024/11/25
1820
c语言基础学习06_函数
============================================================================= 涉及到的知识点有:1、C语言库函数、字符输入函数:gets和fgets、字符输出函数:puts和fputs、 求字符串长度函数strlen、字符串追加函数strcat、字符串有限追加函数strncat、字符串比较函数strcmp、 字符串有限比较函数strcmp、字符串拷贝函数strcpy、字符串有限拷贝函数strncpy、 格式化字符串函数sprintf(输出)、格式化字符串函数sscanf(读取输入)、解析一个字符串、 字符串查找字符函数strchr、字符串查找子串函数strstr、字符串分割函数strtok、 atoi函数、atof函数、atol函数、解析一个字符串的高级应用。 2、函数的定义和声明、函数的形式参数(形参)与实际参数(实参)、函数的返回值类型和返回值、 return函数与exit函数(exit更猛,不受位置限制)、自定义一个函数,实现大小写字母的互相转换功能、 自定义一个函数,实现atoi的功能。 3、函数的递归、递归例子:有n个人排成一队、递归例子:将10进制数转化为二进制数、 递归例子:将10进制数转化为16进制、递归例子:菲波那切数列、递归的优点与缺点。 4、多个源代码文件程序如何编译、头文件的使用、解决预编译时会出现多次函数声明问题。 ============================================================================= C语言库函数
黑泽君
2018/10/11
1.4K0
Linux应用开发-GPS电子围栏设计
GPS电子围栏这个功能是地图的一个扩展技术功能,通过地图经纬度在地图上圈一个范围,在这个范围内进出可以在服务器上进行实时记录,提示警报。现在的共享单车、共享汽车都有这个功能,限制车辆只能在某一个范围内使用,超出后就自动断电或者作出提示。要实现这个地理围栏,就需要实时获取当前的经纬度,然后调用地图SDK接口进行处理,完成围栏逻辑设计。
DS小龙哥
2022/05/11
2.1K0
Linux应用开发-GPS电子围栏设计
c++ 网络编程(十一)TCP/IP LINUX 初步制作基于HTTP的WEB服务器
原文链接:https://www.cnblogs.com/DOMLX/p/9663028.html
徐飞机
2018/09/30
1.9K0
c++ 网络编程(十一)TCP/IP LINUX    初步制作基于HTTP的WEB服务器
STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
完整源码下载: https://download.csdn.net/download/xiaolong1126626497/18245590
DS小龙哥
2022/01/17
2K0
STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
轻松拿捏C语言——【文件操作】
程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows 环境后缀为.exe)
用户11162265
2024/06/14
1100
轻松拿捏C语言——【文件操作】
C语言从入门到实战——文件操作
C语言中的文件操作是通过使用文件指针来实现的。可以使用标准库中的函数来打开、读取、写入和关闭文件。
鲜于言悠
2024/03/20
5110
C语言从入门到实战——文件操作
视音频数据处理入门:UDP-RTP协议解析「建议收藏」
=====================================================
全栈程序员站长
2022/09/13
1.7K0
视音频数据处理入门:UDP-RTP协议解析「建议收藏」
推荐阅读
相关推荐
Linux项目实战系列之:GPS数据解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档