GPS是英文Global Positioning System(全球定位系统)的简称。
NMEA0183(https://files.cnblogs.com/files/libra13179/NMEA0183-GPS-%E5%8D%8F%E8%AE%AE.pdf) 协议是由美国国家海洋电子协会开发、 维护并发布的标准 ,用于航海远洋时使用的电子仪器之间的通信. 目前大部分的 GPS 接受设备都遵循这一标准.【Tim (xtimor@gmail.com) 提供了一个非常完善的 NMEA 解码库,在以下网址可以下载到:https://sourceforge.net/projects/nmea/ 或者https://github.com/AHR-Project/nmealib】{原本还想自己写一个对这个nmealib的代码解析的文章,看到一个还不错的博客就偷懒不写了 http://blog.csdn.net/mcgrady_tracy/article/details/50534920}
我们常见的数据
备注:这两图的区别是,上图中的 GPS 数据信息数据间有很多连续的“逗号”,而下图中逗号与逗号之间一般是有数字的,它们分别对应了 GPS 信号差与 GPS 信号良好的状况。
解析一下
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15><CR><LF> 例子:“$GPGGA,092725.00,4717.11399,N,00833.91590,E,1,8,1.01,499.6,M,48.0,M,,0*5B\r\n” <1> UTC 时间,格式为 hhmmss.sss
<2> 纬度,格式为 ddmm.mmmm(前导位数不足则补 0)
<3> 纬度半球,N 或 S(北纬或南纬) <4> 经度,格式为 dddmm.mmmm(前导位数不足则补 0)
<5> 经度半球,E 或 W(东经或西经) <6> 定位质量指示,0=定位无效,1=标准定位,2=差分定位,6=估算
<7> 使用卫星数量,从 00 到 12(前导位数不足则补 0)
<8> 水平精确度,0.5 到 99.9
<9> 天线离海平面的高度,-9999.9 到 9999.9 米 <10> 高度单位,M 表示单位米 <11> 大地椭球面相对海平面的高度(-999.9 到 9999.9)
<12> 高度单位,M 表示单位米 <13> 差分 GPS 数据期限(RTCM SC-104),最后设立 RTCM 传送的秒数量 <14> 差分参考基站标号,从 0000 到 1023(前导位数不足则补 0)
<15> 校验和。
在u-center的工具中我们可以看到其解析的数据直接解析出【注意是目前的数据是$GPGGA,,,,,,0,00,99.99,,,,,,*48】
$GPGSA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>*<18><CR><LF> 例子:“$GPGSA,A,3,23,29,07,08,09,18,26,28,,,,,1.94,1.18,1.54*0D\r\n“ <1> 模式 2:M = 手动, A = 自动 <2> 模式 1:定位型式 1 = 未定位,2 = 二维定位,3 = 三维定位 <3> 第 1 信道正在使用的卫星 PRN 码编号(Pseudo Random Noise,伪随机噪声码),01至 32(前导位数不足则补 0,最多可接收 12 颗卫星信息) <4> 第 2 信道正在使用的卫星 PRN 码编号 <5> 第 3 信道正在使用的卫星 PRN 码编号 <6> 第 4 信道正在使用的卫星 PRN 码编号 <7> 第 5 信道正在使用的卫星 PRN 码编号 <8> 第 6 信道正在使用的卫星 PRN 码编号 <9> 第 7 信道正在使用的卫星 PRN 码编号 <10> 第 8 信道正在使用的卫星 PRN 码编号 <11> 第 9 信道正在使用的卫星 PRN 码编号 <12> 第 10 信道正在使用的卫星 PRN 码编号 <13> 第 11 信道正在使用的卫星 PRN 码编号 <14> 第 12 信道正在使用的卫星 PRN 码编号 <15> PDOP 综合位置精度因子(0.5 - 99.9) <16> HDOP 水平精度因子(0.5 - 99.9) <17> VDOP 垂直精度因子(0.5 - 99.9) <18> 校验和
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*<13><CR><LF> 例子:$GPRMC,083559.00,A,4717.11437,N,00833.91522,E,0.004,77.52,091202,,,A*57 <1> UTC(Coordinated Universal Time)时间,hhmmss(时分秒)格式 <2> 定位状态,A=有效定位,V=无效定位 <3> Latitude,纬度 ddmm.mmmm(度分)格式(前导位数不足则补 0) <4> 纬度半球 N(北半球)或 S(南半球) <5> Longitude,经度 dddmm.mmmm(度分)格式(前导位数不足则补 0 <6> 经度半球 E(东经)或 W(西经) <7> 地面速率(000.0~999.9 节,Knot,前导位数不足则补 0) <8> 地面航向(000.0~359.9 度,以真北为参考基准,前导位数不足则补 0) <9> UTC 日期,ddmmyy(日月年)格式 <10> Magnetic Variation,磁偏角(000.0~180.0 度,前导位数不足则补 0) <11> Declination,磁偏角方向,E(东)或 W(西) <12> Mode Indicator,模式指示(仅 NMEA0183 3.00 版本输出,A=自主定位,D=差分,E=估算,N=数据无效) <13> 校验和。
格式:$GPVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*<10><CR><LF> 例子:$GPVTG,77.52,T,,M,0.004,N,0.008,K,A*06 <1> 以真北为参考基准的地面航向 <2> T,表示“真” <3> 以磁北为参考基准的地面航向 <4> M,表示“磁场” <5> 地面速率 <6> N,表示“节” <7> 地面速率 <8> K,表示“千米/小时” <9> 模式指示(A=自主定位,D=差分,E=估算,N=数据无效) <10> 校验和
格式:$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*<8><CR><LF> 例子:$GPGLL,4717.11364,N,00833.91565,E,092321.00,A,A*60 <1> 纬度 ddmm.mmmmm(度分) <2> 纬度半球 N(北半球)或 S(南半球) <3> 经度 dddmm.mmmmm(度分) <4> 经度半球 E(东经)或 W(西经) <5> UTC 时间:hhmmss(时分秒) <6> 定位状态,A=有效定位,V=无效定位 <7> 模式指示(A=自主定位,D=差分,E=估算,N=数据无效) <8> 校验和
格式:$GPZDA,<1>,<2>,<3>,<4>,<5>,<6>*<7><CR><LF> 例子:$GPZDA,082710.00,16,09,2002,00,00*64 <1> UTC 时间:hhmmss(时分秒,格林威治时间) <2> 日 <3> 月 <4> 年 <5> 本地区域小时(NEO-6M 不支持,为 00) <6> 本地区域分钟(NEO-6M 不支持,为 00) <7> 校验和