利用Excel的強(qiáng)大計(jì)算功能,我們就可以解決許多測(cè)量?jī)?nèi)業(yè)計(jì)算工作,如果會(huì)用VB編程則還可以為Excel添加自定義函數(shù),把一些測(cè)量計(jì)算的許多過(guò)程都可以擴(kuò)展成Excel的函數(shù),在使用上與Excel自帶的函數(shù)方法一樣。下面就簡(jiǎn)單介紹一下本人在測(cè)量?jī)?nèi)業(yè)計(jì)算過(guò)程中使用Excel的點(diǎn)技巧,本文由測(cè)繪網(wǎng)站站長(zhǎng)覃東所寫,轉(zhuǎn)載請(qǐng)注明出自“測(cè)量員(SurMap.com)”。
在一個(gè)工程和項(xiàng)目中,有一批控制點(diǎn)會(huì)經(jīng)常在測(cè)量工作和計(jì)算過(guò)程中用到,如果在計(jì)算過(guò)程中反復(fù)輸入會(huì)不方便,而且增大了出錯(cuò)的概率。我的做法是在一個(gè)工作簿中用一個(gè)表(sheet)來(lái)存貯所有已知點(diǎn)坐標(biāo)信息,如圖:
注意在輸入的時(shí)候要反復(fù)進(jìn)行核對(duì),因以后所有的測(cè)量計(jì)算都要在這個(gè)工作簿中進(jìn)行,要用到某一個(gè)點(diǎn)的坐標(biāo)時(shí)是通過(guò)其對(duì)應(yīng)的名字進(jìn)行引用的,如果在已知點(diǎn)坐標(biāo)表中的數(shù)據(jù)出錯(cuò)將導(dǎo)致以后所有的計(jì)算結(jié)果都是錯(cuò)誤的,因此要小心謹(jǐn)慎。
Excel可以給每一個(gè)單元格命一個(gè)名字,命名的方法很簡(jiǎn)單,在選中一個(gè)單元格后,在輸入公式的文本框左邊的框直接輸入就可以了,也可能通過(guò)菜單“插入”、“名稱”、“定義”來(lái)完成:
在為單元格命名時(shí)要遵循一定的規(guī)則,比如控制點(diǎn)“BS01”的坐標(biāo)X所在的單元格,我在命名時(shí)就命名為“Xbs01”,同樣BS01的Y坐標(biāo)所對(duì)應(yīng)的單元格就命名為“Ybs01”,高程命名為“Hbs01”,只要遵循一定規(guī)則,則在以后的計(jì)算過(guò)程中在用到這個(gè)點(diǎn)的坐標(biāo)時(shí)就可以不假思索地引用就可以了。
涉及到的其它命名規(guī)則,如點(diǎn)BS01至BS02間的方位角值單元格命名為“Abs01bs02”,距離則用“Dbs01bs02”。把所有已知的測(cè)量控制點(diǎn)的圖紙上提供的關(guān)鍵控制點(diǎn)的坐標(biāo)一并輸入到一個(gè)表中,同時(shí)再建一個(gè)表,存貯方位角值,并把需要用到的方位角計(jì)算出來(lái),并一一命名:
計(jì)算方位角的函數(shù):azimuth()是通過(guò)VBA添加的,代碼如下:
’方位角計(jì)算函數(shù) Azimuth()
’Sx為起點(diǎn)X,Sy為起點(diǎn)Y
’Ex為終點(diǎn)X,Ey為終點(diǎn)Y
’Style指明返回值格式
’Style=-1為弧度格式
’Style=0為“DD MM SS”格式
’Style=1為“DD-MM-SS”格式
’Style=2為“DD°MMˊSS""”格式
’Style=其它值時(shí)返回十進(jìn)制度值
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) ’計(jì)算方位角
A_tmp = A_tmp * 180 / Pi ’轉(zhuǎn)換為360進(jìn)制角度
Azimuth = Deg2DMS(A_tmp, Style)
End Function
使用方法:
方位角計(jì)算函數(shù)中使用到的一個(gè)中間格式轉(zhuǎn)換函數(shù)代碼如下:
’轉(zhuǎn)換角度為度分秒
’Style=-1為弧度格式
’Style=0為“DD MM SS”格式
’Style=1為“DD-MM-SS”格式
’Style=2為“DD°MMˊSS""”格式
’Style=其它值時(shí)返回十進(jìn)制度值
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
在所有的控制點(diǎn)及已知點(diǎn)坐標(biāo)都輸入完畢并命名后,就可以在工作簿中任意一個(gè)表中使用共命字進(jìn)行引用計(jì)算:
坐標(biāo)系轉(zhuǎn)換的計(jì)算如下:
上圖中的COS(ABC)與Sin(ABC)中的“ABC”表示點(diǎn)B至C的方位角。