GPS NMEA协议,0183 定位数据格式 双模定位:GNXXX GPS+BD 完整版

背景:最近需要在imx6ull 的Linux板子上面接收定位模块的0183格式的数据并进行解析,并且用QT实现,绘制定位信息各种数据的动态曲线图

GPS NMEA协议,0183 定位数据格式 双模定位:GNXXX GPS+BD

如果是GN开头的数据则不做区分,如果是GP或者BD开头的数据则要进行区分。

数据帧格式:
$aaccc,ddd,ddd,…,ddd*hh

1、“$”——帧命令起始位
2、aaccc——地址域,前两位为识别符,后三位为语句名
3、ddd…ddd——数据
4、“*”——校验和前缀
5、hh——校验和(check sum),$与 * 之间所有字符 ASCII 码的校验和(各字节做异或运算,得到校验
	和后,再转换 16 进制格式的 ASCII 字符。)
6、——CR(Carriage Return) + LF(Line Feed)帧结束,回车和换行

数据种类:

  • GNZDA:UTC 时间和日期

  • GNGGA:UTC时间信息

  • GPGLL:地理定位信息

  • GPGSA:当前GPS卫星信息

  • BDGSA:当前北斗卫星信息

  • GPGSV:GPS可见卫星信息

  • BDGSV:北斗可见卫星信息

  • GNRMC:推荐定位信息

  • GNVTG:地面速度信息

    1. GNZDA:时间信息:

    UTC 时间和日期 :这里的UTC时间是指协调世界时,相当于本初子午线(0经度上的时间),和北京时间差8个小时

    数据示例: $GNZDA,092320.000,25,04,2021,00,00*40

    帧格式:$GPZDA,

    数据说明:

    2. GNGGA:卫星定位信息

    数据示例:$GNGGA,092320.000,2519.0490,N,11024.8391,E,1,23,0.7,175.7,M,0.0,M,*7D

    $GPGGA,

重点:

经纬度转化方法:比如给出的数据中,可以得到纬度是 2519.0490 N,那么实际的纬度=25+19.0490÷60,得到的经度是11024.8391,那么实际的经度是:110+24.8391÷60 因为报文里面用的是标准的度分格式,由于经纬的范围分别是090、0180,所以切割位置也不一样


3. GPGLL:地理定位信息

示例数据:$GNGLL,2519.0490,N,11024.8391,E,092320.000,A,A*4A

$GNGLL,

4. GPGSA:当前GPS卫星信息

示例数据:$GPGSA,A,3,09,17,33,02,34,06,14,36,19,35,04,28,1.2,0.7,1.0*3B

$GPGSA,

  • 注解:(Pseudo Random Noise,伪随机噪声码),01 至 32(前导位数不足则补 0,最多可接收 12 颗卫星信息)一定会有十二个占位数据,如果没有,则会是空,但是也算为一个占位数据,精度因子越小,则准确度越高,

**5. BDGSA:当前北斗卫星信息 **( 帧格式和GPGSA一致)
示例数据:$BDGSA,A,3,01,02,03,19,04,05,07,08,10,06,13,1.2,0.7,1.0*25


6. GPGSV:GPS可见卫星信息
 示例数据:
 $GPGSV,4,1,15,02,34,276,40,03,15,039,04,07,080,38,06,57,317,4577
 $GPGSV,4,2,15,09,15,112,43,12,08,323,14,42,164,45,17,53,053,477E
 $GPGSV,4,3,15,19,55,009,44,24,05,279,28,56,168,45,33,41,115,4374
 $GPGSV,4,4,15,34,32,164,43,35,57,065,46,36,55,145,404B

$GPGSV,


7. BDGSV:北斗可见卫星信息
 示例数据:
 $BDGSV,3,1,12,01,42,122,46,02,48,229,39,03,62,180,45,04,29,109,406C
 $BDGSV,3,2,12,05,26,251,35,06,05,164,35,07,59,159,45,08,65,340,4361
 $BDGSV,3,3,12,10,80,228,44,13,61,283,44,19,41,074,48,20,05,038,*68

帧格式和GPGSV一致

8. GNRMC:推荐最小的定位信息
 示例数据:$GNRMC,092320.000,A,2519.0490,N,11024.8391,E,0.00,0.00,250421,A7D
 $GPRMC,

9. GNVTG:地面速度信息
 示例数据:$GNVTG,0.00,T,M,0.00,N,0.00,K,A*23
 $GPVTG,

注解:

  • 校验和:通过计算 $ 和 * 两个符号之间所有字符ASCLL码的异或运算得到,将得到的结果以ASCII字符表示
    例如:例如语句: $GNZDA05555.000,08,12,2015,00,00*4C, 校验和(红色部分参与计算)计算方法为:
    0X47 xor 0X4E xor 0X5A xor 0X44 xor 0X41 xor 0X2C xor 0X30 xor 0X39 xor 0X35 xor 0X35 xor 0X35 xor 0X35 xor 0X2E xor 0X30 xor 0X30 xor 0X30 xor 0X2C xor 0X30 xor 0X38 xor 0X2Cxop 0X31 xorl0X32 xor0X20 xor 0X32 xor 0X30 xor 0X31 xor 0X35 xor 0X2C xor 0X30 xor 0X30 xor 0X2C xor 0X30 xor 0X30
    得到的结果就是0X4C,用ASCII表示就是4C.
上一篇:LeetCode(13)解码异或后的数组(简单)


下一篇:AtCoder Beginner Contest 185 F - Range Xor Query(线段树或树状数组)