1. 程式人生 > 實用技巧 >ArcGIS Pro Add-In外掛開發[ArcGIS Pro SDK for .NET]

ArcGIS Pro Add-In外掛開發[ArcGIS Pro SDK for .NET]

本文基於 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

  1. 當專案是從其他電腦拷貝而來時,引用地址可能不正確,此時,可以在解決方案上右擊,找到“修復 Pro 引用”選項,點選後,外掛會自動更新引用。若要手動更新引用,dll檔案通常存放在Pro安裝路徑\binPro安裝路徑\bin\Extensions目錄下。
  2. 提示"未能解析主引用***,因為它是針對“.NETFramework,Version=v4.8”框架生成的。該框架版本高於當前目標框架"錯誤資訊,則說明生成使用的Framework版本與當前專案應該使用的Framework版本不匹配,在專案上“右擊-屬性-生成程式”,將“目標框架”切換為當前專案版本即可。

DAML配置

DAML是Desktop Application Markup Language的縮寫。是ESRI基於XML標準自定義的UI配置檔案。外掛和配置的宣告性部分是在DAML檔案中定義的,其中包含了框架元素(主要是外掛)的集合,還包括宣告性部分(框架所需的資訊,以便在適當的時候啟用或建立相關的物件)。通過這種方式實現介面和功能的分離。

DAML介紹

具體的DAML介紹請檢視DAML ID reference。以下僅介紹常用節點。

根節點

即ArcGIS標籤下的節點,大多數情況下無需修改,使用預設即可,常用的有:

  1. defaultAssembly:該配置代表的外掛所在的程式集名稱。
  2. defaultNamespace:該配置代表的外掛所在的名稱空間名稱。

AddInInfo節點

AddInInfo節點用於宣告外掛的相關資訊,如名稱、描述、圖示等

modules節點

modules節點是最長訪問的節點,外掛元素的新增、描述等均在該節點下。modules節點可以包括的元素包括ribbon按鈕、工具、畫廊、組合框、編輯框、調色盤和其他控制元件,以及應用程式窗格和對接窗格。

Pro 控制元件級別

Pro的控制元件級別從上到下分為Module-Tab-Group-Menu-Control,相互關係如下圖所示。

  1. Tab
  2. Group
  3. Menu
  4. 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

控制元件常用屬性

控制元件常用方法

控制元件常見方法有:

  1. OnClick():單擊控制元件時觸發

使用時,在控制元件類中重寫對應的方法即可,如:

internal class AddOneButton : ArcGIS.Desktop.Framework.Contracts.Button
{
    protected override void OnClick()
        {
            MessageBox.Show("Hello World");
        }
}

常用控制元件

  1. button
  2. comboBox
  3. checkBox
  4. labelControl
  5. tool

停靠窗dockpane

dockpane類為停靠視窗類,其UI由對應的.xaml檔案確定,邏輯程式碼由對應的.cs類檔案實現。

雙擊xaml檔案即可進入設計視窗,可以通過拖拽的方式將各種控制元件新增至dockpane介面中,可以通過視覺化或程式碼方式設定控制元件和dockpane的各種屬性。


本文參考:

  1. 部落格 https://blog.csdn.net/xiangqiang2015/article/details/81741689
  2. 部落格 https://blog.csdn.net/DynastyRumble/article/details/104683339
  3. Esri官方wiki https://github.com/esri/arcgis-pro-sdk/wiki
  4. Pro API reference https://pro.arcgis.com/en/pro-app/sdk/api-reference/index.html#topic10500.html
  5. 官方DAML ID Reference https://github.com/Esri/arcgis-pro-sdk/wiki/ArcGIS-Pro-DAML-ID-Reference