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