最近,一个客户要求做一个GPS车辆监控的系统,要把汽车的位置实时的显示在电子地图上,以前还真没有接触过,从头开始学习啦。
首先得明白GPS信号的格式和传输方法,不然怎么用程序获得汽车的坐标呢。上网g一下,GPS终端型号甚多、性能各异,但是他们的GPS定位信息串行输出格式大多采用美国国家海洋电子协会制定的NMEA-0183通信标准格式。其输出的数据采用ASCII码,内容包含了经度、维度、高度、速度、日期、时间、航向以及卫星状况等信息,常用的语句有6种,包括GGA、GLL、GSA、GSV、RMC和VTG。
下面先分别说明一下各个语句的含义吧。
说明:NMEA0183格式以“$”开始,主要语句有GPGGA,GPVTG,GPRMC等
1、 GPS DOP and Active Satellites(GSA)当前卫星信息
$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7><CR><LF>
<1>模式 :M = 手动, A = 自动。
<2>定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。
<3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
<7> Checksum.(检查位).
2、 GPS Satellites in View(GSV)可见卫星信息
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8><CR><LF>
<1> GSV语句的总数
<2> 本句GSV的编号
<3> 可见卫星的总数,00 至 12。
<4> 卫星编号, 01 至 32。
<5>卫星仰角, 00 至 90 度。
<6>卫星方位角, 000 至 359 度。实际值。
<7>讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
<8>Checksum.(检查位).
3、Global Positioning System Fix Data(GGA)GPS定位信息
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式
<2> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
4、Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>
<1> 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
<3> 地面速率(000.0~999.9节,前面的0也将被传输)
<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)
<5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
了解了格式就好说了,网上有好多解译这些语句的类,偷个懒、下载修改一下就可以用了。
有了软件没有硬件也白闹啊,巧妇难为无米之炊! 嘿嘿,好在客户提供了一台车载GPS终端设备,接下来就可以测试了。
我用的这个车载GPS需要一个SIM卡,要支持CMNET方式上网,为了这个我还把自己的手机卡开通了GPRS功能, 初始化车载GPS终端,接上终端用自带的服务器端接收测试工具进行测试......不行啊?没有数据,一直连不上服务器,问过经销商才知道这个GPS终端的SIM卡只支持CMNET方式的网络,而我的是CMWAP的!换上别人的卡,等待几秒后数据终于出来啦,还算顺利。
自带的那个测试程序只能接受数据进行显示,要跟电子地图联系起来还要自己写程序写呀,我写了一个接收的程序,用的是TCP连接方式,测试不行,只能收到一个终端的编号,往下就没有数据了,找不到原因啊,换种方式,把终端设成用UDP协议的,重新用UDP协议写了一个接收程序,竟然还真的解决了,看到接收区显示出一串串数据,终于完成了。不过一直没明白为什么TCP连接方式不行。
把GPS车载终端接到汽车上,出去转了一圈,效果还不错,误差基本在10米以内,也可能跟地图的精度有关啊。