GPS可以输出实时定位数据让其他的设备使用,这就牵扯到了数据交换协议。几乎现在所有的GPS接收机都遵循美国国家海洋电子协会(National Marine Electronics Association)所指定的标准规格,这一标准制订所有航海电子仪器间的通讯标准,其中包含传输资料的格式以及传输资料的通讯协议。NMEA协议有0180、0182和0183三种,0183可以认为是前两种的超集,现在正广泛的使用,0183有几个版本,V1.5 V2.1。所以,如果大家的GPS接收机如果要联上笔记本里通用的GPS导航程序,比如OZIEXPLORER和俺的GPSRECEIVER,就应该选择NEMA V2.0以上的协议。NMEA规定的通讯速度是4800 b/S。现在有些接收机也可以提供更高的速度,但说实话,没有什么用,4800就足够了。
象GARMIN,自己有一个mapsource软件,为了不让其他品牌的GPS使用该软件,就设计了私有的GARMIN协议,只有GARMIN的机器才能输出这种数据,而MAPSOURCE只能接收GARMIN协议,这样一来MAPSOURCE就只能让GARMIN的机器使用.
SIFR 天宝、摩托罗拉也有自己的专用二进制协议,但都支持NMEA协议输出的,通过专用的设置软件可以更改输出方式。
下面是NMEA协议常用的几种输出类型:
GPRMC(建议使用最小GPS数据格式)
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11><CR><LF>
1) 标准定位时间(UTC time)格式:时时分分秒秒.秒秒秒(hhmmss.sss)。
2) 定位状态,A = 数据可用,V = 数据不可用。
3) 纬度,格式:度度分分.分分分分(ddmm.mmmm)。
4) 纬度区分,北半球(N)或南半球(S)。
5) 经度,格式:度度分分.分分分分。
6) 经度区分,东(E)半球或西(W)半球。
7) 相对位移速度, 0.0 至 1851.8 knots
8) 相对位移方向,000.0 至 359.9度。实际值。
9) 日期,格式:日日月月年年(ddmmyy)。
10) 磁极变量,000.0 至180.0。
11) 度数。
12) Checksum.(检查位)
GPGSV(所示卫星格式)
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,⋯<4>,<5>,<6>,<7>,<8><CR><LF>
1) 天空中收到讯号的卫星总数。
2) 定位的卫星总数。
3) 天空中的卫星总数,00 至 12。
4) 卫星编号, 01 至 32。
5) 卫星仰角, OO 至 90 度。
6) 卫星方位角, OOO 至 359 度。实际值。
7) 讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
8) Checksum.(检查位).
GPGSA(GPS精度指针及使用卫星格式)
$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7><CR><LF>
1)模式 2:M = 手动, A = 自动。
2)模式 1:定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。
3) PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。
4) PDOP-位置精度稀释 0.5 至 99.9.
5) HDOP-水平精度稀释 0.5 to 99.9.
6) VDOP-垂直精度稀释 0.5 to 99.9.
7) Checksum.(检查位).
GPS固定数据输出语句($GPGGA)
这是一帧GPS定位的主要数据,也是使用最广的数据。为了便于理解,下面举例说明$GPGGA语句各部分的含义。例1是用GN-77N和笔者开发的软硬件接口,在笔者所在地接收到的$GPGGA语句的内容。
例1:$GPGGA,050901,3931.4449,N,11643.5123,E,1,07,1.4,76.2,M,-7.0,M,,*65
其标准格式为:$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
各部分所对应的含义为:
(1)定位UTC时间:05时09分01秒
(2)纬度(格式ddmm.mmmm:即dd度,mm.mmmm分);
(3)N/S(北纬或南纬):北纬39度31.4449分;
(4)经度(格式dddmm.mmmm:即ddd度,mm.mmmm分);
(5)E/W(东经或西经):东经116度43.5123分;
(6)质量因子(0=没有定位,1=实时GPS,2=差分GPS):1=实时GPS;
(7)可使用的卫星数(0~8):可使用的卫星数=07;
(8)水平精度因子(1.0~99.9);水平精度因子=1.4;
(9)天线高程(海平面,-9999.9~99999.9,单位:m);天线高程=76.2m);
(10)大地椭球面相对海平面的高度(-999.9~9999.9,单位:m):-7.0m;
(11)差分GPS数据年龄,实时GPS时无:无;
(12)差分基准站号(0000~1023),实时GPS时无:无;
*总和校验域;
hh 总和校验数:65
(CR)(LF)回车,换行。
GPGLL地理定位信息
例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息
字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段2:纬度N(北纬)或S(南纬)
字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段4:经度E(东经)或W(西经)
字段5:UTC时间,hhmmss.sss格式
字段6:状态,A=定位,V=未定位
字段7:校验值
$GPVTG地面速度信息
例:$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F
字段0:$GPVTG,语句ID,表明该语句为Track Made Good and Ground Speed(VTG)地面速度信息
字段1:运动角度,000 - 359,(前导位数不足则补0)
字段2:T=真北参照系
字段3:运动角度,000 - 359,(前导位数不足则补0)
字段4:M=磁北参照系
字段5:水平运动速度(0.00)(前导位数不足则补0)
字段6:N=节,Knots
字段7:水平运动速度(0.00)(前导位数不足则补0)
字段8:K=公里/时,km/h
字段9:校验值
收到的信息就是这样的:
$GPGSA,A,1,,,,,,,,,,,,,99.9,99.9,99.9*09
$GPVTG,000.0,T,,M,000.0,N,000.0,K*60
$GPGGA,062320,3537.8333,N,13944.6667,E,0,00,99.9,0100,M,,M,000,0000*7D
$GPGLL,3537.8333,N,13944.6667,E,062320,V*3B
$GPRMC,062320,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0D
$GPZDA,062320,03,02,2022,,*4E
$GPGSV,1,1,00,,,,,,,,,,,,,,,,*79
$GPVTG,000.0,T,,M,000.0,N,000.0,K*60
$GPGGA,062321,3537.8333,N,13944.6667,E,0,00,99.9,0100,M,,M,000,0000*7C
$GPGLL,3537.8333,N,13944.6667,E,062321,V*3A
$GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C
$GPZDA,062321,03,02,2022,,*4F
$GPGSA,A,1,,,,,,,,,,,,,99.9,99.9,99.9*09
$GPVTG,000.0,T,,M,000.0,N,000.0,K*60
$GPGGA,062322,3537.8333,N,13944.6667,E,0,00,99.9,0100,M,,M,000,0000*7F
$GPGLL,3537.8333,N,13944.6667,E,062322,V*39
$GPRMC,062322,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0F
$GPZDA,062322,03,02,2022,,*4C
第<3>,<4>,<5>,<6>项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。
这下,超级终端中显示的数据就能看懂了吧,其实所有的软件也都是对这些标准的输出数据进行处理和运算!