張金蘭 歐陽婷萍
(1.廣東工貿(mào)職業(yè)技術(shù)學院,廣東 廣州 510510;2.中國科學院廣州地球化學研究所 邊緣海地質(zhì)重點實驗室,廣東 廣州 510640)
在GIS中,矢量數(shù)據(jù)模型是地理數(shù)據(jù)的最主要表現(xiàn)形式。在矢量數(shù)據(jù)模型中,將二維地理實體抽象為點、線、面(多邊形)三類要素對象[1]。這些幾何形體對象可以精確描述具有離散特征的要素在地球上的具體位置和形狀,并能夠表達出地理實體之間的空間關(guān)系。正是因為空間關(guān)系,才使得GIS可以對這些要素進行不同的空間分析和運算,得出用戶需要的結(jié)果,這也是GIS區(qū)別于一般地理信息系統(tǒng)的本質(zhì)——空間查詢和分析功能。空間關(guān)系主要包括方向關(guān)系、拓撲關(guān)系和度量關(guān)系。空間拓撲關(guān)系是空間實體間的一個重要而又基本的關(guān)系,是GIS空間推理、查詢和分析的基礎(chǔ)[2-7]。多邊形的拓撲關(guān)系可歸納為“相離”、“相接”、“相交”、“覆蓋”、“包含”、“覆蓋于”、“包含于”、“相等”關(guān)系[6,7]。但對于這些關(guān)系的描述和應用都是在簡單無洞多邊形的基礎(chǔ)上的。如果多邊形存在空洞(內(nèi)環(huán)),便會對拓撲關(guān)系造成困擾,干擾GIS的應用。因此經(jīng)常需要對多邊形的空洞(內(nèi)環(huán))進行刪除。ESRI公司的ArcGIS系列軟件是一個全面的、完善的、功能強大的GIS軟件平臺[8]。ArcGIS雖然能夠?qū)斩炊噙呅芜M行去除,但只能對空洞(內(nèi)環(huán))一個一個的進行刪除,不能達到批量處理的效果。本文針對上述問題,利用ArcGIS中內(nèi)置VBA對多邊形空洞進行批量的刪除處理,生成無洞多邊形。經(jīng)試驗表明,該方法簡單,效果理想,為GIS的數(shù)據(jù)處理和應用分析提高效率,更適用于廣大GIS用戶。
眾所周知,Arcmap中包含了內(nèi)置的VBA,VBA全稱Visual Basic For Application,是 Visual Basic的子集,作為ArcGIS的二次開發(fā)工具。VBA提供了一種集成的編程環(huán)境——VB編輯器(VBE)。在該環(huán)境中,可以編寫并調(diào)試在Arcmap中使用的VB宏及ESRI的對象庫,宏的命令可以將VB的一些或部分功能與Arcmap的功能集成起來。創(chuàng)建宏的過程就是編寫VB的子程序,改程序的名字就是宏的名字[9]。VBA的開發(fā)使用ActiveX技術(shù),這種技術(shù)能使用戶能夠從ArcGIS的內(nèi)部或外部以編程方式來操作ArcGIS,同時具有一個功能強大的對象庫——ArcObjects。ArcGIS與VBA的結(jié)合具有如下特點:
(1)VBA可以通過應用程序滿足用戶的需要,增強與用戶的交互,集成ArcGIS的功能,使ArcGIS任務自動化,增強ArcGIS的功能[10,11]。
(2)VBA是VB的子集,二者結(jié)構(gòu)和語法完全一致,易于掌握和快速應用,并且內(nèi)嵌于ArcGIS軟件中,無需安裝[11,12]。
在ArcObjects中, Polygon(多邊形)是一個有序Ring(環(huán))對象的集合,環(huán)有內(nèi)環(huán)和外環(huán)之分,內(nèi)環(huán)及多邊形的空洞。內(nèi)環(huán)和外環(huán)的存儲方向是有區(qū)別的,內(nèi)環(huán)存儲方向是逆時針方向,而外環(huán)是順時針方向,這也決定了環(huán)的面積特性有所區(qū)別。內(nèi)環(huán)的面積為負值,外環(huán)的面積為正值[13-15]。這是判斷內(nèi)環(huán)和外環(huán)的關(guān)鍵,也是去除多邊形空洞的算法依據(jù)。
(1)在ArcGIS的“ArcMap—T0ols—Macros-Create”下,輸入文件名,編好程序后,若想保存文件,點VBE中的“File—save Project”圖標,輸入文件名,則文件以后綴名為.mxd的格式保存.當下次需要運行時,打開“ArcMap—tools—Macms—VBE—Run”,運行宏的結(jié)果將在桌面顯示。
(2)在本次開發(fā)中主要用到Polygon類和Ring類,首先通過ITopologicalOperator2接口的SimplifyPreserveFromTo函數(shù)確保多邊形的內(nèi)環(huán)和外環(huán)的方向是正確的;接著通過IArea接口的Area屬性值是否小于0,來篩選內(nèi)環(huán)進行刪除,只保留多邊形的外環(huán),完成多邊形空洞的去除。部分代碼如下:
(3)上述代碼是去除一個多邊形的空洞,要對整個圖層的多邊形空洞的批量去除,只需要遍歷完整個圖層的多邊形要素即可。實驗結(jié)果如圖1所示:
圖1 處理結(jié)果
本文利用ArcGIS中內(nèi)置VBA進行二次開發(fā),實現(xiàn)對多邊形空洞的批量刪除處理,算法簡單可行,實現(xiàn)效率高。對于GIS用戶在進行空間分析,特別是根據(jù)多邊形拓撲關(guān)系進行空間分析的時候具有重要的意義。
[1]鄔倫,劉瑜,等.地理信息系統(tǒng)——原理、方法和應用[M],北京:科學出版社,2005.
[2]何建華,劉耀林.GIS中拓撲和方向關(guān)系推理模型[J]. 測繪學報,2004,33(2):156-162.
[3]杜世宏,秦其明,王橋.GIS中由多種方向關(guān)系推理拓撲關(guān)系的方法[J].計算機輔助設(shè)計與圖形學學報,2005, 17(9):1917-1927.
[4]鄧敏,李志林,李永禮.GIS線目標間拓撲關(guān)系描述的層次方法[J].遙感學報,2007,11(3):311-317.
[5]劉耀開,劉傳立.GIS空間拓撲關(guān)系形式化描述模型分析[J].江西理工大學學報,2008,29(5):41-44.
[6]鄧敏,劉文寶,馮學智.GIS面目標間拓撲關(guān)系的形式化模型[J].測繪學報,2005,34(1):85-90.
[7]鄧敏,劉文寶,黃杏元,等.空間目標的拓撲關(guān)系及其GIS應用分析[J].中國圖像圖形學報,2006,11(12):1743-1749.
[8]魏士春,張紅日,蘇奮振,等.基于ArcGIS的面狀要素中軸線提取方法研究[J].地理空間信息,2007,5(2):45-47.
[9]黨安榮,賈海峰,易善楨,等.ArcGIS 8 Desktop地理信息系統(tǒng)應用指南[M].北京:清華大學出版社,2003.
[10]黃紅華,譚云婷,吳鵬.基于ArcGIS二次開發(fā)的圖斑綜合研究[J].科技資訊,2009,31:1-1.
[11]劉少軍,何政偉,黃潤秋,等.利用ArcGIS中VBA開發(fā)滑坡階段綜合預報功能[J].桂林工學院學報,2004,24(3):315-318.
[12]譚金華,左石磊,洪勝.基于ArcGIS VBA批量生成野外調(diào)查用途程序設(shè)計[J].浙江測繪,2011,1:71-73.
[13]蘭小機,劉德兒.基于ArcObjects與C#.NET的GIS應用開發(fā)[M].北京:冶金工業(yè)出版社,2011.
[14]韓鵬,徐占華,褚海峰,等.地理信息系統(tǒng)開發(fā)[M].武漢:武漢大學出版社,2005.
[15]ESRI. Engine help for .NET(VS2008)[DB/OL]. ms-help://ESRI.EDNv9.3/NET_Engine/e7a44d7b-bb14-43e0-b71b-38b817b953 af.htm.