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