| 查看: 2106 | 回复: 0 | ||
[求助]
帮忙看看这个GPS的数据解析程序
|
|
请教那些弄过GPS的大神, 我想问一下那些解析出来的数据在buf数组里面是怎么存储的, // 例:$GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,,,A*60 这就是解析出来后的数据存在buf int GPS_RMC_Parse(char *line,GPS_INFO *GPS) //解析GPRMC的数据 { uchar ch, status, tmp; float lati_cent_tmp, lati_second_tmp; float long_cent_tmp, long_second_tmp; float speed_tmp; char *buf = line; //一个字符当做一个数组元素?? //line是串口接收的一行数据 ch = buf[5]; status = buf[GetComma(2, buf)]; //GetComma函数作用是计算字符串中逗号的位置 // status = buf[GetComma(2, buf)];等价于status = buf[]; if (ch == 'C') //如果第五个字符是C,($GPRMC) { if (status == 'A') //如果数据有效,则分析 { GPS -> NS = buf[GetComma(4, buf)]; //从Get_Double_Number这个函数似乎又不是直接将一个字符当做一个数组元素 //这些数字都是那个协议里面固定的。 。。。这个又是buf几。。 GPS -> EW = buf[GetComma(6, buf)]; //buf里面的数组元素是怎么排布的。 GPS->latitude = Get_Double_Number(&buf[GetComma(3, buf)]); //Get_Double_Number函数作用是把给定字符串第一个逗号之前的字符转化为双精度型 GPS->longitude = Get_Double_Number(&buf[GetComma( 5, buf)]); //这样不就是只有一个数? GPS->latitude_Degree = (int)GPS->latitude / 100; //分离纬度 lati_cent_tmp = (GPS->latitude - GPS->latitude_Degree * 100); GPS->latitude_Cent = (int)lati_cent_tmp; lati_second_tmp = (lati_cent_tmp - GPS->latitude_Cent) * 60; GPS->latitude_Second = (int)lati_second_tmp; GPS->longitude_Degree = (int)GPS->longitude / 100; //分离经度 long_cent_tmp = (GPS->longitude - GPS->longitude_Degree * 100); GPS->longitude_Cent = (int)long_cent_tmp; long_second_tmp = (long_cent_tmp - GPS->longitude_Cent) * 60; GPS->longitude_Second = (int)long_second_tmp; speed_tmp = Get_Float_Number(&buf[GetComma(7, buf)]); //速度(单位:海里/时) GPS->speed = speed_tmp * 1.85; //1海里=1.85公里 GPS->direction = Get_Float_Number(&buf[GetComma(8, buf)]); //角度 //因为前面六位是固定的,例:GPRMC, 就像是这样。时间可以不用调用 GetComma函数 去算出他在字符串的位置 GPS->D.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); //时间 减‘0’是 转化为十进制。 GPS->D.minute = (buf[9] - '0') * 10 + (buf[10] - '0'); //还是不能理解啊。 GPS->D.second = (buf[11] - '0') * 10 + (buf[12] - '0'); tmp = GetComma(9, buf); //GetComma函数作用是一行数据中 逗号的位置 GPS->D.day = (buf[tmp + 0] - '0') * 10 + (buf[tmp + 1] - '0'); //日期 GPS->D.month = (buf[tmp + 2] - '0') * 10 + (buf[tmp + 3] - '0'); GPS->D.year = (buf[tmp + 4] - '0') * 10 + (buf[tmp + 5] - '0')+2000; UTC2BTC(&GPS->D); //UTC2BTC函数就是讲世界时间转化为北京时间(相差8小时) return 1; } } return 0; } |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有8人回复
为什么nbs上溴 没有产物点出现呢
已经有5人回复
存款400万可以在学校里躺平吗
已经有34人回复
求助一下有机合成大神
已经有4人回复
请教限项目规定
已经有5人回复
最失望的一年
已经有16人回复
求推荐英文EI期刊
已经有5人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
疑惑?
已经有5人回复

找到一些相关的精华帖子,希望有用哦~
跪求高手帮忙看看这组数据如何进行拟合
已经有7人回复
vs中我用c#写了窗体应用程序读入了gps时间,然后创建了网页怎样将gps时间读入网页
已经有4人回复
求各位大神帮忙!下面这个三维图怎么画出来的?我也想画个类似的,有数据不会画啊
已经有3人回复
找能使用SPE OnePetro这个数据库的同学帮忙下载文献
已经有5人回复
已知A、B、C三个点GPS数据,怎么计算A点到BC线的距离?
已经有5人回复
麻烦大家帮忙看看这个审稿人什么意思(关于数据分析和”化学计量系数?“)
已经有5人回复
求助各省边界的经纬度数据??
已经有5人回复
高手 帮忙看看这两数据
已经有5人回复
matlab数据拟合 希望高手帮忙写一下matlab的程序 跪谢
已经有12人回复
matlab数据拟合求助!!希望高手帮忙写一下matlab的程序 谢谢了!!
已经有15人回复
fullprof高手帮忙看看,如图数据不收敛,该怎么精修下去?附PCR、data文件
已经有29人回复
【软件】通用型多串口数据采集分析系统永久免费试用版V1.0
已经有35人回复
有经验的虫子,帮忙看看,数据重复性、精确度的问题。
已经有5人回复
【求助】请教各位大侠,有没有专用的经纬度转换工具(度分秒——〉十进制)
已经有13人回复
科研从小木虫开始,人人为我,我为人人













回复此楼
点击这里搜索更多相关资源