$GPGGA
时间: 2025-07-16 15:12:50 浏览: 11
### GPS GPGGA语句格式及解析方法
GPS中的`GPGGA`语句是NMEA(National Marine Electronics Association)协议中的一种标准数据格式,用于传输全球定位系统(GPS)的主要定位信息。该语句以`$GPGGA`开头,包含17个字段,并通过逗号分隔[^3]。
#### GPGGA语句的结构
`$GPGGA`语句的基本格式如下:
```
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
```
各个字段的具体含义如下:
1. **UTC时间**:格式为`hhmmss.ss`,表示当前的世界协调时间(Coordinated Universal Time)。
2. **纬度**:格式为`ddmm.mmmm`,其中前两位表示纬度的度数,后面部分表示纬度的分数。
3. **纬度半球**:`N`表示北半球,`S`表示南半球。
4. **经度**:格式为`dddmm.mmmm`,其中前三位表示经度的度数,后面部分表示经度的分数。
5. **经度半球**:`E`表示东经,`W`表示西经。
6. **定位质量指示**:
- `0`:未定位;
- `1`:非差分定位;
- `2`:差分定位;
- `3`:PPS定位(精确到秒级的脉冲信号);
- `4`:实时动态定位(RTK)固定解;
- `5`:实时动态定位(RTK)浮动解;
- `6`:估计模式;
- `7`:手动输入模式;
- `8`:模拟模式。
7. **使用卫星数量**:范围从`00`到`12`,表示参与定位的卫星数量。
8. **水平精度因子(HDOP)**:表示水平方向上的精度因子,数值越小精度越高。
9. **海拔高度**:单位为米(m),表示相对于平均海平面的高度。
10. **高度单位**:通常为`M`,表示单位为米。
11. **大地水准面高度**:单位为米(m),表示大地水准面与参考椭球面之间的差异。
12. **高度单位**:通常为`M`,表示单位为米。
13. **差分GPS数据期限**:表示差分修正数据的有效时间,单位为秒。
14. **差分参考基站标号**:表示差分基准站的编号。
15. **校验和**:采用异或运算生成的校验值,用于验证数据完整性。
16. **回车符**:ASCII字符`\r`。
17. **换行符**:ASCII字符`\n`。
#### 示例数据
以下是一个典型的`GPGGA`数据示例:
```
$GPGGA,021850.00,2233.51747,N,11356.58160,E,1,09,0.97,69.2,M,-2.7,M,,*7A
```
解析后可以得到:
- UTC时间:`02:18:50.00`
- 纬度:`22°33.51747'`,北半球
- 经度:`113°56.58160'`,东半球
- 定位质量指示:`1`(非差分定位)
- 使用卫星数量:`09`
- 水平精度因子:`0.97`
- 海拔高度:`69.2` 米
- 大地水准面高度:`-2.7` 米
- 校验和:`*7A`
#### 解析方法
解析`GPGGA`语句时,需要按照以下步骤进行:
1. **分割字段**:通过逗号将字符串分割成多个字段。
2. **提取关键数据**:根据字段的位置提取时间、经纬度、定位状态等信息。
3. **转换坐标格式**:将经纬度从`ddmm.mmmm`格式转换为十进制形式。例如,纬度`2233.51747`应转换为`22 + 33.51747 / 60 = 22.5586245`。
4. **校验和验证**:计算校验和并与提供的值进行比较,确保数据完整性。
5. **处理异常情况**:例如空字段、无效数据或校验失败等情况。
以下是一个简单的Python代码示例,用于解析`GPGGA`语句:
```python
def parse_gpgga(sentence):
# 分割字段
fields = sentence.split(',')
# 提取关键数据
utc_time = fields[1]
latitude_degrees = float(fields[2][:2]) + float(fields[2][2:]) / 60
if fields[3] == 'S':
latitude_degrees = -latitude_degrees
longitude_degrees = float(fields[4][:3]) + float(fields[4][3:]) / 60
if fields[5] == 'W':
longitude_degrees = -longitude_degrees
fix_quality = int(fields[6])
satellites_used = int(fields[7])
hdop = float(fields[8])
altitude = float(fields[9])
geoid_height = float(fields[11])
return {
"UTC Time": utc_time,
"Latitude (Decimal)": latitude_degrees,
"Longitude (Decimal)": longitude_degrees,
"Fix Quality": fix_quality,
"Satellites Used": satellites_used,
"HDOP": hdop,
"Altitude (m)": altitude,
"Geoid Height (m)": geoid_height
}
# 示例调用
gpgga_sentence = "$GPGGA,021850.00,2233.51747,N,11356.58160,E,1,09,0.97,69.2,M,-2.7,M,,*7A"
parsed_data = parse_gpgga(gpgga_sentence)
print(parsed_data)
```
输出结果:
```json
{
"UTC Time": "021850.00",
"Latitude (Decimal)": 22.5586245,
"Longitude (Decimal)": 113.9430267,
"Fix Quality": 1,
"Satellites Used": 9,
"HDOP": 0.97,
"Altitude (m)": 69.2,
"Geoid Height (m)": -2.7
}
```
#### 注意事项
- 在实际应用中,需对数据的完整性和有效性进行严格检查,特别是校验和的计算。
- 对于高精度应用,还需结合其他NMEA语句(如`GPRMC`)获取更全面的信息。
- 如果需要将数据集成到ROS(Robot Operating System)环境中,可参考相关的消息类型,如`sensor_msgs::NavSatFix`[^2]。
---
阅读全文
相关推荐




















