吳呂穩(wěn)
摘要:充分利用全站儀的各種功能,用“VB6.0”編寫的程序直接對(duì)全站儀觀測(cè)的記錄數(shù)據(jù)進(jìn)行分析處理,并生成平差文件和觀測(cè)手簿,達(dá)到內(nèi)外業(yè)一體化圖根導(dǎo)線測(cè)量。
關(guān)鍵詞:全站儀;VB6.0;圖根導(dǎo)線觀測(cè);數(shù)據(jù)格式處理;數(shù)據(jù)檢查處理
中圖分類號(hào):C37文獻(xiàn)標(biāo)識(shí)碼: A
1 前言
全站儀在地形、地籍測(cè)量中的廣泛應(yīng)用,使圖根導(dǎo)線觀測(cè)更加準(zhǔn)確、快捷,但大部分的導(dǎo)線平差軟件還不支持與全站儀直接進(jìn)行數(shù)據(jù)交換,平差計(jì)算還需要人工對(duì)全站儀的觀測(cè)數(shù)據(jù)進(jìn)行整理計(jì)算、手工錄入,不僅費(fèi)時(shí)費(fèi)力,還容易產(chǎn)生粗差。
全站儀具有測(cè)距測(cè)角自動(dòng)記錄及傳輸數(shù)據(jù)的自動(dòng)化的功能,本文以topcon系列全站儀為例,利用“VB6.0”編寫的程序,對(duì)觀測(cè)數(shù)據(jù)進(jìn)行分析處理,并進(jìn)行轉(zhuǎn)換、檢查,最終生成清華山維nasew95格式的平差文件及Word格式的導(dǎo)線平差文件。
2 全站儀觀測(cè)數(shù)據(jù)格式
topcon全站儀以測(cè)量模式輸出的原始觀測(cè)數(shù)據(jù)文件一般有兩種,見(jiàn)表1,表2。
表1 斜距(SD)模式
? +01178481 m 0852030 +1203040 d 01174572
ID SD m/f V H d/g/m HD
數(shù)據(jù)識(shí)別符 斜距 距離單位 垂直角 水平角 角度單位 平距
t 00 +00 +25 099 EXT(CRLF)
t/* L P O BCC
傾斜改正(t打開(kāi),*關(guān)閉) 0值 大氣改正數(shù) 棱鏡常數(shù) 塊較驗(yàn)符 結(jié)束符
表2平距/高差(HD/VD)模式
R +01174572 m 0852030 +1203040 d 01174572
ID HD m/f V H d/g/m HD
數(shù)據(jù)識(shí)別符 平距 距離單位 垂直角 水平角 角度單位 平距
t 00 +00 -30 099 EXT(CRLF)
t/* L P O BCC
傾斜改正(t打開(kāi),*關(guān)閉) 0值 大氣改正數(shù) 棱鏡常數(shù) 塊較驗(yàn)符 結(jié)束符
3 程序模塊設(shè)計(jì)思想
程序分為“數(shù)據(jù)預(yù)處理”、“中間數(shù)據(jù)檢查處理”和“平差文件、導(dǎo)線觀測(cè)手簿”三部分。
“數(shù)據(jù)預(yù)處理”模塊:利用VB程序讀取全站儀觀測(cè)數(shù)據(jù)文件,根據(jù)數(shù)據(jù)識(shí)別符對(duì)每測(cè)站的字符串進(jìn)行分解,來(lái)獲取各測(cè)站及觀測(cè)方向點(diǎn)(點(diǎn)名、儀器高、方向名、水平角、垂直角、距離、目標(biāo)高)信息,生成后綴為.ELE的中間文件(*.ELE文件為清華山維nasew95平差軟件的外業(yè)數(shù)據(jù)觀測(cè)格式)。*.ELE以文本格式保存,生成速度快、存取方便,生成的數(shù)據(jù)格式內(nèi)容整齊、便于人工辯讀及除去多余觀測(cè)量。
表3中間文件數(shù)據(jù)格式
*A003,1.610
測(cè)站名,儀器高
004,HZS,000.0000,090.2454,00083.671,1.194
測(cè)站,模式,水平角,垂直角,距離,目標(biāo)高
002,HZS,244.0324,090.0415,00084.636,1.194
----
盤左盤右分隔符
A002,HZS,064.0307,269.5542,00084.636,1.194
A004,HZS,179.5943,269.3453,00083.671,1.194
“中間數(shù)據(jù)檢查處理”:調(diào)用Microsoft Access軟件將*.ELE文件導(dǎo)入到數(shù)據(jù)庫(kù)中,計(jì)算2C、指標(biāo)差、高差等計(jì)算量,使用SQL語(yǔ)言對(duì)測(cè)站的盤左盤右方向名是否相同、2C、指標(biāo)差、對(duì)向邊長(zhǎng)、對(duì)向高差等精度進(jìn)行檢查并生成報(bào)表;
“平差文件、導(dǎo)線觀測(cè)手簿”:對(duì)通過(guò)“中間數(shù)據(jù)檢查處理”的*.ELE文件,從Access數(shù)據(jù)庫(kù)中提取所需數(shù)據(jù),在已知點(diǎn)數(shù)據(jù)文件中提取已知點(diǎn)生成*.MSM文件,直接調(diào)用清華山維nasew95程序打開(kāi)進(jìn)行平差計(jì)算。平差文件直接加載了已知點(diǎn)數(shù)據(jù),減少了人為輸入產(chǎn)生的錯(cuò)誤。
提取Access中的觀測(cè)數(shù)據(jù),在Word軟件中生成導(dǎo)線觀測(cè)手簿(表四),便于后期資料整理。
表四圖根導(dǎo)線觀測(cè)手簿
4 程序代碼
4.1數(shù)據(jù)預(yù)處理
(1)導(dǎo)線參數(shù)設(shè)定
Load Dialog1
Dialog1.Show vbModal‘調(diào)用參數(shù)設(shè)置對(duì)話窗體
Open App.Path & "daoxian.lyb" For Random As #1 Len = Len(DaoXian)‘將導(dǎo)線設(shè)置參數(shù)寫入到二進(jìn)制文件中,方便調(diào)用。
Put #1, 1, DaoXian
(2)讀取原始觀測(cè)數(shù)據(jù)
CommonDialog1.ShowOpen ‘調(diào)用打開(kāi)對(duì)話框
RichTextBox1.LoadFile CommonDialog1.Filename, rtfText ‘打開(kāi)原始觀測(cè)文件,讀取文件內(nèi)容到文本框內(nèi)
(3)數(shù)據(jù)轉(zhuǎn)換(生成*.ELE文件)
TempStr = QuWei(TempStr)‘調(diào)用函數(shù)去掉文本中的CRLF、EXT和塊較驗(yàn)符
利用循環(huán)語(yǔ)句對(duì)每測(cè)站進(jìn)行讀取
Cz = StrHead(TempStr, "_'") ‘測(cè)站信息
If InStr(ch, "_?+") > 0 Then‘判斷邊長(zhǎng)測(cè)量模式
………
對(duì)字符串進(jìn)行分解,根據(jù)設(shè)置的參數(shù)重新組合得到測(cè)站的方向點(diǎn)點(diǎn)名、距離、垂直角、水平角、目標(biāo)高。
End If
RichTextBox1.Text=“”‘清空文本框中的內(nèi)容
RichTextBox1.Text=NewTempStr ‘將處理好的文本寫入到文本框中
CommonDialog1.ShowSave‘彈出保存對(duì)話框
RichTextBox1.SaveFile CommonDialog1.Filename, rtfText
4.2 中間數(shù)據(jù)檢查處理
讀取*.ELE文件→Access→數(shù)據(jù)檢查
(1) *.ELE文件導(dǎo)入Access
Set db = OpenDatabase(App.Path & "Traverse.mdb") ‘設(shè)置數(shù)據(jù)庫(kù)
db.Execute "INSERT INTO [測(cè)站](ID,測(cè)站名,儀器高,文件號(hào)) VALUES(CZGC)"‘讀入測(cè)站信息。
db.Execute "INSERT INTO [方向點(diǎn)](ID,方向名,水平角盤左,垂直角盤左,邊長(zhǎng)讀數(shù)1,覘標(biāo)高,文件號(hào))VALUES(FXGCPZ)" ‘讀入觀測(cè)方向信息。
(2)各項(xiàng)檢查常數(shù)計(jì)算
Set RS = db.OpenRecordset("select * from 方向點(diǎn) where 文件號(hào)=1" )
RS.Edit
RS.Fields(4).Value = (DMS(DEG(RS.Fields(2).Value) - (DEG(RS.Fields(3).Value) - DEG(180)))) * 10000 ‘計(jì)算指標(biāo)差
RS.Fields(5).Value = DMS(DEG(RS.Fields(2).Value) - DEG(RS.Fields(4).Value / 20000)) ‘計(jì)算2C
RS.Fields(6).Value = DMS(DEG(RS.Fields(5).Value) - DEG(Val(Gl)))‘計(jì)算水平角中值
RS.Update
(3)數(shù)據(jù)檢查
Set RS = db.OpenRecordset(select測(cè)站.ID,測(cè)站名, 方向名,指標(biāo)差 from 方向點(diǎn),測(cè)站 WHERE 測(cè)站.ID=方向點(diǎn).ID and abs(指標(biāo)差)>" & ZBC & " and 方向點(diǎn).文件號(hào)=1") ‘檢測(cè)指標(biāo)差。
Set RS = db.OpenRecordset("select測(cè)站.ID,測(cè)站名, 方向名,邊長(zhǎng)讀數(shù)1,讀數(shù)2 from 方向點(diǎn),測(cè)站 WHERE 測(cè)站.ID=方向點(diǎn).ID and abs(邊長(zhǎng)讀數(shù)1-讀數(shù)2)>" & BC & " and 方向點(diǎn).文件號(hào)="1) ‘邊長(zhǎng)檢測(cè)。
Set RS = db.OpenRecordset("select測(cè)站.ID,測(cè)站名, 方向名,高差,平距 from 中值,測(cè)站 WHERE 測(cè)站.ID=中值.ID and 測(cè)站.文件號(hào)=1")‘讀取測(cè)站觀測(cè)信息。
RS .Fields(2).Value = Cz And RS.Fields(1).Value = fx And Abs(RS.Fields(4).Value - Zjl) > PingJu ‘對(duì)向距離檢查。
Abs(Val(RS.Fields(3).Value) + Zgc) > GC * Sqr(Val(RS.Fields(4).Value) * 0.001) ‘對(duì)向高差檢查。
4.3平差文件、導(dǎo)線觀測(cè)手簿
(1)平差文件
Set RS = db.OpenRecordset("select測(cè)站.ID,測(cè)站名, 方向名,水平角,高差,平距 from 中值,測(cè)站 WHERE 測(cè)站.ID=中值.ID")‘讀取水平角、高差、平距信息。
RS.MoveFirst
Do Until RS.EOF
‘對(duì)每行記錄進(jìn)行分解后,存在相應(yīng)的字段。
RS.MoveNext
Loop
Shell App.Path & "NASEW.EXE " & FILSAVE, vbNormalFocus '調(diào)用平差軟件直接打開(kāi)平差文件
(2) 導(dǎo)線觀測(cè)手簿
Set wdApp = CreateObject("Word.Application")‘調(diào)用Word程序
Set wdbok = wdApp.Documents.Open(App.Path & "圖根導(dǎo)線觀測(cè)手簿.doc")‘調(diào)用模板文件
Set wdBook = wdApp.Documents.Add‘新建word文件
Set RS = db.OpenRecordset("select測(cè)站.ID,測(cè)站名, 儀器高, 方向名, 水平角盤左, 水平角盤右, RC, 方向值, 水平角中數(shù), 垂直角盤左, 垂直角盤右, 指標(biāo)差, 垂直角, 覘標(biāo)高, 邊長(zhǎng)讀數(shù)1, 讀數(shù)2, 邊長(zhǎng)值 from 方向點(diǎn),測(cè)站 WHERE 測(cè)站.ID=方向點(diǎn).ID and 測(cè)站.文件號(hào)=1" ) ‘導(dǎo)線觀測(cè)手簿的信息
RS.MoveFirst
Do Until RS.EOF
With wdBook.Tables(TabCount)
.Cell(i, 2).Range.InsertAfter Format(RS.Fields(3).Value, ">") '方向名
.Cell(i, 3).Range.InsertAfter Replace(Format(RS.Fields(4).Value, "###0.00 00"), ".", " ") '水平角盤左
………將讀取的數(shù)據(jù)填入到WORD表格中
End With
RS.MoveNext
Loop
wdBook.Save保存文件
wdBook.Close關(guān)閉文件
wdbok.Close關(guān)閉模板文件
wdApp.Quit退出Word程序
5 結(jié)束語(yǔ)
全站儀內(nèi)外業(yè)一體化圖根導(dǎo)線測(cè)量減少了聽(tīng)、寫、計(jì)算、錄入等人工環(huán)節(jié),避免了因?yàn)槿斯び涗浕蜾浫朐斐傻拇植?,此種作業(yè)方法成本低,簡(jiǎn)便易行,作業(yè)成果準(zhǔn)確可靠,大大的減輕測(cè)量人員的勞動(dòng)強(qiáng)度,更好的提高測(cè)繪工作效率和產(chǎn)品質(zhì)量。
參考文獻(xiàn):
[1] 趙學(xué)慧,趙瑋.Visual Basic 程序開(kāi)發(fā)完整實(shí)例教程.北京.海洋出版社,2003.
[2] 王成春,蕭雅云.Access 2003 VBA程序設(shè)計(jì).北京.中國(guó)鐵道出版社,2005.