提供GPS功能的Wince和Windows Mobile都需要一个GPS接收器(GPS Receiver )。GPS receiver就像一个收音机,他从太空中各个GPS卫星(Satellites)接 收信号,通过自身的算法(一般在Firmware里面)计算出位置等信息,然后以 NMEA data的格式输出。GPS receiver就是接收卫星信号转换成NMEA data的设备 。
进行GPS的开发需要从GPS receiver取出NMEA data,分析出关心的数 据。关心的数据包括经度(Longitude),维度(Latitude)和海拔(Altitude )等等。在Windows Mobile 5以上MS提供了GPS Intermediate Driver,开发人 员不再需要自己分析NMEA data了。但是Wince5以及以下版本不提供GPS Intermediate Driver,还是需要自己分析NMEA data来取出关心的信息。本文讲 述如何使用C#进行NMEA data的分析。第一眼看,分析NMEA有自己做轮子之嫌, 其实了解NMEA的分析也是有好处的,由于各个生产GPS receiver的厂商在硬件工 艺和算法的不一样,各个厂商都提供自己扩展的NMEA data,这些数据GPS Intermediate Driver是不支持的,需要自己分析。
NMEA 全称NMEA 0183 ,是电子与数据的通信规范,也就是协议。实现该协议的设备输出这种规范的数 据,其他应用就可以基于这协议分析出相关的数据。NMEA开始用在航海设备上, 现在广泛用在GPS设备上,这就是为什么NMEA的原始速度使用Knot(海里/小时) 表示。下面是一段GPS NMEA data的范例
$GPRMC,000006,A,3754.6240,S,14509.7720,E,010.8,313.1,0101 08,011.8,E*6A
$GPGGA,201033,3754.6240,S,14509.7720,E,1,05,1.7,91.1,M,-1.1,M,,*75
$GPGSA,A,3,,05,10,,,,21,,29,30,,,2.9,1.7,1.3*32
$GPGSV,3,3,12,29,74,163,41,30,53,337,40,31,09,266,00,37,00,000,00*78 $PGRME,6.3,M,11.9,M,13.5,M*25
$PGRMB,0.0,200,,,,K,,N,W*28
$PGRMM,WGS 84*06
GPS NMEA data有以下特点:
* 每一条 NMEA data的数据都是以dollar符号开头。
* 从第二个字符开始的前2个 字符表示发送者(talker)和接着3个字符表示数据(message)。其中上面的 talker中,GP表示通用的GPS NMEA data,而PG为特定厂商的NMEA data。
* 所有数据字段(data fields)都是使用逗号隔开(comma-delimited) 。
* 最后一个数据段接着一个星号(asterisk)。
* 星号后面是两 位数字的校正码(checksum),checksum的计算方法是或计算在 '$' 和 '*'之间的所有字符。
* 最后以回车换行 (<CR><LF>)结尾。