GPS数据模拟

今天用到了GPS数据,但是需要组成标准的数据包发给客户端去解析,在查看了常用的GPS数据包格式,最后选用了GPRMC字段的数据。

GPRMC数据格式很容易就可以搜索到:

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


字段

参数

格式

字段0

帧头

$GPRMC

字段1

UTC时间

hhmmss.ss

字段2

状态

A/V,A代表有效,V代表无效

字段3

纬度

ddmm.mmmm

字段4

北纬/南纬

N/SN表示北纬,S表示南纬

字段5

经度

ddmm.mmmm

字段6

东经/西经

E/WE表示东经,W表示西经

字段7

速度

(knots)1 knots=1.852km/h

字段8

方位角

度(以真北为参考基准)

字段9

UTC日期

日月年,ddmmyy

字段10

磁偏角

000~180

字段11

磁偏角方向

E/W,东/西

字段12

模式仅NMEA0183 3.00版本输出

A:自动,D:差分,E:估测,N:无效

字段13

校验

hh

回车换行

\r\n


每个字段已经介绍的很清楚了,这里主要说一下校验和。

校验和是将$以后*以前(不包含$和*)的数据进行异或运算得出的十六进制数,代码如下,也很简单。


int checksum(const char* s)
{
    int c = 0;

    while (*s)
        c ^= *s++;

    return c;
}

例如:正确的数据包为" $GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,,,A*60\r\n",则*后面的0x60是" GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,,,A"通过上面函数计算出来的校验和。

你可能感兴趣的:(Qt,gps,数据,C++)