袁兆奎
(武漢市政工程設計研究院有限責任公司,湖北武漢 430023)
在市政工程中,道路的縱橫斷面測量是一項重要的工作內容。一般來說,在獲取地形圖之后,應進行縱橫斷面的實地測量,包括各中樁點和碎部斷面點的高程測量,測得的數據人工填入記錄紙上。內業時,首先將記錄紙上的數據按指定的格式錄入電腦,然后進行格式及數據內容檢查,確認無誤后交付給設計人員。
筆者經過長期的工作實踐,發現上述工作流程中,存在如下問題:①人工錄入的數據大,耗時長,且容易出錯;②數據錄入后,查錯糾正很難滿足要求;③縱橫斷面圖形檢查的功能很難發現細微的錯誤,且運行效率低下。
對此,筆者提出了一種簡碼格式,能減少斷面錄入的工作量,提高工作效率;并基于.Net平臺,用C#語言在Visual Studio 2005上開發了一款能進行斷面數據檢查的軟件;最后研究了縱橫斷面的繪制及圖形檢查,并在AutoCAD上進行二次開發,實現了該功能。經過一年多的推廣應用,該軟件已經較為成熟、完善。
武漢市政工程設計研究院有限責任公司勘測設計院設計軟件所能支持的縱橫斷面文件為下述格式:


這種格式稱為全碼格式,對該格式進行分析,可以看出其有如下特點:
(1)每一個新的橫斷面都是以“Z=”作為開頭,其后為中樁的里程、正負高程。
(2)橫斷面的數據以從左到右的順序列出,內容為斷面點與中樁的距離,斷面點的高程。如果斷面點位于中樁的左側,距離取負,若在右側,距離取正;高程全部取負。
(3)在縱斷面中,若有加樁,只需以“Z=”為開頭,然后輸入里程和正負高程即可。
筆者認為,上述文件格式雖為道路設計軟件所專用,但卻可以大大簡化,減少手工錄入的工作量,提高效率:
①在中樁所在的數據行,可以只錄入一個高程值,不必錄入兩個。
②橫斷面的數據既然已規定為從左至右,因此左側的距離數據可以不用取負號,直接按正號錄入;斷面點的高程也只按正號錄入。
因此,筆者設計了一種簡化的縱橫斷面文件格式:


以上這種格式可稱為“簡碼”格式??梢钥闯?,若采用簡碼格式,內業數據錄入時,可以大大減少工作量(沒有“-”號和“,”號),且所有的操作都可以集中在鍵盤的“數字鍵盤”區域內,能極大提高效率。
雖然采用簡碼格式可以大大減少手工錄入的工作量,但仍然會出現各種錯誤,尤其是當道路很長,且斷面寬度較大時,錯誤一般很難避免。另一方面,在沒有采用簡碼格式之前,以前的工作中存在著很多全碼格式的斷面文件,也需要進行檢查。因此,要實現簡碼格式和全碼格式的數據檢查,并能將簡碼轉換成全碼。
經過長期工作實踐,發現手工錄入后,斷面文件中一般有以下幾種類型的錯誤,如表1所示。

斷面文件中可能出現的錯誤類型 表1
編寫程序時,有兩處需要注意:
(1)斷面文件應一次性全部讀入,不能逐行讀入,否則針對一個橫斷面的檢查時就很難操作。具體來說,用StreamReader.ReadToEnd()將斷面文件全部讀入,并用Regex.Split()將數據分割成string類型的數組:

如此,在進行一個橫斷面的檢查時,先在file_content_array中尋找該斷面的起止位置,然后再進行內部檢查;檢查完畢后,尋找下一個橫斷面的起止位置,重復上面的檢查。
(2)在橫斷面內部,檢查斷面點與樁號間的距離是否嚴格按從左到右的順序時,可以先定義一個初始值為false的bool類型變量zero_comeout。當zero_comeout為false,且斷面點與樁號間的距離為遞減時,認為無誤,否則認為有錯誤,并輸出錯誤的位置;當距離為0時,認為讀到樁號處,將zero_comeout設為true,并檢查該處高程是否與樁號處一致;當zero_comeout為true,且斷面點與樁號間的距離遞增時,認為無誤,否則認為有錯誤,并輸出錯誤的位置。該處可用如下代碼實現:

斷面文件數據檢查這部分程序的結構示意圖如圖1所示。
在該軟件中,可以通過對話框設置檢查參數,檢查完畢后生成報告,詳細指出錯誤所在的行數及錯誤的類別,從而可以快速進行定位、糾正。對于數據很長的斷面文件,該功能尤其有效。檢查工作有必要多次進行,以確保無誤。圖2為軟件的主界面。

圖1 斷面文件數據檢查程序示意圖

圖2 斷面數據處理程序主界面
該部分要實現將簡碼格式的斷面文件生成全碼格式,實現起來較為簡單,主要注意以下兩點:
(1)樁號處。提取一行的數據,若其中含有“*”,認為該行為樁號處,將“*”號替換成“Z=”,并添加正負高程。
(2)樁號內部。首先仍定義一個初始值為false的bool類型變量zero_comeout。當斷面點與樁號處的距離不為0,且zero_comeout為 false時,距離取負號,高程取負號;當斷面點與樁號間的距離為0時,設置zero_comeout為true,高程取負號;當斷面點與樁號間的距離不為0,且zero_comeout為ture時,距離取正號,高程取負號。
每一步處理完后,均將處理結果寫入新的文件,直到斷面文件全部處理完畢。
雖然上述程序對斷面文件內的數據進行了詳細的檢查,但并不能保證其已經完全沒有問題。例如,在錄入時,陡砍上、下的高程值有可能輸成一樣,但前文的檢查并不能發現。作為工作成果的縱橫斷面文件在歸檔及交付設計人員、業主時,應確保無誤,因此,繪制縱橫斷面及進行圖形檢查很有必要。
筆者基于.Net平臺,用C#語言對AutoCAD進行二次開發,實現了縱橫斷面圖的自動繪制,其后即可以進行圖形檢查。相對于AutoLisp或者VBA等傳統的開發語言,C#可以編寫出運行效率更高的應用程序。這對配置較低的電腦或者繪制數據量較大的縱橫斷面尤為重要。
編寫程序時,主要有以下幾方面需要注意:
(1)圖層。為便于繪制及檢查,筆者對縱橫斷面圖進行分析,自定義了5個圖層:
①斷面點:顯示縱斷面的中樁點和橫斷面的碎部斷面點,均以“紅圈”突出顯示。
②斷面線:由縱斷面的所有中樁點或橫斷面的所有碎部斷面點以直線方式連接而成的多段線,以綠色顯示。
③斷面參考坐標系:為平面直角坐標系。對于縱斷面,以起始中樁為原點,里程增加方向為橫軸,高程增加方向為縱軸;對于橫斷面,以中樁點為原點,從左至右為橫軸,高程增加方向為縱軸。縱軸上的高程值范圍均嚴格標示,例如高程標示為[17,22],說明所有點的高程值均在如下范圍內:17≤H≤22。
④斷面點高程:在縱斷面中樁點和橫斷面碎部斷面點的旁邊顯示其高程值。
⑤斷面點樁號點位置:顯示中樁點的里程值,或者橫斷面所有碎部斷面點距離中樁的距離值。
(2)在AutoCAD中繪制文字、斷面點和斷面線。它們的實現方式差不多,以較為復雜的繪制斷面線為例,程序中主要用到AddLine()這個函數:


(3)針對不同版本的AutoCAD進行開發的問題。在Visual Studio 2005的“解決方案資源管理器”中點“引用”,右鍵選擇“添加引用(R)…”,在對話框中選擇“瀏覽”,然后進入AutoCAD的安裝目錄,選擇“acdbmgd.dll”、“acmgd.dll”。然后將程序重新編譯、生成,如此便生成針對該AutoCAD版本的程序了。
該部分程序的結構示意如圖3所示。

圖3 斷面圖繪制程序示意圖
打開AutoCAD后,輸入“netload”命令,在對話框中選擇已生成的dll文件,然后再輸入“drawdm”命令,彈出縱橫斷面繪制程序的主界面(圖4)。

圖4 縱橫斷面繪制程序主界面
在該界面上可以進行一些參數設置,以適應不同的比例尺等?!按_定”之后程序自動繪制斷面,并調節縮放比例,讓所有斷面滿布在窗口中,圖5是繪制的某個橫斷面。

圖5 繪制出的橫斷面
縱橫斷面繪制完畢后,即可以進行圖形檢查,發現并糾正細微的錯誤。
在縱橫斷面文件檢查完畢后,可以統計本次工程的工作量,以作為計算產值、費用等的依據。工作量的計算分縱向和橫向。對于縱向,只需提取里程的最小、最大值,進行相減即可。對于橫向,需計算每一個橫斷面的工作寬度,即對最左側斷面點和樁號處的距離與最右側斷面點和樁號處的距離求和,然后累加所有的工作寬度,同時還應累計橫斷面的個數,如圖6所示。

圖6 縱橫斷面工作量統計
本文對道路的縱橫斷面文件格式進行了分析,提出了一種簡碼格式,能大大減少手工錄入的工作量,減少出錯,提高工作效率,并實現了簡碼格式轉換為設計軟件所能識別處理的全碼格式,以及對全碼格式斷面文件的檢查。其次,研究了縱橫斷面文件的數據檢查和圖形化檢查。數據檢查能發現9大類錯誤,圖形化檢查能在AutoCAD上繪制縱橫斷面并人工發現細微的錯誤。最后,實現了道路斷面的工作量統計。經過長期推廣應用,該程序已較為成熟、完善。
[1]潘正風,楊正堯,程效軍等.數字測圖原理與方法[M].武漢大學出版社,2004.
[2] 張正祿.工程測量學[M].武漢:武漢大學出版社,2005.
[3]余興勝.用.NET進行AutoCAD二次開發的方案探索[EB/OL].http://news.e800.com.cn/articles/2008/12/1199238090246_1.html,2008.
[4] ObjectARX編程站.Hello World:訪問ObjectARX.NET封裝類[EB/OL].http://www.mjtd.com/Manual/Article-Show.asp?ArticleID=836,2005.
[5]博客園.AutoCAD.net二次開發官方教程及源碼C#版[EB/OL].http://kb.cnblogs.com/a/1257334/,2008.