朱向荣
(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。