王海英,韋廖軍
(南寧市勘測院,廣西南寧 530001)
地形圖高程點(diǎn)高程自動(dòng)提取的程序設(shè)計(jì)與實(shí)現(xiàn)
王海英?,韋廖軍
(南寧市勘測院,廣西南寧 530001)
出于提取高程數(shù)據(jù)的需要,針對(duì)地形圖中高程點(diǎn)及其標(biāo)注一一對(duì)應(yīng)的特點(diǎn),提出了批量提取高程點(diǎn)高程的自動(dòng)提取算法,實(shí)現(xiàn)了一次完成所有高程點(diǎn)高程值賦值,并給出了核心實(shí)現(xiàn)代碼。
高程;自動(dòng);提取
大比例尺地形圖數(shù)據(jù)是城市勘測工作的基礎(chǔ),是我們進(jìn)行地理信息產(chǎn)品深加工的基礎(chǔ),而地形圖數(shù)據(jù)是二維平面數(shù)據(jù),沒有第三維的高程值,這為我們后續(xù)利用高程控制點(diǎn)生成DEM,進(jìn)行土方量計(jì)算等工作留下了困難,因此,快速、準(zhǔn)確提取高程數(shù)據(jù),即對(duì)相應(yīng)高程點(diǎn)賦上準(zhǔn)確的高程值,非常具有現(xiàn)實(shí)意義。
ObjectARX是Autodesk公司針對(duì)AutoCAD平臺(tái)上的二次開發(fā)而推出的一個(gè)開發(fā)軟件包,它提供了以C++為基礎(chǔ)的面向?qū)ο蟮拈_發(fā)環(huán)境及應(yīng)用程序接口,能真正快速的訪問AutoCAD圖形數(shù)據(jù)庫。用ObjectARX開發(fā)的CAD軟件具有模塊性好、獨(dú)立性強(qiáng)、連接簡單、使用方便、內(nèi)部功能高效實(shí)用等優(yōu)點(diǎn),并且支持MFC(Microsoft Fundation Class),能簡潔并高效地實(shí)現(xiàn)許多復(fù)雜功能。
ObjectARX的類庫構(gòu)成有以下幾項(xiàng):
(1)AcRc庫,提供系統(tǒng)層次的類,用于動(dòng)態(tài)鏈接庫的初始化及運(yùn)行時(shí)刻類的注冊(cè)和標(biāo)識(shí)。
(2)AcEd庫,提供一組用于定義和注冊(cè)新的Auto-CAD命令的類。
(3)AcDb庫,提供一組用于存取AutoCAD圖形數(shù)據(jù)庫結(jié)構(gòu)的類。
(4)AcGi庫,提供繪制AutoCAD實(shí)體圖形界面的類。
(5)AcGe庫,提供的實(shí)用類用于執(zhí)行二維和三維幾何操作。
3.1 AutoCAD數(shù)據(jù)庫
AutoCAD基本的數(shù)據(jù)庫對(duì)象是實(shí)體、符號(hào)表和字典。實(shí)體是在AutoCAD圖內(nèi)部表示圖的一種特殊數(shù)據(jù)庫對(duì)象,用戶可以在屏幕上看見實(shí)體并能對(duì)其進(jìn)行操作。符號(hào)表和詞典是用于存儲(chǔ)數(shù)據(jù)庫對(duì)象的容器,這兩個(gè)容器對(duì)象都映射到一個(gè)符號(hào)名到一個(gè)數(shù)據(jù)庫對(duì)象。實(shí)體包含在符號(hào)表記錄中,因此要訪問一個(gè)圖形對(duì)象,需要遵循以下步驟:
(1)確定擁有訪問對(duì)象的圖形數(shù)據(jù)庫。
(2)獲得圖形數(shù)據(jù)庫的塊表。
(3)獲得一個(gè)存儲(chǔ)實(shí)體的塊表記錄,所有模型空間的實(shí)體都存儲(chǔ)在模型空間的特定記錄中。
(4)遍歷塊表模型空間,根據(jù)符號(hào)類別及編碼判斷是否是需要訪問的實(shí)體。
3.2 高程提取的算法設(shè)計(jì)
由于地形圖是二維平面圖,高程控制點(diǎn)雖然擁有x,y,z三個(gè)屬性值,但是我們的通常處理中,高程控制點(diǎn)的z值為0,高程控制點(diǎn)的高程值即為高程注記所表示的值。而通常每個(gè)高程點(diǎn)對(duì)應(yīng)的高程注記屬于文字類,即多行文字、單行文字,離高程控制點(diǎn)最近,因此,我們可以通過如下流程來提取高程:
(1)根據(jù)高程控制點(diǎn)的編碼和類別提取所有的高程控制點(diǎn)與高程注記。
(2)獲取所有高程點(diǎn)的平面坐標(biāo)及高程注記的平面坐標(biāo)。
(3)判斷高程點(diǎn)數(shù)目是否不為零,若為零,則退出,若不為零進(jìn)入步驟(4)。
(4)從高程數(shù)組中提取一個(gè)高程控制點(diǎn),取出其X、Y坐標(biāo)。
(5)遍歷高程注記,尋找離該高程點(diǎn)最近的高程注記。
(6)判斷該高程點(diǎn)與高程注記之間的距離是否小于限差,若小于,進(jìn)入步驟(7),否則進(jìn)入步驟(8)。
(7)將該高程注記值賦值給該高程點(diǎn),并將該高程注記設(shè)置為已使用,該高程點(diǎn)設(shè)置為已提取高程值,不再參與后續(xù)的遍歷。然后進(jìn)入步驟(3),繼續(xù)提取下一個(gè)高程點(diǎn)的高程。
(8)將該高程點(diǎn)設(shè)置為無對(duì)應(yīng)注記,剔除出待遍歷高程點(diǎn)數(shù)組,進(jìn)入步驟(3)。
圖1 算法流程圖
部分程序代碼如下:
為了驗(yàn)證程序的有效性,本文從地形圖庫中隨機(jī)調(diào)取一幅1∶500地形圖,打開如圖2所示,然后加載ARX程序,然后執(zhí)行“查看高程點(diǎn)”,AutoCAD界面左邊會(huì)彈出一可移動(dòng)面板如圖2所示,可以看出每個(gè)高程點(diǎn)的高程值為0,而其實(shí)際的高程值是通過高程注記來表示的;然后執(zhí)行“提取高程”之后,再執(zhí)行“查看高程點(diǎn)”,如圖3所示,界面左邊的可移動(dòng)面板中各高程點(diǎn)相對(duì)應(yīng)的高程值已賦到其對(duì)應(yīng)的屬性中。因此用此程序可迅速將各高程點(diǎn)對(duì)應(yīng)的高程注記值提取出來賦到其對(duì)應(yīng)的屬性中。
圖2 源圖形高程點(diǎn)高程值顯示圖
圖3 處理后高程點(diǎn)高程值顯示圖
本文利用ObjectARX開發(fā)環(huán)境所設(shè)計(jì)的程序,可以直接對(duì)高程數(shù)據(jù)提取高程,為后續(xù)的土方計(jì)算,DEM生成打下了堅(jiān)實(shí)的基礎(chǔ),節(jié)省了工作人員的大量勞動(dòng),提高了工作效率。
[1] 張帆.ObjectARX開發(fā)實(shí)例教程[Z].2007
[2] 李長勛.AutoCAD ObjectARX程序開發(fā)技術(shù)[M].北京:國防工業(yè)出版社,2005
[3] 董玉德.CAD二次開發(fā)理論與技術(shù)[M].合肥:合肥工業(yè)大學(xué)出版社,2009
[4] 秦洪現(xiàn).Autodesk系列產(chǎn)品開發(fā)培訓(xùn)教程(附光盤).北京:化學(xué)工業(yè)出版社,2008
[5] 任愛珠.土木工程CAD技術(shù)[M].北京:清華大學(xué)出版社,2006
[6] 周衛(wèi).AutoCAD地圖制圖與系統(tǒng)開發(fā)[M].北京:科學(xué)出版社,2008
Design and Implement of Automatically Extract Elevation of Elevation Point
Wang Haiying,Wei Liaojun
(Nanning Exploration&Survey Institute,Nanning,530001,China)
To extract elevation data,for the characteristic that one elevation point corresponding to one mark,a method is Proposed that automatically extract elevation of elevation point in this paper,the author achieve completely assignment of all the elevation point elevation value and list the core implementation code.
Elevation;Automation;Extraction
2011—05—04
王海英(1976—),女,工程師,主要從事工程測量及數(shù)據(jù)處理工作。
1672-8262(2011)05-135-04
P209
B