利用Excel的强大计算功能,我们就可以解决许多测量内业计算工作,如果会用VB编程则还可以为Excel添加自定义函数,把一些测量计算的许多过程都可以扩展成Excel的函数,在使用上与Excel自带的函数方法一样。下面就简单介绍一下本人在测量内业计算过程中使用Excel的点技巧,本文由测绘网站站长覃东所写,转载请注明出自“测量员(SurMap.com)”。

在一个工程和项目中,有一批控制点会经常在测量工作和计算过程中用到,如果在计算过程中反复输入会不方便,而且增大了出错的概率。我的做法是在一个工作簿中用一个表(sheet)来存贮所有已知点坐标信息,如图:

控制点

注意在输入的时候要反复进行核对,因以后所有的测量计算都要在这个工作簿中进行,要用到某一个点的坐标时是通过其对应的名字进行引用的,如果在已知点坐标表中的数据出错将导致以后所有的计算结果都是错误的,因此要小心谨慎。

Excel可以给每一个单元格命一个名字,命名的方法很简单,在选中一个单元格后,在输入公式的文本框左边的框直接输入就可以了,也可能通过菜单“插入”、“名称”、“定义”来完成:

名字

在为单元格命名时要遵循一定的规则,比如控制点“BS01”的坐标X所在的单元格,我在命名时就命名为“Xbs01”,同样BS01的Y坐标所对应的单元格就命名为“Ybs01”,高程命名为“Hbs01”,只要遵循一定规则,则在以后的计算过程中在用到这个点的坐标时就可以不假思索地引用就可以了。

涉及到的其它命名规则,如点BS01至BS02间的方位角值单元格命名为“Abs01bs02”,距离则用“Dbs01bs02”。把所有已知的测量控制点的图纸上提供的关键控制点的坐标一并输入到一个表中,同时再建一个表,存贮方位角值,并把需要用到的方位角计算出来,并一一命名:

方位角

计算方位角的函数:azimuth()是通过VBA添加的,代码如下:

’方位角计算函数 Azimuth()
’Sx为起点X,Sy为起点Y
’Ex为终点X,Ey为终点Y
’Style指明返回值格式
’Style=-1为弧度格式
’Style=0为“DD MM SS”格式
’Style=1为“DD-MM-SS”格式
’Style=2为“DD°MMˊSS""”格式
’Style=其它值时返回十进制度值

Function Azimuth(Sx As Double, Sy As Double, Ex As Double, Ey As Double, Style As Integer)
Dim DltX As Double, DltY As Double, A_tmp As Double, Pi As Double
Pi = Atn(1) * 4 ’定义PI值
DltX = Ex - Sx
DltY = Ey - Sy + 1E-20
A_tmp = Pi * (1 - Sgn(DltY) / 2) - Atn(DltX / DltY) ’计算方位角
A_tmp = A_tmp * 180 / Pi ’转换为360进制角度
Azimuth = Deg2DMS(A_tmp, Style)
End Function
 

使用方法:

方位角函数

方位角计算函数中使用到的一个中间格式转换函数代码如下:

’转换角度为度分秒
’Style=-1为弧度格式
’Style=0为“DD MM SS”格式
’Style=1为“DD-MM-SS”格式
’Style=2为“DD°MMˊSS""”格式
’Style=其它值时返回十进制度值
Function Deg2DMS(DegValue As Double, Style As Integer)
Dim tD As Integer, tM As Integer, tS As Double, tmp As Double
tD = Int(DegValue)
tmp = (DegValue - tD) * 60
tM = Int(tmp)
tmp = (tmp - tM) * 60
tS = Round(tmp, 1)
Select Case Style
Case -1 ’返回弧度
Deg2DMS = DegValue * Atn(1) * 4 / 180
Case 0
Deg2DMS = tD & " " & Format(tM, "00") & " " & Format(tS, "00.0")
Case 1
Deg2DMS = tD & "-" & Format(tM, "00") & "-" & Format(tS, "00.0")
Case 2
Deg2DMS = tD & "°" & Format(tM, "00") & "ˊ" & Format(tS, "00.0") & """"
Case Else
Deg2DMS = DegValue
End Select

End Function

Function Distance(Sx As Double, Sy As Double, Ex As Double, Ey As Double, Precision As Integer) As Double
Dim DltX As Double, DltY As Double
DltX = Ex - Sx
DltY = Ey - Sy
Distance = Round(Sqr(DltX * DltX + DltY * DltY), Precision)
End Function
 

在所有的控制点及已知点坐标都输入完毕并命名后,就可以在工作簿中任意一个表中使用共命字进行引用计算:

方位角表

坐标系转换的计算如下:

转换

上图中的COS(ABC)与Sin(ABC)中的“ABC”表示点B至C的方位角。