劉康晨
(江蘇師范大學地理測繪與城鄉規劃學院,江蘇徐州 221116)
ArcGIS是美國ESRI公司在對其早期開發產品整合的基礎上,于1999年推出的一款可伸縮、全系列GIS平臺,供用戶選擇使用。從最初的ArcInfo 8發展到如今的ArcGIS10.7,當前ArcGIS主要包括了ArcGIS for Desktop,ArcGIS Server,ArcGIS Online,ArcGIS Enterprise,ArcGISPro等產品。其中,ArcGIS桌面系統是供GIS專業人員編輯、管理和分析地理信息的軟件套件,可用于完成數據編輯、制圖、可視化、地理分析和空間處理等一系列由簡單到復雜的GIS任務[1]。目前的ArcGIS桌面系統主要包括兩大類:ArcGISfor Desktop,ArcGISPro。在傳統ArcGISfor Desktop中主要包括 ArcMap,ArcCatalog,ArcScene和ArcGlobe四類產品,而ArcGISPro在整合傳統ArcGISfor Desktop產品于一體的基礎上,又加入City Engine以提升ArcGIS三維建模能力,在未來有取代ArcGIS for Desktop的可能。
隨著版本不斷更新,ArcGIS桌面系統功能更加完善,現已成為GIS專業人員處理地理信息的必備軟件。利用ArcGIS桌面系統處理地理數據時優勢明顯[2-3]:借助其強大的分析工具和擴展模塊,可實現對地理數據方便快捷地處理;同時,憑借其友好地人機交互界面,用戶可以對數據快速處理;而軟件本身提供的模板和具備的能力,能極大減少地圖的生產耗時,且在一定程度上實現地圖生產自動化;此外,還可以輕松創建GIS資源,便于信息分享。
ArcGIS桌面系統不僅功能強大,還提供靈活的定制開發方式,用以進一步滿足用戶個性化需求。如 ArcGIS提供了VBA(Visual Basic for Applications),ArcObjects(簡稱 AO),ArcEngine(簡稱 AE),Model-Builder,Addin等多種定制擴展開發技術[4-5],供用戶自主定制開發。在開發過程中,傳統開發方式更側重基于VBA,AO或AE的開發,而Addin技術作為新推出的開發技術,目前少有人對其研究分析。為更好地利用Addin開發技術,實現對ArcGIS桌面系統的擴展,本文進一步對該種開發方式進行解釋說明。
Addin通常被譯作插件,是從ArcGIS10開始引入的新的桌面定制開發技術。相較于AO,AE等傳統二次開發方式,Addin具有容易創建、易于安裝、便于共享、更加安全及方便卸載等特性。在開發過程中,根據所采用的開發語言不同,可將Addin開發方式具體分為兩種[6]:基于Python腳本語言的Addin技術、面向.NET(包含C#,VB,C++等)及Java高級編程語言的Addin技術。
其中,Python Addin技術在開發過程中可直接調用ArcGIS內置的ArcPY站點包,再利用ArcPY站點包實現對ArcGIS工具箱中各種工具直接調用。這既避免了了解復雜AO組件的難題,又降低了對開發人員的要求[7]。同時,Python語言簡潔、寫法獨特的優勢,使得在開發過程中可減少代碼數量,且不需要編譯。但在這種開發方式下,其編碼不易調試且可擴展元素較少,缺點較為明顯。
同Python Addin技術相比,面向.NET及Java高級編程語言的開發方式可支持更多可擴展元素。該方式是基于AO組件的擴展開發,可實現細粒度的控制ArcGIS的各種操作。同時,C#作為專為.NET Framework設計的一門面向對象的高級編程語言,其語言簡潔、兼容性強、面向對象及與Web緊密結合等優勢突出[8],更容易受到開發人員的青睞。
基于C#的Addin開發過程一般可分為4個步驟:創建項目、添加組件、編寫代碼、調試安裝。具體開發流程如圖1所示。

圖1 Addin開發流程
打開Visual Studio 2010,選擇Desktop Add-Ins模板 ,具 體 有 ArcCatalog Add-in,ArcMap Add-in,ArcScene Add-in及ArcGlobe Add-in四種選擇,在開發過程中可根據實際需要選擇相應的模板。隨后,設置項目名稱及其存放位置,并完善相關描述信息,如項目名稱、開發單位、開發人員姓名、插件的用途介紹及插件的圖標設置等。完成后即可點擊Next進行下一步設置。
完善相關信息后,根據插件界面設計的實際需要,為該項目添加相應組件。Addin中支持的組件類型主要有交互類和容器類兩種[9],具體如圖2所示,且部分交互類組件還可依托于容器類組件上。為組件添加相應的描述信息后,點擊Finish即可實現項目創建。此外,在完成項目創建后,還可以通過右擊項目名稱,選擇“添加”—“組件”方式繼續添加其他組件元素。

圖2 Addin支持功能類型
完成項目創建后,在生成的Config.esriaddinx文件中可查看上述添加的相關描述信息及組件信息。同時,利用AO及C#語言在組件對應的類文件中輸入相應代碼,通過具體的對象或接口,實現擴展元素相應功能及彼此間的交互。
首次對Addin插件編譯調試時,需先將其附加到已啟動的ArcMap主程序上,具體通過選擇“工具”-“附加到進程”實現。隨后要先關閉ArcMap,然后再進行反復調試。在確保程序正確無誤后,即可發布后綴名為.esriAddIn的文件,雙擊文件即可實現安裝部署,操作簡單快捷。同時,可通過ArcMap下的“加載項管理器”直接卸載已安裝的Addin插件,不會存在注冊表殘留等問題。
當前ArcMap面向Geodatabase表或要素類,將柵格數據以屬性形式存儲到字段中時,存在只能人工手動逐條加入、不能批量加載的不足。根據第三章中基于C#的Addin開發步驟,以開發設計一個實現柵格數據批量加載的“ILoader”插件為例,進一步闡述基于C#的Addin開發過程。開發設計的插件用戶界面如圖3所示。

圖3 ILoader工具條界面
“ILoader”插件中包括的具體組件名稱及其作用,具體如表1所示。同時,關于插件的相關描述性信息及所有的組件元素信息,均可在配置文件Config.esriaddinx中查看,如下所示。
//配置文件Config.esriaddinx信息
//項目描述信息
<Name>ILoader</Name>
<AddInID>{40b44017-99e7-4acf-acb5-5805b96 d111f}</AddInID>
<Description>一個向Geodatabase表批量加載圖像的工具欄</Description>
<Version>1.0</Version>
<Image>ImagesILoader.png</Image>
<Author>劉康晨</Author>
<Company>JSNU</Company>
<Date>2020/01/01</Date>
<Targets>
<Target name="Desktop"version="10.2"/>
</Targets>
<AddIn language="CLR"library="ILoader.dll"namespace="ILoader">
//組合框C1ComBox相關信息
<ComboBox id="JSNU_ILoader_C1ComBox"class="C1ComBox"
message="選擇一個可加載圖像數據的目標表或要素類"caption="表"tip="目標表"category="Add-InControls"image="ImagesC1ComBox.png"sizeString="WWWWWWWWWWW"rows="12"itemSizeString="WWWWWWWWWWW"hintText="-------目標表-------"editable="true"/>
//工具欄ILoader相關信息
<Toolbar id="JSNU_ILoader_ILoader"caption="ILoader"showInitially="false">
<Items>
<ComboBoxrefID="JSNU_ILoader_C1ComBox"/>
<ComboBox refID=
"JSNU_ILoader_C2ComBox"separator="true"/>
<ItemrefID=
"JSNU_ILoader_C3Button"separator="true"/>
<Button refID="JSNU_ILoader_C4Button"/>
</Items>
利用該插件進行柵格數據加載時,首先通過C1ComBox組合框選擇包含柵格字段的表,通過C2ComBox組合框選擇一個字段用于匹配;然后通過C3Button,C4Button按鈕選擇待匹配的柵格數據,依次分析其文件名,并將與“匹配字段”中取值匹配的柵格數據返回柵格字段中,未匹配的則返回Null,直至處理完所有被選中的數據為止。此外,匹配結果還可通過C5DWnd可停靠窗口上的DataGridView控件顯示。通過本插件最終可實現柵格數據的批量加載,完善ArcMap原有功能的不足[10]。
ArcGIS桌面系統作為一個專業GIS應用軟件套件,其包含的ArcGISfor Desktop及ArcGISPro在各行業領域的數據處理過程中均得到廣泛應用,但其本身在一些功能細節上還存在一定不足。目前,針對ArcGISfor Desktop擴展的方法多樣,而利用Addin技術擴展ArcGIS桌面系統,不僅降低了開發門檻,還極大地提高了開發效率。本文主要闡述了基于C#的Addin開發一般流程,并通過開發實例具體驗證擴展插件的優越性,希望能為有意愿學習Addin開發技術的人員提供一定借鑒意義。

表1 ILoader組件構成