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>项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。
 

这下,超级终端中显示的数据就能看懂了吧,其实所有的软件也都是对这些标准的输出数据进行处理和运算!

GPS NMEA-0183协议_NMEA-0183协议