朱向榮
(1. 武警黃金第八支隊,新疆 烏魯木齊 830057)
手持式GPS儀點位數據的批量導入方法
朱向榮1
(1. 武警黃金第八支隊,新疆 烏魯木齊 830057)

以Garmin's 72手持式GPS儀為例,討論了點位數據向GPS儀批量導入的原理,并給出了利用Excel表格進行計算并輸出GPS交換格式文件的具體解決方案。本方法具有數據處理自動化、精度可靠的特點,適合物化探測量中大批量點位數據的處理。
GPS;點位數據;導入;交換格式文件
目前,在地勘單位手持式GPS儀已成為標準配置,尤其在大面積物化探測量中利用其進行測點的放樣定位具有相當大的優勢。但針對圖上設計點位如何快速導入GPS儀這個問題,各個單位方法不盡相同。本人結合實際,總結出了利用Excel表格進行計算并輸出Mapsource軟件的GPS交換格式文件的具體解決方案。
1.1 手持式GPS儀工作原理
利用手持式GPS儀進行導航定位時,其內部對衛星信號的解算采用的是WGS84坐標系統,成果是經緯度及海拔高程,再通過用戶設置的改正參數將其反算至用戶坐標系統進行保存(一般地勘工作中均設置成高斯平面直角坐標進行保存)。在Garmin's 72配套軟件Mapsource中,設置好與手持GPS儀一致的參數后,就可進行計算機與GPS儀的數據交換。通過對交換格式文件的分析,本人注意到,其中的點位坐標數據均為GPS儀內部運算數據,即以(°)為單位的WGS84經緯度坐標。這就意味著,用戶要將用戶坐標系統中高斯平面直角坐標導入GPS儀,除采用在GPS儀上手動輸入坐標外,必須先將其根據設置的改正參數換算到WGS84經緯度坐標,然后編成交換文件導入GPS儀。前者速度慢、容易出錯,后者雖能批量導入數據,但對不了解坐標系統轉換原理的普通用戶來說是一件很麻煩的事。
1.2 不同坐標系統與WGS84的轉換原理[1]
當前地質工作中常用的地理底圖其坐標系統基本有兩種:54北京坐標系或80西安坐標系。將WGS84坐標系與這兩種坐標系進行轉換的標準程序一般需要5個環節:①高斯平面直角坐標系到大地坐標系→②大地坐標系到地心坐標系→③地心坐標系到地心坐標系→④地心坐標系到大地坐標系→⑤大地坐標系到高斯平面直角坐標系(具體到本文所要解決的問題,執行到第④環節即可)[2-6]。
②環節的轉換公式如下[3,7]:

其中,(X,Y,Z)為地面點空間直角坐標;(B,L,H)為其大地坐標;N為卯酉圈曲率半徑;e為第一偏心率。
③環節的簡化公式(不考慮旋轉及尺度因子變化)如下:

其中,(XS,YS,ZS)為地面點在WGS84坐標系下的空間直角坐標;(XT,YT,ZT)為其在用戶坐標系下的空間直角坐標;(dX,dY,dZ)為兩套空間直角坐標之差(即GPS儀中所需設定的改正參數)。
④環節的轉換公式如下[3]:

其中,a為參考橢球長半軸;b為參考橢球短半軸;e'為第二偏心率,其他符號同②環節。
1.3 GPS交換格式文件
GPS交換格式文件是Mapsource所能識別的一種擴展名為“.gpx”的文本文件,可將其分為兩部分:第一部分可不作改動,在所有交換文件中均可直接利用;第二部分才是具體測點信息,須根據具體測點數據編制。
第一部分內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.5" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"><metadata><link href="http:// www.garmin.com"><text>Garmin International</text></ link><time>2013-05-17T13:24:00Z</time><bounds maxlat="48.15" maxlon="88.05" minlat="48.14" minlon="88.05"/></metadata>
第二部分格式如下:
<wpt lat="北 緯" lon="東 經" ><ele>高 程</ ele><name>點號</name><sym>Waypoint</sym></wpt>
<wpt lat="北緯" lon="東經"><name>點號</ name><sym>Waypoint</sym></wpt>
分析GPS交換格式文件結構發現,只要算出測點的經緯度坐標,然后按其第二部分格式進行排列輸出即可,而這樣的功能在Excel表格中利用VBA編程可輕松實現。如圖1所示,在Excel表格中建立起固定格式的模板,將以上交換文件的第一部分內容復制到“K3”單元格中;在“L2”至“L5”中依次輸入以下內容:CGCS2000、西安80、北京54、WGS84;在“M2”、“M3”中分別輸入:是、否;在“K1”中輸入:=IF(J3="是",1,2);在“K2”中輸入:=COUNT(B4:B65536);在“K4”中輸入:";在“L1”中輸入:=IF(B2="CGCS2000",1,IF(B2="西安80",2,IF(B2="北京54",4,5)));對“B2”設置數據有效性為:來源于“L2:L5”的序列;對“J3”設置數據有效性為:來源于“M2:M3”的序列;賦予表中按鈕相應代碼。至此模板制作完成。

圖1 GPS儀上傳數據輸出表
將確定好的相關改正參數輸入表中,然后將用戶坐標系內的測點設計數據復制到從“A4”開始的相應單元格,按動“輸出”按鈕即可批量完成從用戶直角坐標到WGS84經緯度的計算及GPS交換格式文件的生成。
按鈕代碼如下:
Private Sub 清空()
Range("A4:D65536").Select
Selection.ClearContents
Range("A3").Select
MsgBox "計算數據已清空!", 48
End Sub
Private Sub輸出()
Dim M1 As Double,M2 As Double,M5 As Double,M6 As Double,M7 As Double
Dim M8 As Double,M9 As Double,M10 As Double, F3 As Integer
Dim N As Double, N2 As Double
Q = Range("G3")
T = Range("H3")
P = Range("I3")
S = Range("K2")
N = Range("F3")
F1 = Range("K4")
F2 = Range("K1")
F3 = Range("L1")
Dim Path1 As String, Path2 As String
Path1 = ActiveWorkbook.FullName
Path2 = Range("E3") & "號GPS儀上傳數據.gpx"
Open Path2 For Output As #1
F = Range("K3")
Print #1, F
For I = 1 To S
Range("A3").Select
M = ActiveCell.Offset(I, 0).Range("A1")
M1 = ActiveCell.Offset(I, 1).Range("A1")
M2 = ActiveCell.Offset(I, 2).Range("A1")
M5 = ActiveCell.Offset(I, 3).Range("A1")
M6 = B(M1, M2, N, F3, 0, 0)
M7 = L(M1, M2, N, F3, 0, 0)
If F3 = 5 Then
M3=Round(WorksheetFunction.Degrees(HD(M6)), 8)
M4=Round(WorksheetFunction.Degrees(HD(M7)), 8)
Else
M8 = KX(M6, M7, M5, F3) + Q
M9 = KY(M6, M7, M5, F3) + T
M10 = KZ(M6, M7, M5, F3) + P
M3=Round(WorksheetFunction.Degrees (HD(DB(M8, M9, M10, 5))), 8)
M4=Round(WorksheetFunction.Degrees (HD(DL(M8, M9, M10, 5))), 8)
End If
If M5 = 0 Then
If F2 = 1 Then
F = "<wpt lat=" & F1 & M3 & F1 & " lon=" & F1 & M4 & F1 & "><name>" & "s" & M & "</name>" & "<sym>Waypoint</sym></wpt>"
Else
F = "<wpt lat=" & F1 & M3 & F1 & " lon=" & F1 & M4 & F1 & "><name>" & M & "</name>" & "<sym>Waypoint</sym></wpt>"
End If
Else
If F2 = 1 Then
F = "<wpt lat=" & F1 & M3 & F1 & " lon=" & F1 & M4 & F1 & " ><ele> " & M5 & "</ele><name>" & "s" & M & "</name>" & "<sym>Waypoint</sym></wpt>"
Else
F = "<wpt lat=" & F1 & M3 & F1 & " lon=" & F1 & M4 & F1 & " ><ele> " & M5 & "</ele><name>" & M & "</name>" & "<sym>Waypoint</sym></wpt>"
End If
End If
Print #1, F
Next I
F = "</gpx>"
Print #1, F
Close #1
MsgBox "恭喜您,GPS儀上傳數據已成功導出至默認文件位置!", 48
End Sub
本法在我部某區礦調任務中得到了驗證。該項任務共設計水系沉積物測量采樣點位4 000多點。每天每個作業組在MapGIS圖上劃分作業范圍后,將該范圍內的設計點位的點號、平面坐標等屬性輸出為文本并導入Excel表格,然后利用此模板轉換成GPS交換格式文件導入GPS儀。此法極大地提高了工作效率,避免了外業人員手動輸入坐標容易出錯的可能,減輕了作業人員的勞動強度。從使用效果來說,本方法具有數據處理自動化、精度可靠的特點,對作業人員的要求不高、操作簡易,適合地勘單位物化探測量中大批量點位數據的處理。
[1] 朱向榮.手持GPS儀改正參數的內業確定方法[J].地理空間信息,2014,12(4):136-138
[2] 朱向榮.基于Excel VBA的高斯投影計算解決方案[J].礦山測量,2012(1):43-45
[3] 國家測繪局職業技能鑒定指導中心.測繪綜合能力[M].北京:測繪出版社,2009
[4] 崔明理.控制測量手冊[M].太原:山西科學技術出版社,1999
[5] 覃輝.測量程序與新型全站儀的應用[M].北京:機械工業出版社,2006
[6] 羅冰.GPS手持機坐標系統轉換參數的簡易解算方法[J].地礦測繪,2003,19(2)∶37-38
[7] 朱向榮.基于Excel VBA的常用測量計算問題解決方案[J].地理空間信息,2013,11(5):131-133
P245
B
1672-4623(2014)05-0107-03
10.3969/j.issn.1672-4623.2014.05.039
朱向榮 ,工程師,主要從事工程測量工作。
2013-07-30。