文章目录

目录

前言

一、RMC是什么?

二、EC20 输出的RMC解析

1.EC20返回的RMC报文

2.RMC报文解析

3.NMEA数据ddmm.mmmm转换成dd.ddddd

4.RMC UTC时间转化成北京时间

总结



前言

在调试EC20 4G模块的定位功能时,对输出的RMC格式的坐标信息产生了疑惑。带着疑问,在网上查找了资料,总算是解开了心中的疑问。

一、RMC是什么?

从百度百科上获知,RMC全称推荐定位信息(GPRMC)。

基本的格式如下:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC时间,hhmmss.sss(时分秒.毫秒)格式

<2> 定位状态,A=有效定位,V=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)或S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)或W(西经)

<7> 地面速率(000.0~999.9节,前面的0也将被传输)

<8> 地面航向(000.0~359.9度,以正北为参考基准,前面的0也将被传输)

<9> UTC日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也将被传输)

<11> 磁偏角方向,E(东)或W(西)

<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

*后hh为$到*所有字符的异或和

二、EC20 输出的RMC解析

1.EC20返回的RMC报文

$GPRMC, 150101.00, A,3438.162431, E,11224. 500999, E, 0.0, 208. 4, 050520,3.9, W, A*22

2.RMC报文解析

由RMC的报文定义所知

1)定位的时间格式为hhmmss.sss(时分秒.毫秒),当前报文的时间为150101.00,即15:01:01。这个时间为UTC时间,和我们的时区北京时间相差了8小时,所以换成北京时间小时要加上8,即北京时间为23:01:01.。

2)定位状态:A,有效。

3)纬度ddmm.mmmm,由格式可以看出,维度的度分模式小数点后面只有4个小数,而返回的报文里面有6位小数,这是怎么一回事呢。其实也是一样的,只不过GPS输出的格式变成了ddmm.mmmmmm,当前报文的数据为3438.162431。

4)纬度半球N。

5)经度dddmm.mmmm,和维度同理,GPS输出的格式dddmm.mmmmmm,当前报文的数据为11224. 500999。

6)经度半球E。

7)地面速率0节。

8)地面航向208. 4°。

9)UTC日期:20年5月5日,转换成北京日期要配合上面的UTC时间进行加减。

10)磁偏角3.9度。

11)磁偏角方向:W(西)。

12) 模式指示A=自主定位。

3.NMEA数据ddmm.mmmm转换成dd.ddddd

实际如果想要在百度地图或Google地图中显示,需要将ddmm.mmmm转换成dd.ddddd经纬度格式

转化公式为:dd.ddddd = dd + mm.mmmm/60。

4.RMC UTC时间转化成北京时间

最后附上UTC转成北京时间C语言代码

typedef struct rdss21Data_t
{uint8_t seconds;uint8_t minutes;uint8_t hours;uint8_t day;uint8_t month;uint8_t year;
}rdss21Data;void UTCToBeijing(rdss21Data* time)
{uint8_t days = 0;if (time->month == 1 || time->month == 3 || time->month == 5 || time->month == 7 || time->month == 8 || time->month == 10 || time->month == 12){days = 31;}else if (time->month == 4 || time->month == 6 || time->month == 9 || time->month == 11){days = 30;}else if (time->month == 2){if ((time->year % 400 == 0) || ((time->year % 4 == 0) && (time->year % 100 != 0))) /* 判断平年还是闰年 */{days = 29;}else{days = 28;}}time->hours += 8;                 /* 北京时间比格林威治时间快8小时 */if (time->hours >= 24)            /* 跨天 */{time->hours -= 24;time->day++;if (time->day > days)        /* 跨月 */{time->day = 1;time->month++;if (time->month > 12)    /* 跨年 */{time->year++;}}}
}

总结

RMC格式只要明白具体格式的含义,解析起来并不困难,注意UTC时间转化和经纬度的转化即可。

参考资料:

https://blog.csdn.net/qingfengxd1/article/details/105946479

http://blog.sina.com.cn/s/blog_6b2252130102wc0h.html

https://www.cnblogs.com/sekon/p/4609258.html

http://wiki.waaax.top/index.php?title=EC20Demo

EC20 GPS RMC格式数据转化相关推荐

  1. GPS(rinex格式)数据解析详细解读

    RINEX格式现如今已成为GPS测量应用中的标准数据格式,目前应用最为广泛.最普遍的是RINEX格式的第2个版本,该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据.在该版本中定义了6种不同 ...

  2. 关于通过前端xslx解析excel日期格式数据转化问题以及自定义时间格式YYYY-MM-DD转化

    如果excel中内容如下,需要解析时间格式的内容 XLSX.read会默认解析为天数的时间戳字符串(从1900年算起到当前日期的天数) 如果想让xlsx帮我们解析时,就完成解析时间格式,只需要加上如下 ...

  3. Pandas使用to_dict函数将dataframe转化为字典(dict)格式数据并指定orientation参数生成不同形式的字典

    Pandas使用to_dict函数将dataframe转化为字典(dict)格式数据并指定orientation参数生成不同形式的字典 目录

  4. pandas使用strftime函数将dataframe的日期格式数据列按照指定格式(format)转化为日期(时间)字符串数据列

    pandas使用strftime函数将dataframe的日期格式数据列按照指定格式(format)转化为日期(时间)字符串数据列 目录

  5. GPS NMEA-0183标准数据介绍

    http://blog.sina.com.cn/s/blog_490bf1700102uw9r.html GPS数据遵循NMEA-0183协议,该数据标准是由NMEA(National Marine ...

  6. java json数据输出,java服务器端输出JSON格式数据

    java服务器端输出JSON格式数据 本文我们讨论如何在服务器端输出 JSON 格式的数据.以 Java 为例,我们将演示将一个 Java 对象编码为 JSON 格式的文本. 将 String 对象编 ...

  7. JSON格式数据与数据组件

    1.将JSON格式数据转化为wex5data数据组件中的数据,且数据列数不必一 一对应,但转化的列数据的列名与数据表字段相同. Model.prototype.goodsDataCustomRefre ...

  8. php json 默认值,php操作JSON格式数据的实现代码

    知识点: 1.JSON数据格式介绍 2.对数据编码成JSON格式 3.对JSON数据进行解码,并操作 JSON数据格式表示方式如下: { "programmers": [ { &q ...

  9. Python数据处理(一):处理 JSON、XML、CSV 三种格式数据

    Python 数据处理系列博客来啦! 本系列将以<Python数据处理>这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理.书中有些地方讲的不太详细,我会查阅其他 ...

最新文章

  1. python 数字循环
  2. get 和 post
  3. poj1201(差分约束+SPFA)
  4. 敏捷项目管理工具实践
  5. 避免在Swift Struct中使用闭包
  6. (转)Django ==== 实战学习篇五 模板系统说明
  7. Linux - 网络相关指令
  8. oracle,导入,导出数据
  9. 中国系统集成商名单大全
  10. 使用 C# 9 的records作为强类型ID - 路由和查询参数
  11. 【开源】OSharpNS,轻量级.net core快速开发框架发布
  12. listrecord根据某个属性去重_去哪网开发实战记录(9):城市选择页(中)
  13. flutter输入框TextField中文本textAlign对齐分析篇
  14. Python直接调用C库的printf()函数打印一条消息
  15. 清华硕士分享思维导图:机器学习所需的数学基础
  16. Spark SQL从入门到精通
  17. mysql年龄数据类型_MySql 数据类型
  18. “变速齿轮”研究手记
  19. 坚果云 我的电脑图标_坚果云使用教程
  20. Phoenix错误信息: Malformed connection url

热门文章

  1. 峰值检测电路和精密整流电路
  2. 北斗定位,定位追踪,防盗追踪系统设计方案
  3. PAT 乙级 1033 旧键盘打字 python
  4. ubuntu teamviewer
  5. 并发编程知识总结,软件开发架构,socket套接字模板,粘包问题,struct解决粘包问题,上传大文件数据,socketserver,关于操作系统的发展史,进程,线程。...
  6. 惠普笔记本U盘重装系统教程(转载)
  7. 世嘉VR虚拟乐园即将开业,位于二次元天堂秋叶原
  8. go gorm获取数据库报错:goexit: BYTE $0x90 // NOP
  9. 数据分析:大数据时代的必备技能之Power BI
  10. 链路不通或服务器没响应,连不通服务器服务怎么办(理论篇)