李國(guó)良,陳明嵐
(貴州大學(xué)電子信息技術(shù)實(shí)驗(yàn)室,貴州 貴陽(yáng) 550003)
基于VB的GPS數(shù)據(jù)接收及軌跡顯示設(shè)計(jì)
李國(guó)良,陳明嵐
(貴州大學(xué)電子信息技術(shù)實(shí)驗(yàn)室,貴州 貴陽(yáng) 550003)
主要闡述了基于VB平臺(tái)的GPS數(shù)據(jù)接收及軌跡顯示的軟件設(shè)計(jì)。系統(tǒng)將提取出的GPS模塊輸出數(shù)據(jù)中的時(shí)間、日期、經(jīng)度、緯度等經(jīng)緯度信息轉(zhuǎn)換為高斯平面坐標(biāo),最終以打點(diǎn)的方式顯示當(dāng)前軌跡,并顯示某些特定點(diǎn)的位置名稱。
GPS模塊;GPS數(shù)據(jù)提??;軌跡顯示
全球定位系統(tǒng)(GPS)是能夠提供實(shí)時(shí)精確定位、導(dǎo)航和授時(shí)等服務(wù)的空間衛(wèi)星導(dǎo)航定位系統(tǒng)?,F(xiàn)在GPS技術(shù)不僅僅局限于軍事上的應(yīng)用,在人們的日常生活中也屢見(jiàn)不鮮,如車載GPS定位等都與人們的生活密切相關(guān)。目前,市場(chǎng)上有很多GPS硬件模塊可供大家選擇,但在具體的應(yīng)用中還須結(jié)合自己的需要編寫(xiě)相應(yīng)的軟件才能實(shí)現(xiàn)。筆者就是基于VB開(kāi)發(fā)平臺(tái)介紹了GPS模塊數(shù)據(jù)接收和軌跡顯示的軟件設(shè)計(jì)過(guò)程,簡(jiǎn)單實(shí)用,以供大家參考。
NMEA 0183 協(xié)議為GPS接收機(jī)和其他航海電子產(chǎn)品的導(dǎo)航數(shù)據(jù)輸出格式,是目前普遍使用且為大多數(shù)生產(chǎn)商遵循的協(xié)議之一,輸出標(biāo)準(zhǔn)的ASCII碼形式的數(shù)據(jù)信息,有GPGGA,GPGSA,GPGSV,GPRMC,GPZDA和GPGLL等多種數(shù)據(jù)格式可供選擇使用,各種句型均以“$”開(kāi)頭,輸出格林時(shí)間、經(jīng)緯度、用于定位的星體個(gè)數(shù)、幾何精度、天線高度、航跡向、磁航向、磁差、校驗(yàn)碼、速度等信息。每個(gè)句子內(nèi)的數(shù)據(jù)之間以逗號(hào)隔開(kāi)。該設(shè)計(jì)中選擇GPRMC數(shù)據(jù)格式。GPS模塊與PC機(jī)串行通訊參數(shù)為:
4800,N,8,1
GPRMC數(shù)據(jù)句型形式如下:
$GPRMC,112831,V,2634.77340,N,10640.20150,E,005.3,041.,130309,*38lt;CRgt;lt;LFgt;…
其中,GP為信息來(lái)源,RMC為句型識(shí)別符,其后依次為UTC時(shí)間(格式為hhmmss)、GPS狀態(tài)(A為定位狀態(tài),V為導(dǎo)航狀態(tài))、緯度、緯度符號(hào)(N或S)、經(jīng)度、經(jīng)度符號(hào)(E或W)、速率(單位為公里)、UTC日期(格式為ddmmyy)和校驗(yàn)碼。
WGS-84坐標(biāo)系是目前GPS所采用的坐標(biāo)系統(tǒng),GPS所發(fā)布的星歷參數(shù)就是基于此坐標(biāo)系統(tǒng)的。但在工程應(yīng)用已有導(dǎo)航設(shè)備中卻常常要用到平面坐標(biāo)X、Y,因此要進(jìn)行軌跡顯示,首先要將得到的經(jīng)緯度等大地坐標(biāo)(B,L)按高斯投影的方法求得高斯平面坐標(biāo),
x=F1(B,L)y=F2(B,L)
高斯投影屬于正形等角投影變換,需滿足一定的條件,其主要的計(jì)算公式如下[1]:
式中,B為投影點(diǎn)的大地經(jīng)度;l=L-L0,L為投影點(diǎn)的大地緯度;L0為軸子午線的大地緯度;N為投影點(diǎn)的卯酉圈曲率半徑;t=tanB;η=e′cosB;e′為地球第二偏心率。
雖然上述算法比較精準(zhǔn),但是計(jì)算過(guò)程較為復(fù)雜,工程中為了計(jì)算方便通常采用一種EXCEL高斯投影算法,軟件設(shè)計(jì)中進(jìn)行詳細(xì)說(shuō)明。
圖1 系統(tǒng)軟件結(jié)構(gòu)
軟件以VB為開(kāi)發(fā)平臺(tái)進(jìn)行設(shè)計(jì),主要包括系統(tǒng)初始化、GPS數(shù)據(jù)接收提取、坐標(biāo)變換及信息顯示等幾個(gè)部分(圖1)。 下面針對(duì)幾個(gè)關(guān)鍵模塊設(shè)計(jì)進(jìn)行說(shuō)明。
3.1GPS數(shù)據(jù)接收提取模塊分析
圖2 GPS數(shù)據(jù)接收提取流程
模塊輸出的數(shù)據(jù)通過(guò)串口進(jìn)入電腦后,將會(huì)被放入緩沖區(qū),依次判斷緩沖區(qū)字母是不是GPS數(shù)據(jù)頭“$”(ASCII碼13),遇到“$”后再判斷“$”后跟的字母是不是“GPRMC”,是就進(jìn)入數(shù)據(jù)提取,不是就再次尋找下一個(gè)“$”。如果檢測(cè)到“GPRMC”字段,則開(kāi)始從GPRMC后面跟的數(shù)據(jù)中提取有用信息。如果不是則清空緩存,尋找下一個(gè)“$”,對(duì)經(jīng)緯度、時(shí)間、日期的提取使用Mid()函數(shù),Trim()函數(shù)用來(lái)去掉空格,軟件流程如圖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) //提取格林時(shí)間+8為北京時(shí)間
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
提取完后還應(yīng)該對(duì)當(dāng)前數(shù)據(jù)有效性進(jìn)行判斷,但語(yǔ)句中導(dǎo)航定位標(biāo)志為“A”時(shí)當(dāng)前數(shù)據(jù)有效,而當(dāng)標(biāo)志為“V”時(shí),當(dāng)前數(shù)據(jù)無(wú)效,需重新接收。
3.2經(jīng)緯度向高斯平面坐標(biāo)的轉(zhuǎn)換模塊分析
經(jīng)緯度不能直接在二維平面上刻畫(huà)所處位置,所以需要將經(jīng)緯度轉(zhuǎn)換為高斯平面坐標(biāo),首先要將接收到的經(jīng)緯度字符數(shù)值化,轉(zhuǎn)化為可以計(jì)算的數(shù)值,才能進(jìn)一步轉(zhuǎn)換為高斯平面坐標(biāo)。將經(jīng)緯度數(shù)值化采用val()函數(shù),得到數(shù)值型的經(jīng)緯度后還要將其單位統(tǒng)一都化為度,即是將分位除以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
得到度形式的經(jīng)緯度后,按照EXCEL進(jìn)行高斯投影換算的方法編寫(xiě)程序進(jìn)行計(jì)算。代碼如下:A2 輸入中央子午線,以度分秒形式輸入:
B2 = Int(A2) + (Int(A2 * 100) - Int(A2) * 100) / 60 + (A2 * 10000 - Int(A2 * 100) * 100) / 3600
H2 = (F2 - B2) / 57.2957795130823’將經(jīng)差的單位化為弧度
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’在計(jì)算的基礎(chǔ)上加上了“帶號(hào)”(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即是橫坐標(biāo)X和縱坐標(biāo)Y[2]。
3.3軌跡顯示模塊分析
軌跡顯示在圖片框Picture中,設(shè)置畫(huà)筆粗細(xì)為10,畫(huà)筆的顏色為紅色,利用當(dāng)前經(jīng)緯度計(jì)算得到的高斯平面坐標(biāo)X,Y在圖片框中打點(diǎn)。代碼如下:
Picture1.DrawWidth = 10 Picture1.PSet (T2, S2), vbRed
對(duì)于一些特別的點(diǎn),需要顯示它的具體地名,預(yù)先將要顯示地名的點(diǎn)的經(jīng)緯度測(cè)出來(lái)并保存在程序中,當(dāng)程序運(yùn)行遇到這些經(jīng)緯度時(shí)就可以利用文本框顯示相對(duì)應(yīng)的地名,當(dāng)沒(méi)有遇到相對(duì)應(yīng)的經(jīng)緯度時(shí)文本框就顯示為空。
圖3 GPS硬件連接圖
將GPS室外天線接在GPS接收機(jī)上,數(shù)據(jù)從接收機(jī)的RS232接口輸出,將一根RS232轉(zhuǎn)USB的數(shù)據(jù)線和電腦PC機(jī)的USB接口相連,如圖3所示。
試驗(yàn)地點(diǎn)為貴州大學(xué)第三實(shí)驗(yàn)樓6樓開(kāi)闊平臺(tái)上,選取平臺(tái)某點(diǎn),并預(yù)先知道貴陽(yáng)當(dāng)?shù)氐闹醒胱游缇€為105°(L0=6*N -3)。當(dāng)天線定位在平臺(tái)時(shí)顯示出時(shí)間,日期,經(jīng)緯度,高斯平面坐標(biāo),軌跡點(diǎn)在整個(gè)蔡家關(guān)校區(qū)中的位置以及當(dāng)前位置“平臺(tái)”。界面如圖4所示。
圖4 位于平臺(tái)某點(diǎn)時(shí)的界面圖
該設(shè)計(jì)完成了對(duì)GPS模塊輸出數(shù)據(jù)的時(shí)間、日期、經(jīng)緯度等信息的提取 ,通過(guò)文字或者圖形的方式將它直接顯示在了屏幕上,具有簡(jiǎn)單實(shí)用的特點(diǎn)。特別是該數(shù)據(jù)提取方法可作為其他GPS應(yīng)用的參考。
[1]董金壯,趙淵新,刁芹元. 高斯投影變換程序的編寫(xiě)[A]. 郭海棠. 新疆有色金屬[C]. 新疆:新疆哈密金礦,2003:8~10.
[2]劉大杰,施一民.全球定位系統(tǒng)(GPS)的原理與數(shù)據(jù)處理[M]. 上海:同濟(jì)大學(xué)出版社,1996.
[編輯] 易國(guó)華
TP311.11
A
1673-1409(2009)04-N054-03
長(zhǎng)江大學(xué)學(xué)報(bào)(自科版)2009年10期