我是靠谱客的博主 热情树叶,最近开发中收集的这篇文章主要介绍linux gpsd中文版,Linux项目实战之:再谈一次GPS数据解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

3c04eab2b301ef4267ddf5dcc40a3080.png

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

#include

#include

#include

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);

}

运行结果如下:

0128c52779e4d567c29916a0e3db8292.png

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

/* sscanf example */

#include

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;

}

运行结果如下:

8dcfd64a47388a5eeb82232f9cb6a352.png

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

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

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

有几点需要注意地方是:

1)本身这个库对于GGA、RMC语句,只支持GP开头的,即GPGGA、GPRMC,无法处理GNGGA、GNRMC语句,我采用的方法是判断如果是GN开头,将GN替换为GP,需要注意的是要重新生成一个校验值更新过去,否则校验不通过。

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

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介绍比较好的网址,这个网址比绝大部分中文网站东抄西抄的内容要好的多。

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

2+

最后

以上就是热情树叶为你收集整理的linux gpsd中文版,Linux项目实战之:再谈一次GPS数据解析的全部内容,希望文章能够帮你解决linux gpsd中文版,Linux项目实战之:再谈一次GPS数据解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部