徐冬寶,張 蒙 ,李先林
(1.蘇州市測(cè)繪院有限責(zé)任公司,江蘇 蘇州 215000; 2.宿遷市科技局,江蘇 宿遷 223800)
基于AutoCAD的電子地圖在各個(gè)行業(yè)的多個(gè)領(lǐng)域得到廣泛應(yīng)用,并逐步取代了傳統(tǒng)的紙質(zhì)地圖。其中,國(guó)土資源管理的土地利用現(xiàn)狀分析作為土地利用總體規(guī)劃的基礎(chǔ)[1],其成果圖一般采用DWG或者DXF格式文件儲(chǔ)存。圖斑作為土地利用規(guī)劃成果圖中最基本單位,一般以閉合的多段線來(lái)表示,而在傳統(tǒng)矢量化中往往會(huì)出現(xiàn)圖斑邊界不閉合、折返及自相交等情況,影響到圖斑的準(zhǔn)確性。其準(zhǔn)確度又導(dǎo)致圖斑拓?fù)潢P(guān)系及圖斑面積統(tǒng)計(jì)的錯(cuò)誤,關(guān)系到土地利用規(guī)劃能否順利進(jìn)行。所以,在影響圖斑拓?fù)潢P(guān)系的準(zhǔn)確構(gòu)建及圖斑面積的計(jì)算與統(tǒng)計(jì)的諸多因素中,圖斑作為最基本的面狀要素在反映土地地類(lèi)要素的分布特征中有著重要的意義[2],其邊界數(shù)據(jù)準(zhǔn)確與否無(wú)疑是最重要的。
本文從分析圖斑邊界的異常情況出發(fā)研究了基于C++及AutoCAD二次開(kāi)發(fā)技術(shù)的自動(dòng)校正異常的圖斑邊界算法,達(dá)到提高工作效率及保證數(shù)據(jù)精確度的目的。
ObjectARX是繼AutoLISP及ADS之后的第三代AutoCAD二次開(kāi)發(fā)語(yǔ)言之一,同代的Visual AutoLISP作為AutoLISP的換代產(chǎn)品同樣采用了ObjectARX平臺(tái)開(kāi)發(fā)。VBA技術(shù)對(duì)于開(kāi)發(fā)小規(guī)模的應(yīng)用程序是比較好的選擇,而ObjectARX以Visual C++語(yǔ)言為基礎(chǔ)的面向?qū)ο蟮拈_(kāi)發(fā)環(huán)境和應(yīng)用程序接口,從運(yùn)行速度、運(yùn)行效率及穩(wěn)定性來(lái)看,遠(yuǎn)遠(yuǎn)優(yōu)于其他開(kāi)發(fā)語(yǔ)言[3]。其本質(zhì)為Windows動(dòng)態(tài)鏈接庫(kù)(dll)程序[4],與常規(guī)的動(dòng)態(tài)鏈接庫(kù)編程相同,可在AutoCAD程序調(diào)用時(shí)被加載,且與AutoCAD應(yīng)用程序自身的代碼相互獨(dú)立。所不同的是,ObjectARX是在C++語(yǔ)言的基礎(chǔ)上規(guī)定了獨(dú)自的語(yǔ)言,是專(zhuān)門(mén)針對(duì)于AutoCAD的二次開(kāi)發(fā),因此在創(chuàng)建ARX程序時(shí)應(yīng)進(jìn)行一些相應(yīng)的設(shè)置[5]。
在AutoCAD系統(tǒng)中,對(duì)圖斑邊界的檢測(cè)與校正等操作實(shí)質(zhì)上是對(duì)多線段的操作,也就是對(duì)AcDb數(shù)據(jù)類(lèi)庫(kù)中的AcDbPolyline的操作[6]。因此其異常情況通常有以下3種:①多線段不閉合;②多線段出現(xiàn)折返;③多線段自相交。
圖1 多邊形折返或自相交示意圖
本文主要研究多段線折返及自相交的檢測(cè)與校正方法。如圖1中所示的a、b、c 3幅圖是多段線折返的主要情況;d、e、f 3幅是多段線自相交的主要情況。
其中,a為返折情況,即多段線在折返點(diǎn)處沿原多段線折回一段后又折回并繼續(xù)延伸的一種情況;b為單重旁折情況,即多段線的折返點(diǎn)處折向一邊后折回并繼續(xù)延伸的一種情況;c為多重旁折情況,即多段線在旁折處多次旁折的情況; d、e為多段線一般自相交情況;f為多段線折返與自相交嵌套的情況。另外,還有多重返折及返折與旁折嵌套出現(xiàn)的情況。
根據(jù)圖1中所示的多段線折返的特點(diǎn),本文主要用順序重合點(diǎn)折返檢測(cè)的方法對(duì)多線段進(jìn)行檢測(cè)并校正,步驟如下:
1)調(diào)用添加選擇集函數(shù)acedSSGet()將待檢測(cè)多段線ID放入一個(gè)待檢測(cè)序列中。
2)遍歷待檢測(cè)序列,調(diào)用函數(shù)acedOpenObject()以寫(xiě)的方式打開(kāi)每條多段線。
3)遍歷多段線頂點(diǎn),以每個(gè)頂點(diǎn)為基點(diǎn),并調(diào)用函數(shù)acedDistance()比較該基點(diǎn)與其后繼的每個(gè)頂點(diǎn)的距離,判斷是否有點(diǎn)與該基點(diǎn)重合;如果重合,轉(zhuǎn)4),否則基點(diǎn)后移并重復(fù)3),直到循環(huán)結(jié)束。
4)判斷該重合點(diǎn)為“繼點(diǎn)”(即基點(diǎn)相鄰的后繼點(diǎn))或是“跳點(diǎn)”(與基點(diǎn)不相鄰的后繼點(diǎn));若為繼點(diǎn)則進(jìn)行單純的重合點(diǎn)刪除,否則轉(zhuǎn)5)。
5)沿跳點(diǎn)折返并判斷原基點(diǎn)的繼點(diǎn)與此跳點(diǎn)的前趨點(diǎn)是否重合;若依然重合,則說(shuō)明從基點(diǎn)至跳點(diǎn)處有可能為折返的一段多段線,因此,將此段線段裁剪后形成新的多段線并加入待檢測(cè)序列;若原基點(diǎn)的繼點(diǎn)與跳點(diǎn)的前趨點(diǎn)不重合,則為如圖1e所示自相交的一種情況。對(duì)于此種情況,可將閉合部分的多段線裁剪形成新的多段線。
需要說(shuō)明的是,因?yàn)樘c(diǎn)是順序查找到的第一個(gè)與基點(diǎn)重合的點(diǎn),所以跳點(diǎn)的前趨點(diǎn)不會(huì)與跳點(diǎn)重合,且基點(diǎn)的繼點(diǎn)也不會(huì)與基點(diǎn)重點(diǎn),所以上述的折返判斷是可靠的。
根據(jù)圖1所示的多段線自相交情況,通過(guò)順序檢測(cè)多段線的每段線段與剩余的線段是否有交點(diǎn)而進(jìn)行判斷;若判斷出有交點(diǎn),則計(jì)算交點(diǎn),且分別將交點(diǎn)插入相交的線段中,于是自相交情況便統(tǒng)一成為圖1e所示的特殊的自相交情況。
由于兩種情況最終在多段線折返檢測(cè)算法中都能得到處理,尤其如圖1f所示的情況需要同時(shí)全用兩種檢測(cè)方法,因此,將兩種情況合一,對(duì)從待檢測(cè)的序列中順序取出的多段線先進(jìn)行自相交情況檢測(cè)并作出預(yù)處理,然后轉(zhuǎn)入折返情況的檢測(cè)并作出最終處理。上述算法的具體流程如圖2所示。
經(jīng)本文提出的算法校正后的圖斑有可能出現(xiàn)圖斑拓?fù)洳粐?yán)格的情況,可采用文獻(xiàn)[7]中土地利用利用數(shù)據(jù)綜合中圖斑拓?fù)潢P(guān)系的創(chuàng)建和一致性維護(hù)算法加以解決。
將上文所述的算法生成的ARX程序加載到AutoCAD系統(tǒng)中,然后對(duì)某土地利用現(xiàn)狀圖的圖斑進(jìn)行異常檢測(cè)與校正實(shí)驗(yàn)。
實(shí)驗(yàn)結(jié)果如圖3、圖4所示。其中,圖3為校正之前的圖斑數(shù)據(jù)及對(duì)應(yīng)圖斑拓?fù)涑涮罱Y(jié)果,圖斑號(hào)620的圖斑在箭頭所示位置出現(xiàn)自相交的情況,且對(duì)應(yīng)的拓?fù)涑涮顖D中也出現(xiàn)了充填不全的情況。圖4為對(duì)圖斑邊界進(jìn)行校正之后的圖斑數(shù)據(jù)及其生成的拓?fù)涑涮顖D,由結(jié)果可以看出上述情況得到了很好的解決。
圖3 校正前圖斑情況
圖4 校正后圖斑情況
鑒于圖斑拓?fù)潢P(guān)系與圖斑面積的準(zhǔn)確統(tǒng)計(jì)對(duì)土地利用規(guī)劃的重要性,本文對(duì)圖斑邊界的異常情況作了深入研究,并提出了相應(yīng)的異常檢測(cè)與校正算法。采用上述算法,應(yīng)用Visual C++結(jié)合ObjectArx技術(shù)在CAD系統(tǒng)中實(shí)現(xiàn)了圖斑邊界異常及自動(dòng)檢校功能,并成功應(yīng)用于多個(gè)土地利用現(xiàn)狀分析的項(xiàng)目中。由此可見(jiàn),本文所提出的算法對(duì)于提高土地利用規(guī)劃的科學(xué)性具有很好的促進(jìn)作用。
[1]TD/T 1016-2007.土地利用數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)[S].
[2]鄒勝武,鄒時(shí)林,李大軍,等.土地利用圖縮編中小圖斑綜合方法的改進(jìn)[J].地理空間信息,2013,11(2):138-140
[3]李長(zhǎng)勛.AutoCAD ObjectArx程序開(kāi)發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2005
[4]劉良華,朱東海.AutoCAD 2000 ARX開(kāi)發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2000
[5]劉同成,林愉.基于ObjectARX的AutoCAD二次開(kāi)發(fā)及應(yīng)用實(shí)例[J].自動(dòng)化技術(shù)與應(yīng)用,2006(5):35-37
[6]傅強(qiáng),焦建民.基于ObjectARX的AutoCAD二次開(kāi)發(fā)與應(yīng)用[J].信息技術(shù),2006,35(4):103-105
[7]陳先偉,郭仁忠,閆浩文.土地利用數(shù)據(jù)庫(kù)綜合中圖斑拓?fù)潢P(guān)系的創(chuàng)建和一致性維護(hù)[J].武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2005(4):370-373