蔡足根,陸柏樹
(湖北省水文地質(zhì)工程地質(zhì)勘察院,湖北荊州 434100)
手持 GPS是目前地質(zhì)工作中常用的工具,但由于其坐標(biāo)投影格式和數(shù)據(jù)輸入的問題,給大多數(shù)地質(zhì)工作者帶來了一定的困惑和苦惱。
對于要求出二個坐標(biāo)系之間的轉(zhuǎn)換參數(shù),需要進行大量而復(fù)雜的計算工作,如果利用手工的計算方法,既費時又費力,而且計算精度也相對較低。對于大量坐標(biāo)數(shù)據(jù)的手工輸入,更是一個相當(dāng)繁瑣的工作,且輸入的數(shù)據(jù)出錯率較高。要實現(xiàn)坐標(biāo)數(shù)據(jù)的高效轉(zhuǎn)換和快速傳輸,可以利用多種編程語言來編寫軟件,解決坐標(biāo)數(shù)據(jù)自動化轉(zhuǎn)換和自動化傳輸?shù)膯栴}。
由于VisualBasic是Windows操作系統(tǒng)下一種面向用戶的編程語言。它沿用了一些標(biāo)準(zhǔn) Basic的函數(shù)和編程風(fēng)格,同時又有許多新的函數(shù)適合于Windows操作系統(tǒng)使用。采用 VB(VisualBasic)編寫的軟件,編譯后具有很強的獨立性和可移植性,VisualBasic6.0目前也是眾多流行的編程軟件之一。
根據(jù)作者多年工作經(jīng)驗和總結(jié),成功地利用VB解決了坐標(biāo)投影轉(zhuǎn)換和批量數(shù)據(jù)輸入手持 GPS的問題。該方法簡單實用,可以在物化探和地質(zhì)測繪,特別是在中小比例尺放樣中得到廣泛使用。作者在本文的主體思路是通過 VB,將各種坐標(biāo)數(shù)據(jù)轉(zhuǎn)換成 WGS-84坐標(biāo)數(shù)據(jù),并生成 Mapsource能識別的 gpx文件,Mapsource可以通過自身內(nèi)部程序,自動地將WGS-84坐標(biāo)轉(zhuǎn)換成自定義坐標(biāo)系,再將數(shù)據(jù)上傳到 GPS中。
下面以湖北恩施高速公路物探放點測量為例進行詳細(xì)介紹 (已知測線方位 166°,測點間距 150 m,測線長 1800m,測點坐標(biāo)為 BJ-54坐標(biāo),總共13個測點,測線起始點 4+01的坐標(biāo)為 3500532,19437330,終點 4+13的坐標(biāo)為 3498780,19437762)。
作者在本文中,主要針對 GARMINeTrexVenture手持 GPS的數(shù)據(jù)傳輸,采用的軟件有 Visual Basic編程軟件和 GPS傳輸軟件 Mapsource6.5。對于其它型號的手持 GPS,可以采用由廠家提供的傳輸軟件,或下載 EasyGPS等綠色軟件來完成。并且,EasyGPS支持多款手持 GPS的數(shù)據(jù)輸入輸出。
在Mapsource中,任意輸入一條航線并保存它,保存類型設(shè)為“GPS交換格式 (*.gpx)”,文件名為“航點航線.gpx”,以備下一步工作的需要。
gpx文件是一個基于 XML語法和文件格式的文件,主要用來描述和保存地理信息。該文件主要分為四個部份:文件頭、航點屬性、航線屬性和文件尾。首先解讀一下這個文件,利用 window自帶的記事本打開文件“航點航線.gpx”,可以看到從文件開始到 語句描述的是 XML版本、網(wǎng)站信息、格式、創(chuàng)建時間和航線航點分布范圍等,這些內(nèi)容對數(shù)據(jù)傳輸沒有影響,可照搬而不去理會。重點是對航點和航線的描述部份。
(1)航點數(shù)據(jù)格式:從每個
(2)航線數(shù)據(jù)格式:之間為一條航線描述,
對 gpx文件了解之后,現(xiàn)可以通過 VB編寫程序?qū)崿F(xiàn) gpx文件的生成。
在 gpx文件生成器左邊的 TextBox控件中輸入原始數(shù)據(jù),數(shù)據(jù)格式為“編號,X(或 B),Y(或 L)”。如果輸入的數(shù)據(jù)為WGS-84坐標(biāo),則在 Option控件中選擇對應(yīng)的WGS-84坐標(biāo)系;同理,其它數(shù)據(jù)格式對應(yīng)選擇。在填寫和選擇正確后,點擊“生成gpx文件”,即可在右邊的 TextBox控件中顯示出gpx的全部內(nèi)容,在確認(rèn)無誤后點擊“保存 gpx文件 ”即可 (見圖 1)。
圖 1 gpx文件生成器的編制Fig.1 Gpxfilelayoutofgenerator
由于Mapsource只能識別 gpx文件中的 WGS-84坐標(biāo)數(shù)據(jù),所以當(dāng)現(xiàn)有的數(shù)據(jù)為其它坐標(biāo)系時,還應(yīng)將坐標(biāo)數(shù)據(jù)轉(zhuǎn)換成WGS-84坐標(biāo)系。坐標(biāo)轉(zhuǎn)換就是依據(jù)一定的數(shù)學(xué)模型,計算出二個坐標(biāo)系間的轉(zhuǎn)換參數(shù),然后利用所求的轉(zhuǎn)換參數(shù)對其余各點進行轉(zhuǎn)換。研究不同坐標(biāo)系統(tǒng)的坐標(biāo)轉(zhuǎn)換問題,主要是研究不同的空間直角坐標(biāo)系的坐標(biāo)轉(zhuǎn)換問題,合理確定二種坐標(biāo)系的轉(zhuǎn)換參數(shù)是非常關(guān)鍵。一般的是根據(jù)已知的一部份同名點 (也稱公共點)在二個坐標(biāo)系中的坐標(biāo),選擇一定的計算方法進行解算。目前常用的有三點法、多點法和嚴(yán)密平差法等多種方法。在實際工作中,根據(jù)不同的精度要求,可選取不同的方法。二個不同的空間直角坐標(biāo)系有七個轉(zhuǎn)換參數(shù),一般來說,有三個同名點就可以求得轉(zhuǎn)換參數(shù)。關(guān)于坐標(biāo)轉(zhuǎn)換已經(jīng)有相關(guān)論文利用 VB實現(xiàn)過,作者在本文主要用到的是將各種坐標(biāo)數(shù)據(jù)轉(zhuǎn)換成WGS-84坐標(biāo)數(shù)據(jù),具體原理和實現(xiàn)過程可見參考文獻[2],這里就不再詳細(xì)介紹了。
為了敘述方便,現(xiàn)將WGS-84坐標(biāo)轉(zhuǎn)換數(shù)據(jù)在VB模塊中用一個公式來描述:PublicSubXY_To_LB(XAsDouble,YAsDouble,BAsDouble,L AsDouble,MAsInteger),其中 X、Y為待轉(zhuǎn)換的坐標(biāo),B、L為轉(zhuǎn)換后緯度和經(jīng)度坐標(biāo),M為待轉(zhuǎn)換坐標(biāo)的格式。
根據(jù) gpx文件解讀可知,gpx文件由四個部份組成,文件頭、航點屬性、航線屬性和文件尾。
3.3.1 生成 gpx文件
PrivateSubCommand1_Click()
DimS$,SS$,SSS$,SSSS$,S0$,S1$,S2$,S3$,S4$,temp$,txt1$,txt2$
DimSZ1$(),N $,A1$
DimA2#,A3#,WD#,JD#
S=" xsi:schemaLocation =""http://www.topografix.com/GPX/1/1http://www.topografix.com/GPX/1/1/gpx.xsd"">" S0=" S3="" S4="" SZ1()=Split(Text1,vbCrLf)′以下為分列讀取坐標(biāo)數(shù)據(jù) Fori=0ToUBound(SZ1) IfInStr(SZ1(i),",")<>0Then A1= (Mid(SZ1(i),1, (InStr(SZ1(i),",")-1))) ′讀取第 1列 A2=Val(Mid(SZ1(i),InStr(SZ1(i),",") + 1, InStr(InStr(SZ1(i),",") + 1,SZ1(i),",")-1))′讀取第 2列 A3=Val(Mid(SZ1(i),InStr(InStr(SZ1(i),",")+1,SZ1(i),",")+1))′讀取第3列 EndIf IfOption1.ValueThen ′即為 54坐標(biāo) CallXY_To_LB(A2,A3,WD,JD,1) txt1= txt1&" txt2= txt2&" ElseIfOption2.ValueThen ′即為 80坐標(biāo) CallXY_To_LB(A2,A3,WD,JD,2) txt1= txt1&" txt2= txt2&" Else ′即為 84坐標(biāo) txt1=txt1&" txt2= txt2&" EndIf Nexti S2=A1′讀取航線終點 Text2.Text=S&vbCrLf&SS&vbCrLf&txt1&S0&S1&"TO"&S2&S3&vbCrLf&txt2&S4′顯示到 text2.text EndSub 3.3.1 保存 gpx文件 PrivateSubCommand2_Click()′保存 gpx文件 DimFName1$ CommonDialog1.DialogTitle="另存轉(zhuǎn)換數(shù)據(jù)文件" CommonDialog1.Filter="轉(zhuǎn)換數(shù)據(jù) (*.gpx)|*.gpx" CommonDialog1.FileName="" CommonDialog1.ShowSave FName1=CommonDialog1.FileName IfFName1=""ThenExitSub OpenFName1ForOutputAs#1 Print#1,Text2.Text Close#1 EndSub 3.4.1 原始數(shù)據(jù)分隔符的處理 根據(jù)數(shù)據(jù)本身的特點以及使用者的愛好,原始數(shù)據(jù)使用分隔符可能會不一樣,為了使該程序適用更廣,現(xiàn)對原始數(shù)據(jù)分隔符作適當(dāng)?shù)念A(yù)處理,將各種不同的數(shù)據(jù)分隔符全部替換成一種分隔符。以下編寫了一個公式 TH(),對十個不同的數(shù)據(jù)分隔符全部替換成以“,”分隔。筆者也可以根據(jù)自己的習(xí)慣或愛好去修改,詳細(xì)代碼如下: FunctionTH(TxtAsString) Txt=Replace(Txt,"",",") ′3個空格分隔 Txt=Replace(Txt,"",",")′2個空格分隔 Txt=Replace(Txt,"",",")′1個空格分隔 Txt=Replace(Txt,Chr(9),",") ′tab分隔 Txt=Replace(Txt,";",",") ′;分隔 Txt=Replace(Txt,":",",") ′:分隔 Txt=Replace(Txt,Chr(-23636),",")′,分隔 Txt=Replace(Txt,Chr(-24158),",")’、分隔 Txt=Replace(Txt,Chr(-23621),",")′;分隔 Txt=Replace(Txt,Chr(-23622)",") ′:分隔 EndFunction 其中,Txt為要替換的文本內(nèi)容。 3.4.2 gpx文件編碼轉(zhuǎn)換 由VB直接生成的文本文件編碼都是 ANSI,而Mapsource只能識別UTF-8編碼。要將一個文本文檔的編碼修改成 UTF-8格式有二種方法,一種是手動修改,直接將文本文檔選擇 UTF-8編碼另存即可;另一種就是編寫 VB代碼自動實現(xiàn),同樣可以編寫一個轉(zhuǎn)換公式 ConvUTF8(),詳細(xì)代碼如下: FunctionConvUTF8(FPathAsString) DimADO_StreamAsObject DimB()AsByte ReDimB(FileLen(FPath)) OpenFPathForBinaryAs#1 Get#1,,B Close#1 D=StrConv(B,vbUnicode) SetADO_Stream=CreateObject("ADODB. Stream") WithADO_Stream .Type=2 .Mode=3 .Charset="UTF-8" .Open .WritetextD .SaveToFileFPath,adSaveCreateOverWrite .Close EndWith EndFunction 其中 FPath為待轉(zhuǎn)換文本文件的路徑。 由于大多數(shù)工區(qū)坐標(biāo)系都是用戶自定義坐標(biāo)系,為了開展工作方便,可以將 GPS的坐標(biāo)系統(tǒng)設(shè)置成用戶自定義坐標(biāo)系。湖北恩施高速公路給定測點坐標(biāo)系為 BJ-84,為了使用方便,現(xiàn)將 GPS中的坐標(biāo)系統(tǒng)通過用戶自定義的方式設(shè)置成 BJ-54坐標(biāo),具體操作如下: (1)進入 GPS主菜單頁面的“設(shè)置”子頁面中,按動方向鍵選擇“單位”,按輸入鍵進入坐標(biāo)設(shè)置的頁面,將“位置格式”的選項改為“UserUTM Grid”(自定義坐標(biāo)格式)。在出現(xiàn)的參數(shù)頁面中,輸入相關(guān)的參數(shù),參數(shù)包括中央經(jīng)線 (根據(jù)當(dāng)?shù)氐乩砦恢么_定,本次工作區(qū)為 111°),投影比例 (該值為 1),東西偏差 (該值為 500000.0)以及南北偏差 (該值為 0)。 (2)按下屏幕上的“存儲”按鈕后,再將“地圖基準(zhǔn)”(有的 GPS稱之為“坐標(biāo)系統(tǒng)”)的選項改為“User”(自定義坐標(biāo)系統(tǒng))。在出現(xiàn)的參數(shù)頁面中輸入相關(guān)參數(shù),包括 DX、DY、DZ、DA和 DF。對于BJ-54坐標(biāo)系,DA的值為 -108,DF的值為0.0000005。按下屏幕上的“存儲”按鈕后,GPS顯示的坐標(biāo)點格式為 BJ-54坐標(biāo)格式。如果是80坐標(biāo) ,則 DA=-3,DF=0。 DX、DY及 DZ三個參數(shù)因地區(qū)而異,具體的求解辦法這里就不作詳細(xì)介紹了,相信大家都知道。在這里,作者根據(jù)該工區(qū)現(xiàn)場條件,求解得到DX=-6,DY=-110,DZ=-48。 為了保證數(shù)據(jù)在同一個坐標(biāo)系中傳輸,Mapsource的設(shè)置應(yīng)與 GPS設(shè)置一致,具體操作如下: (1)進入編輯 /首選項 /位置進入坐標(biāo)設(shè)置的頁面,將“格網(wǎng)”中的選項改為“用戶定義的格網(wǎng)”,然后在“屬性”選項中,將參數(shù)設(shè)置與 GPS相一致。 (2)將“地圖基準(zhǔn)”的中選項改為“用戶定義的地圖基準(zhǔn)”,在“屬性”選項中設(shè)置相應(yīng)的參數(shù),參數(shù)包括 DeltaX、DeltaY、DeltaZ、Delta半長和 Delta扁 ,其值依次與 GPS中的 DX、DY、DZ、DA和 DF對應(yīng)。 當(dāng)參數(shù)設(shè)置好后,利用Mapsource程序打開剛保存過的 gpx文件,在Mapsource可以看到十三個航點和一條航線,這時數(shù)據(jù)就全部調(diào)入到 Mapsource中了。然后,將手持 GPS與 Mapsource軟件對接,點擊“發(fā)送到設(shè)備”按鈕,選擇傳輸航線,數(shù)據(jù)就全部上傳到手持 GPS上了,此時 GPS上的數(shù)據(jù)顯示為設(shè)置好的BJ-54坐標(biāo)?,F(xiàn)在就可以利用它到野外進行導(dǎo)航、定點了。 以上主要闡述了一條航線的生成方法,讀者也可以根據(jù)以上原理,編寫多條航線或航跡的 gpx文件。 由于傳統(tǒng)的野外地質(zhì)記錄方式及其地質(zhì)人員對硬件設(shè)施的運用現(xiàn)狀,致使許多數(shù)據(jù)點的轉(zhuǎn)換和傳輸還經(jīng)常要人工進行操作,這樣難以提高工作效率,同時增加了出錯率。利用 VB實現(xiàn)了坐標(biāo)投影轉(zhuǎn)換和批量數(shù)據(jù)輸入 GPS,極大地方便了地質(zhì)資料的整理、管理和利用。 [1] 劉大杰,施一民,過靜珺.全球定位系統(tǒng) (GPS)的原理與數(shù)據(jù)處理[M].上海:同濟大學(xué)出版社,1997. [2] 宋順安,陳懷爭.利用 VB實現(xiàn)手持 GPS成果坐標(biāo)系轉(zhuǎn)換的方法[J].測繪技術(shù)裝備,2007,9(2):9. [3] GARMIN公司.eTrexVenture-奇遇 GPS使用手冊[S].北京:GARMIN公司,2006. [4] 王聲喜 ,康寶林.Mapsource與 Excel、MapGIS相結(jié)合在化探中的應(yīng)用 [J].物探化探計算技術(shù),2009,31(2):169. [5] 宋丙劍,張艷軍.記事本、Excel在 Mapsource和 Mapgis數(shù)據(jù)轉(zhuǎn)換中的應(yīng)用探討 [J].礦山測量,2008,(2):27. [6] 劉凡珍 ,郭玉軍 ,孫萍 ,等.GPS與 Excel、Mapgis相結(jié)合在化探工作中的應(yīng)用[J].吉林地質(zhì),2007,26(1):61. [7] 中海達公司.Coord4.0使用說明書[R].廣州:中海達公司,2004. [8] GARMIN公司.Mapsource使用說明書 [R].北京:GARMIN公司.2004. [9] 王會鋒,彭立華,安興,等.GPS技術(shù)在化探工作中的應(yīng)用[J].物探與化探,2008,32(5):477. [10]李鵬,楊婷婷,王秋菊,等.手持 GPS的功能及其在野外調(diào)查中的應(yīng)用 [J].內(nèi)蒙古農(nóng)業(yè)科技.2008,(05):98。 [11]王建宏.用 VB實現(xiàn) GPS信息處理 [J].微型電腦應(yīng)用.2007,23(1):43. [12]張云.手持 GPS坐標(biāo)系統(tǒng)轉(zhuǎn)換參數(shù)的求解方法[J].西部探礦工程.2006,18(8):46. [13]周忠謨.GPS衛(wèi)星測量原理與應(yīng)用 (修訂版)[M].北京:測繪出版社,2004. [14]杜大彬,張寬房,張開盾,等.手持 GPS坐標(biāo)系轉(zhuǎn)換方法[J].陜西地質(zhì).2007,35(01):96.3.4 程序設(shè)計中一些技術(shù)問題的處理
4 數(shù)據(jù)傳輸?shù)?GPS
4.1 手持 GPS設(shè)置
4.2 Mapsource設(shè)置
4.3 數(shù)據(jù)傳輸?shù)?GPS
5 結(jié)語