NMEA0183协议中的GGA语句解析
$GPGGA语句简介
NMEA0183协议是接收机输出定位信息的通用标准之一,其中GGA语句包含了关键的时间、经纬度、定位状态等内容。
常用的语句示例如下:
$GPGGA,134658.00,5106.9792,N,11402.3003,W,2,09,1.0,1048.47,M,-16.27,M,08,AAAA*60
对应的字段和解释如下表:GGA语句格式
Num | 字段 | 具体内容 | 格式 | 示例 |
---|---|---|---|---|
1 | $GPGGA | 记录头 | $GPGGA | |
2 | utc | 定位时间 | hhmmss.ss | 134658.00 |
3 | lat | 纬度 | DDmm.mm | 5106.9792 |
4 | lat direction | 纬度方向,北纬N或南纬S | N | |
5 | lon | 经度 | DDDmm.mm | 11402.300 |
6 | lon direction | 经度方向,东经E或西经W | W | |
7 | quality | 表示定位解的状态,常用有1=单点解,2=伪距差分解,4=RTK固定解,5=RTK浮点解 | 2 | |
8 | # sats | 参与定位解算的卫星数 | 09 | |
9 | hdop | 水平精度因子 | 1.0 | |
10 | altitude | 天线海拔高,相距于平均海水面 | 1048.47 | |
11 | altitude units | 天线海拔高单位,M=meters | M | |
12 | undulation | 大地水准面与参考椭球面的偏差 | -16.27 | |
13 | undulation units | 大地水准面与参考椭球面的偏差单位,M=meters | M | |
14 | age | 差分时间或龄期,没有差分数据时通常为空 | 08 | |
15 | station ID | 差分基站ID | AAAA | |
16 | *xx | 校验和 | *60 | |
17 | [CR][LF] | 语句中止符 | [CR][LF] |
Python 解析GGA语句
我们可以使用Python第三方包 pynmea2 来解析NMEA,获取其中的位置、解算状态等,十分方便。也可以使用pynmea2结合位置信息,输出NMEA语句等。参考链接:https://openbase.com/python/pynmea2
1.pynmea2 安装
我装了conda,所以直接使用conda进行安装,也可以使用pip。
conda install pynmea2
2.pynmea2使用方法
解析单个语句:
import pynmea2
>>> msg = pynmea2.parse("$GPGGA,184353.07,1929.045,S,02410.506,E,1,04,2.6,100.00,M,-33.9,M,,0000*6D")
>>> msg
<GGA(timestamp=datetime.time(18, 43, 53), lat='1929.045', lat_dir='S', lon='02410.506', lon_dir='E', gps_qual='1', num_sats='04', horizontal_dil='2.6', altitude=100.0, altitude_units='M', geo_sep='-33.9', geo_sep_units='M', age_gps_data='', ref_station_id='0000')>
解析文件:
import pynmea2
file = open('examples/data.log', encoding='utf-8')
for line in file.readlines():
try:
msg = pynmea2.parse(line)
print(repr(msg))
except pynmea2.ParseError as e:
print('Parse error: {}'.format(e))
continue