ArcGIS Pro Add-In插件開發[ArcGIS Pro SDK for .NET]
- 2020 年 8 月 19 日
- 筆記
- Addin, ArcGIS Pro, ArcGIS Pro SDK, c#
本文基於 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5 開發和撰寫。
開發環境配置
獲取ArcGIS Pro
我的ArcGIS Pro是在Esri官網申請的21天試用,版本為ArcGIS Pro 2.5.22081。
安裝VS2019
VS2019的安裝十分簡單,在微軟官網下載VS2019社區版安裝程式,雙擊安裝即可,具體可參考該部落格
安裝ArcGIS Pro SDK
關閉VS拓展自動更新
首先打開安裝好的VS2019,點擊「菜單欄-工具-選項」,在選項中找到「環境-拓展」,關閉拓展自動更新,如下圖所示。關閉拓展自動更新可以防止拓展自動更新後與當前環境不匹配,如我的環境為ArcGIS Pro2.5,如果不關閉自動更新,則下次打開VS時ArcGIS Pro SDK插件將自動更新為2.6版本,與Pro版本不匹配,無法使用。
正式安裝插件
接下來開始安裝ArcGIS Pro SDK for .NET,需要點擊「菜單欄-拓展-管理拓展」,在彈出的窗口中切換至聯機,搜索「ArcGIS Pro」,找到「ArcGIS Pro SDK for .NET」和「ArcGIS Pro SDK for .NET(Utilities)」兩個插件,安裝並禁用自動更新。點擊安裝後,重啟VS插件即安裝完畢,至此,開發環境配置完成。
創建第一個Pro Add-in
使用模板創建Pro Add-in項目
打開VS2019,選擇「創建新項目」,將「項目類型篩選」設置為「ArcGIS Pro SDK」,找到「ArcGIS Pro 模組載入項」創建項目即可,注意選擇語言為C#而非VB。
添加一個button
Pro的插件及配置使用DAML文件,即項目下的「config.daml」進行聲明。
手動添加button
添加button至顯示
首先,我們來嘗試手動添加一個button。打開「config.daml」文件,在controls標籤下添加一個button標籤。
<controls>
<button id="AddOneButton" caption="Add one button" className="AddOneButton" loadOnClick="false" smallImage="Images\AddInDesktop16.png" largeImage="Images\AddInDesktop32.png" keytip="AOB">
<tooltip>Add one button</tooltip>
</button>
</controls>
添加完button標籤後,該控制項並不會顯示,只有當控制項被某個group引用時,才會顯示在菜單中,應用方式如下,其中refID為創建button標籤時的id。
<groups>
<group id="DJ_SuspectTrackingSystem_Group1" caption="Group 1" appearsOnAddInTab="true">
<button refID="AddOneButton"/>
</group>
</groups>
至此,當Pro載入時即會在「菜單欄-載入項-Group」中顯示該控制項。修改完成後的「config.daml」文件和Pro中顯示效果如下圖所示。
為button添加邏輯程式碼
修改daml後,僅實現了在Pro中顯示button,下面來為button添加邏輯程式碼。
在項目中新建一個類,類名為剛才daml文件中對應button的className屬性,並使其繼承自Pro SDK中的Button類。然後重寫Button的相關方法,如點擊時觸發的OnClick方法,在其中實現邏輯程式碼即可,如下圖。
自動添加button
在我們熟悉了daml文件之後,日常開發即可直接使用VS提供的快捷添加控制項的方式。
在項目上「右擊-添加-新建項」,在彈出的窗口左側選擇「ArcGIS Pro Add-ins」中進行篩選後,選擇「ArcGIS Pro 按鈕」,點擊添加,VS即會自動添加一個button類至項目中,在daml文件的controls中添加button定義,並在默認group中引用該button。
生成Addin文件
插件配置完成後,在解決方案上「右鍵-重新生成解決方案」,待解決方案生成完畢後,在解決方案文件夾\bin\Debug
目錄下找到*.esriAddinX
文件,該文件即為插件安裝文件,雙擊即可為Pro安裝該插件。
調試插件
如果不希望直接為Pro安裝插件,而是在開發過程中需要測試插件效果,直接按快捷鍵F5或點擊運行,VS將啟動Pro,並在Pro中載入修改後的插件,可以在其中對插件進行測試。
開發小tip
- 當項目是從其他電腦拷貝而來時,引用地址可能不正確,此時,可以在解決方案上右擊,找到「修復 Pro 引用」選項,點擊後,插件會自動更新引用。若要手動更新引用,dll文件通常存放在
Pro安裝路徑\bin
和Pro安裝路徑\bin\Extensions
目錄下。 - 提示”未能解析主引用***,因為它是針對「.NETFramework,Version=v4.8」框架生成的。該框架版本高於當前目標框架”錯誤資訊,則說明生成使用的Framework版本與當前項目應該使用的Framework版本不匹配,在項目上「右擊-屬性-生成程式」,將「目標框架」切換為當前項目版本即可。
DAML配置
DAML是Desktop Application Markup Language的縮寫。是ESRI基於XML標準自定義的UI配置文件。插件和配置的聲明性部分是在DAML文件中定義的,其中包含了框架元素(主要是插件)的集合,還包括聲明性部分(框架所需的資訊,以便在適當的時候激活或創建相關的對象)。通過這種方式實現介面和功能的分離。
DAML介紹
具體的DAML介紹請查看DAML ID reference。以下僅介紹常用節點。
根節點
即ArcGIS標籤下的節點,大多數情況下無需修改,使用默認即可,常用的有:
- defaultAssembly:該配置代表的插件所在的程式集名稱。
- defaultNamespace:該配置代表的插件所在的命名空間名稱。
AddInInfo節點
AddInInfo節點用於聲明插件的相關資訊,如名稱、描述、圖標等
modules節點
modules節點是最長訪問的節點,插件元素的添加、描述等均在該節點下。modules節點可以包括的元素包括ribbon按鈕、工具、畫廊、組合框、編輯框、調色板和其他控制項,以及應用程式窗格和對接窗格。
Pro 控制項級別
Pro的控制項級別從上到下分為Module-Tab-Group-Menu-Control,相互關係如下圖所示。
- Tab
- Group
- Menu
- Control
一個原始的DAML文件如下圖所示,開發時,先在controls標籤下創建所有要使用的控制項及其描述,然後在需要顯示控制項的group標籤中引用對應的control即可。
將control在新tab中顯示
默認情況下,control將添加至「菜單欄-載入項」中,如果需要在單獨的Tab中顯示,則需要在daml文件tabs標籤下新建tab標籤,並在其中添加對需要顯示的group的引用,如下圖。
常用DAML元素
下面只介紹常用的元素及其屬性、方法等,各元素具體使用情景、屬性、方法等請參見官方API文檔。DAML中通常可以包括controls、categories、dockpanes、groups、menus、minitoolbars、panes、toolbars等等各種元素,具體元素可參見官方DAML ID Reference
控制項control
控制項常用屬性
控制項常用方法
控制項常見方法有:
- OnClick():單擊控制項時觸發
使用時,在控制項類中重寫對應的方法即可,如:
internal class AddOneButton : ArcGIS.Desktop.Framework.Contracts.Button
{
protected override void OnClick()
{
MessageBox.Show("Hello World");
}
}
常用控制項
- button
- comboBox
- checkBox
- labelControl
- tool
停靠窗dockpane
dockpane類為停靠窗口類,其UI由對應的.xaml文件確定,邏輯程式碼由對應的.cs類文件實現。
雙擊xaml文件即可進入設計窗口,可以通過拖拽的方式將各種控制項添加至dockpane介面中,可以通過可視化或程式碼方式設置控制項和dockpane的各種屬性。
本文參考:
- 部落格 //blog.csdn.net/xiangqiang2015/article/details/81741689
- 部落格 //blog.csdn.net/DynastyRumble/article/details/104683339
- Esri官方wiki //github.com/esri/arcgis-pro-sdk/wiki
- Pro API reference //pro.arcgis.com/en/pro-app/sdk/api-reference/index.html#topic10500.html
- 官方DAML ID Reference //github.com/Esri/arcgis-pro-sdk/wiki/ArcGIS-Pro-DAML-ID-Reference