文/隋正蘇 遼寧有色地質(zhì)地理信息研究院有限公司 遼寧撫順 113006
精密電子水準(zhǔn)儀擁有較高觀測(cè)精度和觀測(cè)效率,便于記錄等優(yōu)點(diǎn),降低人工勞動(dòng)強(qiáng)度,越來(lái)越受到測(cè)繪生產(chǎn)單位青睞。[1]目前市場(chǎng)上常見數(shù)字水準(zhǔn)儀型號(hào)等級(jí)都很齊全,完全能滿足不同工作的各種精度要求。[2]
雖然電子水準(zhǔn)儀已經(jīng)實(shí)現(xiàn)讀數(shù)自動(dòng)化、記錄電子化,但LeicaDNA03水準(zhǔn)儀原始數(shù)據(jù)格式不易整理,需要人工編輯;外業(yè)觀測(cè)數(shù)據(jù)導(dǎo)出格式通常為默認(rèn)的GSI,可讀性差,需要另行編制程序進(jìn)行轉(zhuǎn)換。
本文通過(guò)對(duì)Leica DNA03數(shù)字水準(zhǔn)儀數(shù)據(jù)文件格式分析,用VC6.0編程平臺(tái),對(duì)數(shù)字水準(zhǔn)儀的觀測(cè)數(shù)據(jù)文件進(jìn)行處理,利用C++語(yǔ)言編程讀取數(shù)據(jù)文件并轉(zhuǎn)換,編程調(diào)用Excel生成水準(zhǔn)測(cè)量外業(yè)記錄表,將數(shù)字水準(zhǔn)儀文件格式轉(zhuǎn)換成外業(yè)規(guī)范水準(zhǔn)手簿,便于直接導(dǎo)入常用的平差軟件進(jìn)行計(jì)算。
本文研究的主要內(nèi)容包括對(duì)Leica GSI-8數(shù)據(jù)存儲(chǔ)格式的字段分析,GSI-8格式向水準(zhǔn)記錄本格式轉(zhuǎn)換以及Excel表格水準(zhǔn)數(shù)據(jù)的存貯,主要用到的理論方法有VC6.0編程平臺(tái)在MFC框架下的二次開發(fā),Excel電子表格與VC編程平臺(tái)的聯(lián)合。
Leica DNA水準(zhǔn)儀記錄的信息較全面,數(shù)據(jù)下載可使用附帶軟件來(lái)完成。利用軟件下載數(shù)據(jù)默認(rèn)格式為GSI,不便于編輯處理。Leica測(cè)量辦公系統(tǒng)提供了自定義下載格式功能,運(yùn)行“格式管理器”根據(jù)所需下載自定義數(shù)據(jù)格式。在下載格式文件中可選擇包括文件頭、文件尾、工程名稱和線路名稱等,測(cè)站觀測(cè)數(shù)據(jù)中的必選內(nèi)容包括點(diǎn)名、距離、測(cè)量類型、標(biāo)尺讀數(shù),這些是內(nèi)業(yè)平差中必要的基礎(chǔ)數(shù)據(jù)。另外,格式中還可根據(jù)需求自定義,包括觀測(cè)日期、觀測(cè)方法、觀測(cè)者、儀器型號(hào)等內(nèi)容。自定義數(shù)據(jù)類型下載的文件后綴為*.mdt,用文本編輯器打開閱讀、打印。但提取出平差所需數(shù)據(jù),形成符合平差軟件要求的數(shù)據(jù)文件,還需借助編程方法來(lái)實(shí)現(xiàn)。
Leica DNA03電子水準(zhǔn)儀采用的是GSI格式存儲(chǔ)數(shù)據(jù),包括GSI-8和GSI-16格式。GSI數(shù)據(jù)以“塊”為單位進(jìn)行傳送,每個(gè)數(shù)據(jù)塊包含若干個(gè)數(shù)據(jù)段,數(shù)據(jù)段用兩個(gè)或三個(gè)標(biāo)志字符WI來(lái)區(qū)分不同數(shù)據(jù)。GSI-8數(shù)據(jù)格式中,每個(gè)數(shù)據(jù)段共有16個(gè)字符,包括7個(gè)信息字符,8個(gè)數(shù)據(jù)字符和一個(gè)空白字符;GSI-16數(shù)據(jù)格式中,每個(gè)數(shù)據(jù)段共有24個(gè)字符,其中有16個(gè)數(shù)據(jù)字符,可以存儲(chǔ)更多數(shù)據(jù)信息。[4]本文以GSI-8數(shù)據(jù)格式為例進(jìn)行分析。
兩種方法可將數(shù)據(jù)轉(zhuǎn)移到計(jì)算機(jī)中。一是通過(guò)通信接口設(shè)置好通信參數(shù)用專門通信軟件傳輸,二是用筆記本電腦讀卡功能直接拷貝測(cè)量數(shù)據(jù)。
目前已有專業(yè)軟件能將電子水準(zhǔn)儀測(cè)量數(shù)據(jù)轉(zhuǎn)換成傳統(tǒng)的測(cè)量記錄手簿形式,但軟件專門性、針對(duì)性不強(qiáng)。為了使數(shù)據(jù)處理自動(dòng)化程度更高,可以設(shè)計(jì)自己的算法,通過(guò)程序來(lái)處理數(shù)據(jù)。考慮到Excel軟件是比較優(yōu)秀的表格處理軟件,方案采用VC6.0設(shè)計(jì)可視化界面,用C++語(yǔ)言結(jié)合Excel對(duì)象來(lái)處理數(shù)據(jù)。
(1)設(shè)計(jì)思路
同一種儀器由于觀測(cè)方法不同,數(shù)據(jù)也存在差異,本文基于用Leica DNA03水準(zhǔn)儀觀測(cè)的測(cè)量模式BFFB和測(cè)量模式BBFF的原始數(shù)據(jù)文件進(jìn)行轉(zhuǎn)換。
本文設(shè)計(jì)思路考慮到手簿表格格式整齊有規(guī)律,首先將測(cè)量產(chǎn)生的有效數(shù)據(jù)利用程序代碼提取出來(lái),保留原始數(shù)據(jù)格式,寫入Excel中通過(guò)公式進(jìn)行格式轉(zhuǎn)換。
(2)數(shù)據(jù)提取
電子水準(zhǔn)儀測(cè)量成果文件格式具有固定性,我們可通過(guò)編程開發(fā)用一定算法提取有效數(shù)據(jù),本文以水準(zhǔn)線路為例對(duì)其數(shù)據(jù)提取及處理的基本思路進(jìn)行說(shuō)明。
要實(shí)現(xiàn)數(shù)據(jù)讀取,首先選擇要轉(zhuǎn)換的文件格式,再進(jìn)行相應(yīng)模式數(shù)據(jù)的逐行讀取,定義成員函數(shù)和用到的各個(gè)變量,利用類對(duì)象將數(shù)據(jù)段中的字符串寫入到所定義的變量中,再將字符串格式數(shù)據(jù)轉(zhuǎn)換成整型的數(shù)據(jù),為后續(xù)處理做準(zhǔn)備。
(3) VC與Excel聯(lián)合
創(chuàng)建程序,在程序入口和出口處增加代碼支持COM庫(kù)。從Office安裝目錄中找到對(duì)VC操作Excel文件的動(dòng)態(tài)庫(kù),引入所需對(duì)象模型,添加具體代碼來(lái)響應(yīng)操作Excel命令。
(1)技術(shù)要點(diǎn)分析
仔細(xì)閱讀Leica GSI 格式說(shuō)明文件,正確理解Leica DNA03水準(zhǔn)儀的各項(xiàng)數(shù)據(jù)代碼,在具體設(shè)計(jì)時(shí)要注意以下幾點(diǎn):
①文件頭獲取時(shí)間,觀測(cè)者,儀器型號(hào)等信息;②測(cè)段起始和結(jié)束標(biāo)志;③測(cè)段異常處理,包括以下幾個(gè)情況:整站重測(cè)的處理和一次觀測(cè)重測(cè)的處理,可以利用“if/else”選擇結(jié)構(gòu),通過(guò)關(guān)鍵字符對(duì)所讀取的數(shù)據(jù)流進(jìn)行篩選;采用“while”循環(huán),根據(jù)需要設(shè)置好循環(huán)結(jié)束和選擇條件,合并測(cè)站數(shù)據(jù)信息和測(cè)段數(shù)據(jù)信息。
(2)讀取數(shù)據(jù)
本文中的程序需要對(duì)txt文件中的數(shù)據(jù)進(jìn)行逐行讀取,所以用CStdioFile中的ReadString函數(shù),讀取到CString中,再按所需進(jìn)行拆分或截取,獲得有實(shí)際意義的測(cè)量數(shù)據(jù)段,[6]由于觀測(cè)方法不同,導(dǎo)致原始數(shù)據(jù)文件內(nèi)容存在差異,要正確的讀取到所需要的測(cè)量數(shù)據(jù),就需要編寫不同的代碼,觀測(cè)模式的不同選擇用對(duì)話框中的單選鈕來(lái)實(shí)現(xiàn),并且要將其與單擊按鈕聯(lián)系起來(lái)。
(3) 建立與Excel對(duì)象的聯(lián)系
利用Visual C++ 6.0,建立一個(gè)MFC基于對(duì)話框的工程項(xiàng)目,在主對(duì)話框中加入按鈕:
ID: IDC_BUTTON_XLC 標(biāo)題:存儲(chǔ)數(shù)據(jù);雙擊該按鈕,增加成員函數(shù)
(4) Excel單元格的寫入
表頭的寫入,例如:m_ExlSheet.SetName("原始數(shù)據(jù)導(dǎo)入");同理,其他單元格的內(nèi)容也依次進(jìn)行設(shè)置,如:xlSheet.Cells(XX*3+9,2) = YY(i+1,3)通過(guò)設(shè)置循環(huán)和選擇將數(shù)組YY中的數(shù)據(jù)輸入到電子表格所對(duì)應(yīng)的單元格中[4]。將上述取出的數(shù)據(jù),按表格中相應(yīng)的位置循環(huán)寫入后,整個(gè)文件中相應(yīng)的數(shù)據(jù)將會(huì)全部寫入表格中,從而實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換。
(5) 程序設(shè)計(jì)成果
根據(jù)原始數(shù)據(jù)格式編寫具體代碼,添加到相應(yīng)按鈕的編輯代碼處,過(guò)程中利用VC++6.0軟件的調(diào)試功能進(jìn)行錯(cuò)誤修改,最終使程序能夠順利的運(yùn)行。
圖3-1為通過(guò)本程序?qū)崿F(xiàn)的水準(zhǔn)觀測(cè)手簿:
圖3-1 Excel水準(zhǔn)手簿形式記錄表格
與原始數(shù)據(jù)相比較,可以看到,原始GSI-8格式數(shù)據(jù)已成功轉(zhuǎn)化成常用的觀測(cè)手簿形式,更方便進(jìn)一步的整理和計(jì)算。
電子水準(zhǔn)儀的出現(xiàn)實(shí)現(xiàn)了水準(zhǔn)測(cè)量中的讀數(shù)自動(dòng)化、記錄電子化,降低了外業(yè)強(qiáng)度,減少了讀數(shù)誤差,具有光學(xué)水準(zhǔn)儀無(wú)可比擬的優(yōu)勢(shì)。但其結(jié)果電子文檔的呈現(xiàn)形式給數(shù)據(jù)可讀性帶來(lái)困難。本文分析Leica DNA03電子水準(zhǔn)儀記錄格式的特點(diǎn),用C++語(yǔ)言編寫了相關(guān)的數(shù)據(jù)預(yù)處理程序,對(duì)GSI格式的測(cè)量數(shù)據(jù)進(jìn)行提取并用Excel實(shí)現(xiàn)格式的轉(zhuǎn)換,輸出為電子觀測(cè)手簿的文件,從而實(shí)現(xiàn)水準(zhǔn)測(cè)量從外業(yè)觀測(cè)到內(nèi)業(yè)計(jì)算一體化,有很好的實(shí)踐意義。