1 gps定位原理
gps是美国开发的一套实时定位系统。在导航应用中,重点关注的是用户的gps接受机,根据接收机的数据从而获取当前的位置和时间信息。大概了解下定位原理:
由于我们是用于上位机的开发,接收器遵守的是NMEA0183协议,某种程度上我们通过协议直接得到当前所在的经纬度信息。
首先我们必须要了解的是地球的参考坐标系,以便于我们使用地图时把得到的坐标转换成导航所使用的坐标系。NMEA0183使用的参考坐标系是WGS-84坐标系。
其次,必须了解三颗卫星可以定位,另外一颗卫星是为了消除误差,所以我们通常需要4颗卫星来进行定位。由于现在使用的gps芯片是遵守nmea0183协议,所以会直接给出当前的经纬度信息,所以具体的算法请参考相关文档。
2 gps数据获取
gps信息通常由读取串口而获得。由于会不停的从串口得到gps信息,所以在导航系统中需要另外开一个线程去获取数据。
另外在不同的系统中我们需要采取不同的策略去获取gps数据,例如在wince中我们可以直接读取串口信息,而在Android和ios中我们可以直接通过其系统上层API直接传递gps信息给导航引擎。
3 gps数据分析
通常我们从串口会读出以下数据: $GPGGA,235949.042,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*45 $GPGLL,0000.0000,N,00000.0000,E,235949.042,V,N*47 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPGSV,1,1,00*79 $GPRMC,235949.042,V,0000.0000,N,00000.0000,E,,,140209,,,N*7E $GPVTG,,T,,M,,N,,K,N*2C 所以必须分析以下协议 $GPGGA、$GPGLL、$GPGSA、$GPGSV、$GPRMC、$GPVTG。
具体协议分析可以参考相关资料。
一般来说,我们需要获取当前的经纬度信息,当前时间。另外为了给客户展示当前的gps状态,需要获取当前接受到卫星的颗数,用来判断信号的强弱等等。