C++读取GPS并解析 NMEA 数据
完整代码在我的Github地址https://github.com/dockermyself/gps_read
GGA
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
- $GPGGA:数据的类型标识符。
- 123519:UTC 时间,格式为时分秒(hhmmss)。
- 4807.038:纬度,格式为度分(ddmm.mmm)。
- N:纬度方向,N 表示北纬。
- 01131.000:经度,格式为度分(dddmm.mmm)。
- E:经度方向,E 表示东经。
- 1:GPS 修正,0 表示无效定位,1 表示有效定位。
- 08:用于定位的卫星数量。
- 0.9:HDOP(Horizontal Dilution of Precision)水平精度因子。
- 545.4:海拔高度,单位为米。
- M:海拔高度单位,M 表示米。
- 46.9:大地水准面与海平面的高度差,单位为米。
- M:高度差单位,M 表示米。
- *47:校验和,用于验证数据的完整性。
RMC
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
$GPRMC:数据的类型标识符。
-
123519:UTC 时间,格式为时分秒(hhmmss)。 A:数据状态,A 表示有效定位,V 表示无效定位。
-
4807.038:纬度,格式为度分(ddmm.mmm)。 N:纬度方向,N 表示北纬。
-
01131.000:经度,格式为度分(dddmm.mmm)。 E:经度方向,E 表示东经。
-
022.4:地面速度,单位为节。
-
084.4:地面航向,以真北方向为基准,以度为单位。 230394:日期,格式为日月年(ddmmyy)。
-
003.1:磁偏角,以度为单位。 W:磁偏角方向,W 表示西偏。
-
*6A:校验和,用于验证数据的完整性。
GGA 报文提供了有关定位和修正数据的信息,而 RMC 报文则包含了推荐的最小定位信息,包括地面速度和航向。通过解析这些报文,可以获取准确的 GPS 位置信息,并用于各种应用程序,如船舶导航、车辆追踪和户外活动。
代码解析
这里定义了一个结构体 LLA,用于存储解析后的 GPS 数据。它包括了 GPS 数据的代码、时间戳、纬度、经度、海拔高度和状态。
code:用于标识 GPS 数据类型的字符串。 timestamp:时间戳,表示获取数据的时间。 lat:纬度。 lon:经度。 alt:海拔高度。 status:数据状态,默认值为 -1,表示无效数据。
// GGA和RMC的数据结构
struct LLA
{
char code[10];
double timestamp;
double lat;