NMEA 0183 协议及 GNGGA、GNRMC 语句的详细解释
1. NMEA 0183 协议
• 定义:
NMEA 0183 是由美国国家海洋电子协会(National Marine Electronics Association)制定的标准通信协议,用于船舶导航设备和传感器之间的数据传输。
• 核心特点:
• ASCII 文本格式:数据以可读的文本形式传输。
• 串行通信:通常通过 RS-232 或 RS-422 接口传输。
• 语句结构:每条数据以 $ 开头,以 * 加校验和结尾,字段间用逗号分隔。
• 应用场景:
GPS 接收机、船舶导航仪、自动驾驶系统等。
2. GNGGA 语句(Global Navigation Satellite System Fix Data)
• 功能:
提供 时间、位置、定位状态、卫星数量 等基本信息。
• 典型格式:
$GNGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
• 字段解析:
| 字段序号 | 含义 | 示例值 | 说明 |
|---|---|---|---|
| 1 | UTC 时间 | 123519 | 格式为 HHMMSS.SS(12:35:19) |
| 2 | 纬度(度分格式) | 4807.038 | 格式为 DDMM.MMMM(48度07.038分) |
| 3 | 纬度半球 | N | N(北纬)或 S(南纬) |
| 4 | 经度(度分格式) | 01131.000 | 格式为 DDDMM.MMMM(011度31.000分) |
| 5 | 经度半球 | E | E(东经)或 W(西经) |
| 6 | 定位状态 | 1 | 0=无效,1=单点定位,2=差分定位 |
| 7 | 使用的卫星数量 | 08 | 当前用于定位的卫星数量(0-12) |
| 8 | 水平精度因子(HDOP) | 0.9 | 值越小,定位精度越高 |
| 9 | 海拔高度 | 545.4 | 单位:米 |
| 10 | 高度单位 | M | 固定为 M(米) |
| 11 | 大地水准面高度 | 46.9 | 相对于椭球面的高度差(米) |
| 12 | 高度单位 | M | 固定为 M(米) |
| 13 | 差分数据年龄(秒) | (空) | 仅差分定位时有效 |
| 14 | 差分参考站 ID | (空) | 差分基站编号 |
| 15 | 校验和 | *47 | 校验和(用于验证数据完整性) |
3. GNRMC 语句(Recommended Minimum Navigation Data)
• 功能:
提供 时间、日期、位置、速度、航向 等最小推荐导航数据。
• 典型格式:
$GNRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
• 字段解析:
| 字段序号 | 含义 | 示例值 | 说明 |
|---|---|---|---|
| 1 | UTC 时间 | 123519 | 格式为 HHMMSS.SS(12:35:19) |
| 2 | 定位状态 | A | A=有效,V=无效 |
| 3 | 纬度(度分格式) | 4807.038 | 格式同 GNGGA |
| 4 | 纬度半球 | N | N/S |
| 5 | 经度(度分格式) | 01131.000 | 格式同 GNGGA |
| 6 | 经度半球 | E | E/W |
| 7 | 地面速度(节) | 022.4 | 1节=1.852公里/小时 |
| 8 | 地面航向(真北) | 084.4 | 单位:度(0-359.9) |
| 9 | UTC 日期 | 230394 | 格式为 DDMMYY(23日03月1994年) |
| 10 | 磁偏角 | 003.1 | 单位:度 |
| 11 | 磁偏角方向 | W | E(东)或 W(西) |
| 12 | 校验和 | *6A | 校验和 |
4. 关键区别
| 特性 | GNGGA | GNRMC |
|---|---|---|
| 核心数据 | 时间、位置、海拔、卫星数量 | 时间、位置、速度、航向、日期 |
| 适用场景 | 需要详细定位信息的应用(如测绘) | 导航和运动状态监测(如船舶、车辆) |
| 速度信息 | 无 | 提供地面速度和航向 |
| 日期信息 | 无 | 包含 UTC 日期 |
5. 实际应用示例
• 解析 GNGGA 获取海拔高度:
# 示例代码片段
gngga = "$GNGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47"
fields = gngga.split(',')
altitude = float(fields[9]) # 海拔高度:545.4 米
• 解析 GNRMC 计算速度(公里/小时):
gnrmc = "$GNRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A"
fields = gnrmc.split(',')
speed_knots = float(fields[7]) # 速度(节)
speed_kmh = speed_knots * 1.852 # 转换为公里/小时:41.5 km/h
6. 注意事项
• 校验和验证:
校验和是 $ 和 * 之间所有字符的异或值,用于检测数据传输中的错误。
• 字段为空:
若某字段无数据,则保留逗号占位(如 ,,)。
• 多系统支持:
GN 前缀表示数据来自多系统(如 GPS + GLONASS),纯 GPS 设备可能使用 GP 前缀(如 GPGGA)。
通过解析这些语句,可以获取 GPS 设备的核心导航数据,适用于车辆追踪、航海导航、无人机控制等场景。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)