李国良,陈明岚
(贵州大学电子信息技术实验室,贵州 贵阳 550003)
基于VB的GPS数据接收及轨迹显示设计
李国良,陈明岚
(贵州大学电子信息技术实验室,贵州 贵阳 550003)
主要阐述了基于VB平台的GPS数据接收及轨迹显示的软件设计。系统将提取出的GPS模块输出数据中的时间、日期、经度、纬度等经纬度信息转换为高斯平面坐标,最终以打点的方式显示当前轨迹,并显示某些特定点的位置名称。
GPS模块;GPS数据提取;轨迹显示
全球定位系统(GPS)是能够提供实时精确定位、导航和授时等服务的空间卫星导航定位系统。现在GPS技术不仅仅局限于军事上的应用,在人们的日常生活中也屡见不鲜,如车载GPS定位等都与人们的生活密切相关。目前,市场上有很多GPS硬件模块可供大家选择,但在具体的应用中还须结合自己的需要编写相应的软件才能实现。笔者就是基于VB开发平台介绍了GPS模块数据接收和轨迹显示的软件设计过程,简单实用,以供大家参考。
NMEA 0183 协议为GPS接收机和其他航海电子产品的导航数据输出格式,是目前普遍使用且为大多数生产商遵循的协议之一,输出标准的ASCII码形式的数据信息,有GPGGA,GPGSA,GPGSV,GPRMC,GPZDA和GPGLL等多种数据格式可供选择使用,各种句型均以“$”开头,输出格林时间、经纬度、用于定位的星体个数、几何精度、天线高度、航迹向、磁航向、磁差、校验码、速度等信息。每个句子内的数据之间以逗号隔开。该设计中选择GPRMC数据格式。GPS模块与PC机串行通讯参数为:
4800,N,8,1
GPRMC数据句型形式如下:
$GPRMC,112831,V,2634.77340,N,10640.20150,E,005.3,041.,130309,*38lt;CRgt;lt;LFgt;…
其中,GP为信息来源,RMC为句型识别符,其后依次为UTC时间(格式为hhmmss)、GPS状态(A为定位状态,V为导航状态)、纬度、纬度符号(N或S)、经度、经度符号(E或W)、速率(单位为公里)、UTC日期(格式为ddmmyy)和校验码。
WGS-84坐标系是目前GPS所采用的坐标系统,GPS所发布的星历参数就是基于此坐标系统的。但在工程应用已有导航设备中却常常要用到平面坐标X、Y,因此要进行轨迹显示,首先要将得到的经纬度等大地坐标(B,L)按高斯投影的方法求得高斯平面坐标,
x=F1(B,L)y=F2(B,L)
高斯投影属于正形等角投影变换,需满足一定的条件,其主要的计算公式如下[1]:
式中,B为投影点的大地经度;l=L-L0,L为投影点的大地纬度;L0为轴子午线的大地纬度;N为投影点的卯酉圈曲率半径;t=tanB;η=e′cosB;e′为地球第二偏心率。
虽然上述算法比较精准,但是计算过程较为复杂,工程中为了计算方便通常采用一种EXCEL高斯投影算法,软件设计中进行详细说明。
图1 系统软件结构
软件以VB为开发平台进行设计,主要包括系统初始化、GPS数据接收提取、坐标变换及信息显示等几个部分(图1)。 下面针对几个关键模块设计进行说明。
3.1GPS数据接收提取模块分析
图2 GPS数据接收提取流程
模块输出的数据通过串口进入电脑后,将会被放入缓冲区,依次判断缓冲区字母是不是GPS数据头“$”(ASCII码13),遇到“$”后再判断“$”后跟的字母是不是“GPRMC”,是就进入数据提取,不是就再次寻找下一个“$”。如果检测到“GPRMC”字段,则开始从GPRMC后面跟的数据中提取有用信息。如果不是则清空缓存,寻找下一个“$”,对经纬度、时间、日期的提取使用Mid()函数,Trim()函数用来去掉空格,软件流程如图2所示,信息提取部分代码如下:
If Mid(Trim(temp_buffer), 2, 6) = “$GPRMC” Then
ShiJian.Text = Mid(Trim(temp_buffer), 9, 2) + 8 amp; “:” amp; Mid(Trim(temp_buffer), 11, 2) amp; “:” amp; Mid(Trim(temp_buffer), 13, 2) //提取格林时间+8为北京时间
RiQi.Text = Mid(Trim(temp_buffer), 60, 2) amp;“年” amp; Mid(Trim(temp_buffer), 58, 2) amp;“月” amp; Mid(Trim(temp_buffer), 56, 2) amp; “日” //提取年月日信息
WeiDu.Text = Mid(Trim(temp_buffer), 29, 1) amp; “:” amp; Mid(Trim(temp_buffer), 18, 2) amp; “°” amp; Mid(Trim(temp_buffer), 20, 2) amp; “’”amp; Mid(Trim(temp_buffer), 23, 2)
JingDu.Text = Mid(Trim(temp_buffer), 43, 1) amp; “:” amp; Mid(Trim(temp_buffer), 31, 3) amp; “°” amp; Mid(Trim(temp_buffer), 34, 2) amp; “’”amp; Mid(Trim(temp_buffer), 37, 2)
End if
提取完后还应该对当前数据有效性进行判断,但语句中导航定位标志为“A”时当前数据有效,而当标志为“V”时,当前数据无效,需重新接收。
3.2经纬度向高斯平面坐标的转换模块分析
经纬度不能直接在二维平面上刻画所处位置,所以需要将经纬度转换为高斯平面坐标,首先要将接收到的经纬度字符数值化,转化为可以计算的数值,才能进一步转换为高斯平面坐标。将经纬度数值化采用val()函数,得到数值型的经纬度后还要将其单位统一都化为度,即是将分位除以60,秒位除以3600。代码如下:
E2 =Val(Mid(Trim(temp_buffer), 18, 2)) + Val(Mid(Trim(temp_buffer), 20, 2)) / 60 + Val(Mid(Trim(temp_buffer), 23, 2)) / 3600
F2 =Val(Mid(Trim(temp_buffer), 31, 3)) + Val(Mid(Trim(temp_buffer), 34, 2)) / 60 + Val(Mid(Trim(temp_buffer), 37, 2) ) / 3600
得到度形式的经纬度后,按照EXCEL进行高斯投影换算的方法编写程序进行计算。代码如下:A2 输入中央子午线,以度分秒形式输入:
B2 = Int(A2) + (Int(A2 * 100) - Int(A2) * 100) / 60 + (A2 * 10000 - Int(A2 * 100) * 100) / 3600
H2 = (F2 - B2) / 57.2957795130823’将经差的单位化为弧度
I2 = Tan(E2 / 57.2957795130823) ’Tan (B)
J2 = Cos(E2 / 57.2957795130823)’Cos (B)
K2 = 0.006738525415 * J2 * J2
L2 = I2 * I2
M2 = 1 + K2
N2 = 6399698.9018 / Sqr(M2)
O2 = H2 * H2 * J2 * J2
P2 = I2 * J2
Q2 = P2 * P2
R2 = (32005.78006 + Q2 * (133.92133 + Q2 * 0.7031))
S2 = ((((L2 - 18) * L2 - (58 * L2 - 14) * K2 + 5) * O2 / 20 + M2 - L2) * O2 / 6 + 1) * N2 * (H2 * J2)
S2 = S2 + 18500000’在计算的基础上加上了“带号”(18)和“东移”(500KM)
T2 = 6367558.49686 * E2 / 57.29577951308 - P2 * J2 * R2 + ((((L2 - 58) * L2 + 61) * O2 / 30 + (4 * K2 + 5) * M2 - L2) * O2 / 12 + 1) * N2 * I2 * O2 / 2
最后得到的T2和S2即是横坐标X和纵坐标Y[2]。
3.3轨迹显示模块分析
轨迹显示在图片框Picture中,设置画笔粗细为10,画笔的颜色为红色,利用当前经纬度计算得到的高斯平面坐标X,Y在图片框中打点。代码如下:
Picture1.DrawWidth = 10 Picture1.PSet (T2, S2), vbRed
对于一些特别的点,需要显示它的具体地名,预先将要显示地名的点的经纬度测出来并保存在程序中,当程序运行遇到这些经纬度时就可以利用文本框显示相对应的地名,当没有遇到相对应的经纬度时文本框就显示为空。
图3 GPS硬件连接图
将GPS室外天线接在GPS接收机上,数据从接收机的RS232接口输出,将一根RS232转USB的数据线和电脑PC机的USB接口相连,如图3所示。
试验地点为贵州大学第三实验楼6楼开阔平台上,选取平台某点,并预先知道贵阳当地的中央子午线为105°(L0=6*N -3)。当天线定位在平台时显示出时间,日期,经纬度,高斯平面坐标,轨迹点在整个蔡家关校区中的位置以及当前位置“平台”。界面如图4所示。
图4 位于平台某点时的界面图
该设计完成了对GPS模块输出数据的时间、日期、经纬度等信息的提取 ,通过文字或者图形的方式将它直接显示在了屏幕上,具有简单实用的特点。特别是该数据提取方法可作为其他GPS应用的参考。
[1]董金壮,赵渊新,刁芹元. 高斯投影变换程序的编写[A]. 郭海棠. 新疆有色金属[C]. 新疆:新疆哈密金矿,2003:8~10.
[2]刘大杰,施一民.全球定位系统(GPS)的原理与数据处理[M]. 上海:同济大学出版社,1996.
[编辑] 易国华
TP311.11
A
1673-1409(2009)04-N054-03