孫毓蔓,左小清,蘇文豪
?
基于ArcGIS Engine與C#.net的地塊合并功能的實(shí)現(xiàn)
孫毓蔓,左小清,蘇文豪
(昆明理工大學(xué) 國(guó)土資源工程學(xué)院,云南 昆明 650500)
近幾年來,隨著我國(guó)計(jì)算機(jī)技術(shù)不斷的發(fā)展,ArcGIS是出現(xiàn)在了人們的視野當(dāng)中,它是ESRI全面整合的GIS數(shù)據(jù)庫(kù)、人工智能、軟件工程、網(wǎng)絡(luò)技術(shù)等其他多方面的計(jì)算機(jī)技術(shù)后,成功推出的能夠代表GIS最高技術(shù)水平的GIS平臺(tái)。我國(guó)的GIS技術(shù)是基于ArcGIS Engine技術(shù)而發(fā)展起來的,它的理論基礎(chǔ)也大都是源于ArcGIS Engine開發(fā)的理論,因此本文主要是結(jié)合近年來關(guān)于ArcGIS Engine在GIS發(fā)展的技術(shù)領(lǐng)域取得的理論和實(shí)踐相結(jié)合的經(jīng)驗(yàn),將GIS基礎(chǔ)框架重要數(shù)據(jù)源的地圖要素,這里采用C#語言和COM組件技術(shù),將實(shí)現(xiàn)屬性表的查詢,將小于等于給定值的地塊合并到周圍最大的地塊中的功能實(shí)現(xiàn),節(jié)約手動(dòng)所耗費(fèi)的時(shí)間,并且其在土地利用,地籍整改等方面有著很重要的實(shí)際意義。
地理信息系統(tǒng)(GIS);ArcGIS Engine;地塊合并
近年來,隨著我國(guó)有關(guān)GIS技術(shù)的不斷發(fā)展進(jìn)步,有關(guān)其技術(shù)的二次開發(fā)功能也有了相當(dāng)多的研究。在GIS軟件開發(fā)領(lǐng)域中,組件技術(shù)的日趨成熟成為計(jì)算機(jī)開發(fā)的主流[1]。組件式GIS的開發(fā)平臺(tái)具有一定功能性,能夠使GIS功能嵌入在非GIS軟件中,成為一體化的應(yīng)用?;蛘邔⑵渌浖δ芤惨隚IS軟件平臺(tái),從而使GIS技術(shù)與其他應(yīng)用相結(jié)合,成為一體化的應(yīng)用。組件式GIS可以合理選擇和運(yùn)用現(xiàn)有ActiveX的控件[2]。其方法實(shí)現(xiàn)具體的應(yīng)用不僅僅減少了開發(fā)者的編程工作量,使開發(fā)者避開某些應(yīng)用的具體代碼,可以直接去調(diào)用控件,這樣不僅僅可以縮短程序開發(fā)周期,使編程過程更簡(jiǎn)潔,用戶界面更友好,而且可以使程序更加靈活、簡(jiǎn)便。ArcGIS Engine的技術(shù)的研究和探討,就是組件式GIS的產(chǎn)物[3]。
ArcGIS Engine無論是在理論上還是在實(shí)踐上,都有了突飛猛進(jìn)的發(fā)展。以前我國(guó)大多數(shù)的地圖制圖的系統(tǒng)是以AutoCAD為開發(fā)平臺(tái)的,很多地理數(shù)據(jù)都以CAD格式存儲(chǔ)[4]。但是其從地理信息系統(tǒng)的角度來看,CAD平臺(tái)缺乏對(duì)空間數(shù)據(jù)的分析功能,而ArcGIS Engine可以進(jìn)行桌面端的應(yīng)用,并且能對(duì)已存在的空間數(shù)據(jù)進(jìn)行建模、管理和分析,使表達(dá)GIS地理空間要素能夠在一個(gè)統(tǒng)一的模型框架下。而在發(fā)展的今天,利用其開發(fā)特點(diǎn),對(duì)各行各業(yè)上都有了一定的發(fā)展[5-9]。例如不管是已開發(fā)的土地利用系統(tǒng)或土地管理系統(tǒng)采用的處理方法已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足土地管理的需要。隨著地塊數(shù)據(jù)的增加和信息更新速度的加快,可以利用 ArcGIS Engine開發(fā)出自己想要實(shí)現(xiàn)的功能。在本文中實(shí)現(xiàn)了可以將許多地塊可以根據(jù)設(shè)定的條件(例如面積等),將值小的地塊批量合并。本程序可以利用ArcGIS Engine的C#實(shí)現(xiàn)的地塊管理系統(tǒng)的功能有條件查詢功能、緩沖區(qū)功能、圖形要素合并功能等。
ArcGIS Engine是ESRI公司在ArcGIS 8X基礎(chǔ)上推出的具有COM組件式功能的ArcGIS 9家族中的新成員之一,它具有可以跨越所有ArcGIS控件來進(jìn)行開發(fā)的特點(diǎn),一經(jīng)問世便備受人們關(guān)注。ArcGIS Engine是基于COM的集合,可以被任何支持COM的編程語言所調(diào)用,如C#與VB[10]。ArcGIS Engine是與ArcGIS 9.0同時(shí)推出的用于建立自定義獨(dú)立地理信息系統(tǒng)(GIS)應(yīng)用程序的平臺(tái)。它是基于ArcObjects構(gòu)建的,通過它可以脫離相關(guān)工作環(huán)境進(jìn)行獨(dú)立的運(yùn)用和操作。借助它進(jìn)行GIS應(yīng)用開發(fā)可以脫離ArcGIS Desktop環(huán)境提高了開發(fā)效率。ArcGIS Engine支持四種界面模式,可以同時(shí)與多個(gè)界面進(jìn)行互動(dòng)操作,它是目前我國(guó)比較前沿的技術(shù)成果,它具有安全性和多功能性,能夠比較好的完成相關(guān)工作,它的開發(fā)也將是該項(xiàng)技術(shù)史上的一大進(jìn)步。這GIS組件是主要以ArcGIS Engine和Visual Studio.NET為開發(fā)平臺(tái)的[11-12]。開發(fā)者使用 ArcGIS Engine 開發(fā)包構(gòu)建應(yīng)用程序,并通過 ArcGIS Engine Runtime 的軟件許可將這些程序分發(fā)給最終用戶。ArcGIS Engine開發(fā)包包括三個(gè)關(guān)鍵部分[13-14]:(1)控件:它是 ArcGIS用戶界面的組成部分,開發(fā)人員可以直接嵌入并在應(yīng)用程序中使用。關(guān)于ArcGIS Engine的控件包括PageLayoutControl、MapControl、ReaderC-ontrol、ToolbarControl、TocControl、SceneControl、GlobeControl等可以用來展示交互式地圖。(2)工具:它主要包括各種選擇工具如點(diǎn)擊查詢、縮放、旋轉(zhuǎn)、平移和與地圖交互等功能。工具在應(yīng)用界面上以工具條的方式展現(xiàn)。并且進(jìn)行調(diào)用一些常規(guī)工具、工具條和容器等來進(jìn)行實(shí)現(xiàn)一些應(yīng)用開發(fā),并且開發(fā)者可以定制應(yīng)用中或創(chuàng)建自己定制的工具來實(shí)現(xiàn)與地圖的交互通過將選擇的工具拖放操作。(3)類庫(kù);它是ArcObjects組件的集合,其有從幾何圖形到制圖,加載GIS數(shù)據(jù)源等一系列功能[15]。并可以通過大多數(shù)開發(fā)的應(yīng)用環(huán)境來進(jìn)行訪問。其開發(fā)包的組成如圖1所示:
地理信息系統(tǒng)中有許多圖形要素的信息,而空間地理數(shù)據(jù)大多數(shù)都來源于地形圖,紙質(zhì)地形圖又是一種最基本的空間數(shù)據(jù)源。其中分幅的圖幅設(shè)計(jì)的方法人為地將連續(xù)的地表空間劃分成若干個(gè)子空間[16]。為了能夠增大要素的范圍,就可以將一個(gè)或多個(gè)要素進(jìn)行合并,尤其在地籍系統(tǒng)中,將要素合并是其中的重中之重,此功能是為了更加方便的將大量要素進(jìn)行合并,這里不僅可以減少數(shù)字化制圖人員工作量還使處理效率大幅度提高,并且具有一定的邏輯性[17]。其表現(xiàn)出來的結(jié)果能夠更符合用戶的需求,更滿足用戶提出需要某區(qū)域的基礎(chǔ)數(shù)據(jù)愿望。而在ArcGIS中的ArcToolbox工具箱中有4種常用的將多個(gè)要素類合并成一個(gè)要素有Union、Merge、Dissolve、Append等。
該功能是基于ArcGIS Engine C#語言實(shí)現(xiàn)是將實(shí)現(xiàn)小于等于給定值的地塊合并到周圍最大的地塊中的功能實(shí)現(xiàn),手動(dòng)所耗費(fèi)的時(shí)間。其在土地利用,地籍整改等方面有著很重要的實(shí)際意義。
由ArcGIS Engine開發(fā)包.NET開發(fā)環(huán)境C#調(diào)用ArcGIS Engine中組件。使用ArcGIS Engine的開發(fā)包可以實(shí)現(xiàn)如下功能:分層顯示專題圖;瀏覽、縮放地圖;在地圖上檢索、查找特征要素;通過SQL語句來查找要素;要素合并;產(chǎn)生緩沖區(qū)距離。這里構(gòu)建地塊信息管理系統(tǒng)的處理模塊[18]如圖2所示:
圖1 ArcGIS Engine開發(fā)工具包組成
圖2 地塊合并總體功能實(shí)現(xiàn)
程序功能采用Visual Studio.NET 2012中的C#.Net為開發(fā)平臺(tái)。運(yùn)用組件式ArcGIS Engine中的MapControl、TOCControl、ToolbarControl開發(fā)控件來執(zhí)行用戶需要的圖形交互操作[19]。以及自定義的功能按鈕與屬性的設(shè)置,其功能界面設(shè)計(jì)如圖3與表1所示:
圖3 總界面設(shè)計(jì)
表1 總界面設(shè)計(jì)屬性
Tab.1 Total interface design properties
SQL屬性查詢主要是用來根據(jù)此功能是通過點(diǎn)擊主窗體上的SQL查詢按鈕,觸發(fā)其點(diǎn)擊事件,然后將所選擇的顯示在圖層中為其合并要素打下基礎(chǔ)。其SQL屬性查詢界面設(shè)計(jì)如圖4與表2所示:
圖4 SQL屬性查詢界面設(shè)計(jì)
表2 SQL屬性查詢界面設(shè)計(jì)屬性
Tab.2 SQL attribute query interface design properties
在合并要素的過程中,將實(shí)現(xiàn)小于等于給定值的地塊合并到周圍最大的地塊中的功能實(shí)現(xiàn)其合并要素界面設(shè)計(jì)如圖5所示。
圖5 合并要素界面設(shè)置
該程序?qū)崿F(xiàn)的功能為合并查出面積小于給定值的要素,并合并到相鄰地塊中最大地塊中,該程序有一定的邏輯性,需要根據(jù)選擇語句進(jìn)行嵌套來對(duì)該功能實(shí)現(xiàn),其關(guān)鍵步驟如下:
第一步:判斷所有地塊是否小于等于輸入的面積,遍歷所有小于等于輸入的面積的地塊pFeature。①
第二步:判斷并遍歷所有大于輸入的面積的地塊pFeature2。②
第三步:判斷面積大于設(shè)定值的要素是否與面積小于設(shè)定值的要素相臨。
第四步:分別遍歷與面積小于設(shè)定值的要素相臨大于設(shè)定值的要素并比較,將面積最大的賦給將被合并較大的地塊pBaseFeature。③
第五步:顯示將被合并的面積較大的地塊pBaseFeature。
第六步:將所有的小于并等于的輸入值的面積實(shí)現(xiàn)合并到相鄰的最大面積中。
其中①pFeature是所有小于等于輸入面積的地塊、②pFeature2是所有大于輸入面積的地塊、③pBaseFeature是所有將被合并到的地塊。其關(guān)鍵部分的流程圖如圖6所示:
程序進(jìn)行了小于等于給定值的地塊合并到周圍最大的地塊中的功能實(shí)現(xiàn),并顯示了要合并的地塊的面積中,例如輸入面積10068330.3,會(huì)同時(shí)將面積7772770.8合并到37423900.6和將面積10068330.3合并到48648905.6的面積中如圖7所示,原始圖與合并后的對(duì)比圖8所示:
在ArcGIS中的工具箱有4種較常用的將多個(gè)要素類進(jìn)行合并,但是其分別有一定異同之處。例如Union、Merge Dissolve、Append不同處如下。
(1)Union的功能:其合并時(shí)圖形只能合并類型為polygon(面)要素類。兩個(gè)要素類合并時(shí)會(huì)進(jìn)行處理相交部分,使之單獨(dú)形成要素,新產(chǎn)生的要素在目標(biāo)圖層中產(chǎn)生。其合并到新的要素類中。
(2)Merge的功能:其合并后原來的要素消失。merge不處理要素,所以輸出的要素類可能會(huì)有重疊或縫隙。
圖6 地塊合并關(guān)鍵部分的流程圖
圖7 顯示要被合并的地塊的面積
(3)Append的功能:主要是將多個(gè)要素進(jìn)行合并。比如將兩個(gè)省的數(shù)據(jù)合并到一個(gè)要素類中。但必須是相同類型的。
(4)Dissolve的功能:可以把多個(gè)要素,通過指定的屬性(屬性值相同),溶解成一個(gè)要素,例如:可以將縣溶解成市。但會(huì)丟失沒有指定的不同的屬性。
而本功能的合并可以將所有小于給定值的面積進(jìn)行合并,這里在對(duì)比Union、Merge、Dissolve、Append的方法中進(jìn)步之處是它可以大量的按照一定法則進(jìn)行地塊的合并可以去除所有小塊的面積,節(jié)約手動(dòng)所耗費(fèi)的時(shí)間,并且其在土地利用,地籍整改等方面有著很重要的實(shí)際意義,其只能合并類型為polygon(面)要素類使之單獨(dú)形成要素,新產(chǎn)生的要素直接在目標(biāo)圖層中產(chǎn)生。
圖8 原始圖與合并后對(duì)比圖
地理信息系統(tǒng)技術(shù)的應(yīng)用大大地提高了處理地理數(shù)據(jù)的工作效率。而采用組件式COM結(jié)構(gòu)的地理信息系統(tǒng),不僅僅可以降低開發(fā)難度,縮短程序開發(fā)周期提高開發(fā)效率,使編程過程更簡(jiǎn)潔,用戶界面更友好,增強(qiáng)了系統(tǒng)的靈活性,而且可以使程序更加靈活、簡(jiǎn)便。利用ArcGIS Engine在系統(tǒng)中實(shí)現(xiàn)地圖的操作,并結(jié)合。NET平臺(tái)開發(fā)的地理信息系統(tǒng)是具有一定應(yīng)用前景的[20]。當(dāng)然,系統(tǒng)開發(fā)是一個(gè)復(fù)雜的過程,隨著相關(guān)技術(shù)的不斷發(fā)展,而一個(gè)功能的實(shí)現(xiàn)也有在系統(tǒng)應(yīng)用開發(fā)中有著舉足輕重的意義。
本功能主要是將實(shí)現(xiàn)小于等于給定值的地塊合并到周圍最大的地塊中的功能實(shí)現(xiàn),節(jié)約手動(dòng)所耗費(fèi)的時(shí)間,并且其在土地利用,地籍整改等方面有著很重要的意義。不過在要素合并中,可以根據(jù)各種條件,例如根據(jù)距離,將所有產(chǎn)生的緩沖距離所包含的地塊進(jìn)行合并,或者根據(jù)OID即當(dāng)前要素OID為主關(guān)鍵字。將小于比較要素的OID放在最外層,就是說按照取出遞增次序嚴(yán)格按照OID值遞增的規(guī)則進(jìn)行比較。例如該程序只會(huì)比較1-2、2-4要素而不會(huì)再比較2-1、2-2 要素。這樣減少了許多不必要的要素進(jìn)行合并條件判斷,將大部分不滿足合并條件的地塊要素比較早的排除?;蛘吒鶕?jù)地物所有的不同的屬性進(jìn)行相關(guān)的邏輯合并。而本功能只進(jìn)行了小于等于給定值的地塊合并到周圍最大的地塊中的功能實(shí)現(xiàn),合并功能并沒有完整的實(shí)現(xiàn)。同時(shí)基于ArcGIS Engine最終是為了實(shí)現(xiàn)系統(tǒng)化展示,該功能只能在ArcGIS Engine中作為add—in插件進(jìn)行整合,而對(duì)其它系統(tǒng)中不能進(jìn)行整合。
[1] 牟乃夏, 王海銀, 李丹等. ArcGIS Engine地理信息系統(tǒng)開發(fā)教程-基于C#. NET[M](2015年版). 北京: 測(cè)繪出版社, 2015. 11-12.
[2] 肖慶. 組件GIS二次開發(fā)技術(shù)研究[J]. 軟件導(dǎo)刊, 2008, 7(11): 148-150.
[3] 張正祥, 張洪巖. ArcObjects組件在地理信息系統(tǒng)二次開發(fā)中的應(yīng)用[J]. 遙感信息, 2004, 10(2): 66-68.
[4] 劉文利. CAD與GIS數(shù)據(jù)的可視化轉(zhuǎn)換方法研究[J]. 軟件導(dǎo)航, 2011, 10(2): 16-17.
[5] 趙俊三, 尹鴻俞, 楊軍等. 土地利用規(guī)劃管理信息系統(tǒng)技術(shù)方法研究[J]. 礦山量測(cè), 2003, 6(4): 7-10.
[6] 原方圓, 馬書南, 雷偉, 等. 高安全性數(shù)字化檔案管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2018, 39(7): 98-102.
[7] 沈亮. 基于手機(jī)APPGISOLAP 的移動(dòng)運(yùn)營(yíng)商網(wǎng)格集中管理中心系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2016, 37(4): 74-83.
[8] 周洲, 侯開虎, 張慧等. 基于. NET平臺(tái)的物料管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2018, 39(7): 177-181.
[9] 諶迅. 大數(shù)據(jù)資產(chǎn)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2016, 37(02): 50-53.
[10] 吳瑋, 李小帥, 張斌. 基于ArcGIS Engine 的GIS開發(fā)技術(shù)探討[N]. 研究簡(jiǎn)報(bào), 2006-5-8(2).
[11] 龔純偉. 基于ArcObjects 的地理信息系統(tǒng)二次開發(fā)與實(shí)現(xiàn)[D]. 昆明: 昆明理工大學(xué), 2005.
[12] 蘭小機(jī), 劉德兒, 魏瑞娟. 基于ArcObjects與C#. NET的GIS應(yīng)用開發(fā)[M]. (2013年版). 北京: 冶金工業(yè)出版社, 2013, 61-81.
[13] 張斌. 基于ArcGIS Engine的GIS開發(fā)技術(shù)[N]. 武漢大學(xué)研究生學(xué)報(bào), 2004-3-8(2).
[14] 丁黎, 王翠平, 馬靜等. ArcGIS Engine的GIS開發(fā)技術(shù)初探[J]. 山西建筑, 2007, 33(17): 22-26.
[15] Goodchild M. Geographical Information Science[J]. Journal of International Geographical Information System, 1992, 6(1): 31-45.
[16] 徐昌榮, 劉烜, 朱衛(wèi)東. 基于ArcGIS Engine的地圖要素合并方法研究與實(shí)現(xiàn)[J]. 測(cè)繪科學(xué), 2009, 34(4): 206-207.
[17] 劉翔宇, 朱大明. Arcgis中基于Python的地理數(shù)據(jù)庫(kù)批量合并方法研究[J]. 軟件, 2018, 39(7): 161-165.
[18] 肖澤云. ArcGIS Engine開發(fā)實(shí)例教程[M](2006年版). 北京: 清華大學(xué)出版社, 2006, 1-60.
[19] 曾光清, 陶佩楓. 組件式GIS(地理信息系統(tǒng))的研究[J]. 湖南有色金屬, 2007, 32(2): 65-67.
[20] Michael F. The National Center for Geographical Information System and Anlysis[J]. Surveying and Land Information Systems, 1990, 50(2): 82-90.
Implementation of Block Merging Function Based on ArcGIS Engine and C#.net
SUN Yu-man, ZUO Xiao-qing, SU Wen-hao
(Kunming University of Science and Technology, College of Land and Resources Engineering, Kunming 650500)
In recent years, along with our computer technology unceasing development, ArcGIS is appeared in people's field of vision, it is many other aspects of the full integration of the ESRI GIS database, artificial intelligence, software engineering and network technology, computer technology, successfully introduced to the highest level of technology in the GIS platform. GIS technology of our country is developed based on ArcGIS Engine Technology, the theory foundation of mostly source in ArcGIS Engine development theory. Therefore, this paper is mainly combined in recent years ArcGIS Engine in the technical field of GIS development has to combine theory and practice experience, will be an important source of GIS basic frame data, map elements, here is the C# language and COM component technology, will achieve is less than or equal to the given value of land consolidation to maximum around the plots in the function realization, save manual consuming time and in the land use, cadastral rectification has a very important significance.
Geographic information system; ArcGIS engine; Parcel union
TP311.52
A
10.3969/j.issn.1003-6970.2018.10.029
孫毓蔓(1994-),女,研究生,主要研究方向:GIS數(shù)據(jù)處理與遙感應(yīng)用;左小清(1972-),男,教授,主要研究方向:測(cè)量與 GIS 方向;蘇文豪(1995-),男,研究生,主要研究方向:土地管理與遙感應(yīng)用。
孫毓蔓,左小清,蘇文豪. 基于ArcGIS Engine與C#.net的地塊合并功能的實(shí)現(xiàn)[J]. 軟件,2018,39(10):150-155