【轉】ArcGIS擴展開發(一)--爲 ArcGIS Desktop建立Add-in插件

 

本文章轉載至http://www.cnblogs.com/tmall/archive/2013/04/30/3052388.html,特此申明

   寫在前面的:

  1、由於是頭次翻譯外文幫助文檔,所以錯誤難免,希望大家都提出來,翻譯的不好還望大家少拍磚多鼓勵。

  2、本系列博文是依據 ArcGIS官方文檔翻譯的,原文地址爲:        http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Building_add_ins_for_ArcGIS_Desktop/0001000000w2000000/

    3、由於我現在大三,忙着上課和考研,所有博客會不定期更新本系列文章。

 

本次主題

  • · 關於 add-ins插件
  • · 什麼時候使用 add-ins
    • · Python
    • · Classic COM extensibility
  • · Add-in的類型
  • · 管理 add-ins插件
  • · Add-in 文件結構分析
  • · 建立 add-ins插件

關於add-ins插件

     ArcGIS 10 爲了是你更加容易的自定義和擴展ArcGIS Desktop應用程序,引入了幾個新的很具有創新特性,包括Add-in模型。新的Add-in模型提供了一個公開的基礎框架,目的是爲了方便的創建一系列自定義工具,這些工具被打包壓縮成了一個單獨的文件。新的Add-in模型爲了方便大家創建一系列自定義工具提供了一個公開的基礎框架,它們被打包壓縮成了一個單獨的文件。新的Add-in模型提供了一個公開的基礎框架,目的是爲了方便的創建一系列被打包壓縮在一個單獨的文件的自定義工具。爲了方便的創建一系列被打包壓縮在一個單獨的文件的自定義工具,新的Add-in模型提供了一個公開的基礎框架。

    Add-ins插件能夠很方便的在用戶之間共享,因爲它們既不需要安裝程序 ,也不需要組件模型(COM)註冊;Add-ins插件通過簡單的複製它們到well-known文件夾,然後從當前文件夾中刪除它們來移除 來安裝到系統中。

Well-Known文件目錄:

  Vista/7: C:\Users\<username>\Documents\ArcGIS\AddIns\Desktop10.0

  XP: C:\Documents and Settings\<username>\MyDocuments\ArcGIS\AddIns\Desktop10.0

    Add-ins 插件也能夠通過集中式的網絡在一個組織中的用戶之間共享。Add-ins 插件是用.NET或者Java,還有可擴展標示語言(XML)製作的。XML描述用戶的自定義信息,.NET 或者Java的類提供用戶自定義的功能。ArcObjects軟件的開發工具包(SDK)包括一個Add-Ins嚮導,它爲了簡化開發,還集成了開發環境,例如Eclipse, Microsoft Visual Studio。

什麼時候使用add-ins插件

     ArcGIS add-ins使得構建和分享桌面自定義工具更加容易。然而,這取決於你構建的解決方案的目的和特性,接下來的某個操作或許適合你。

Python

      所有的ArcGIS桌面應用程序都包含嵌入式的腳本Python。

      ArcGIS應用的許多領域,特別是地理數據處理,都可以通過簡單的Python應用程序編成接口(APIs),使得構建和自動化一些基礎任務更加容易。Python腳本非常容易共享,並且製作它也不需要另外的開發環境。有許多公共的Python模塊主要集中在科學,工程和數學運算上面。儘管它有這麼多優勢,Python也不是適合每個編程任務。

     此外,在Python裏面編輯和調試 不夠成熟,他不像Visual Studio那樣的商業開發環境容易使用。

最後,你不能響應ArcGIS的事件,實現一個COM接口,或者用Python插入ESRI的許多COM擴展點。

Classic COM extensibility(經典的COM擴展模型)

     Add-in 框架不支持每個被ArcGIS定義的擴展點。例如,你不能用Add-in 自定義一個渲染器,一個自定義工作空間,或者自定義一個要素。如果你的解決方案包含add-in框架不支持的組件類型,你必須使用經典的COM擴展方法。此外,因爲add-ins插件不涉及註冊步驟,所以不要使用依賴類庫,程序集,服務的add-in解決方案,因爲那些需要註冊。

Add-in 類型

     ArcGIS 桌面應用程序支持一組固定的Add-in類型,包括最流行的基於COM的擴展模型都被引入到ArcGIS預覽版中了。下面的Add-in類型是目前正式版支持的類型。

  • · Buttons and tools(按鈕和工具) 
    按鈕和工具是最簡單的能夠在工具欄顯示的控件,按鈕還能在菜單上顯示。
  • · Combo boxes(組合框)

      Combo box提供了一個下拉列表框,同時能夠隨意的提供能夠編輯的輸入區域。

  • · Menus and context menus(菜單和快捷菜單)
    菜單展現的是一組下拉式列表按鈕,子菜單,多項目。菜單項能夠來自嵌入的資源,add-in資源或者是兩者的組合。菜單通常駐留在工具欄,但是它們也出現在獨立的快捷菜單(彈出式菜單)或者根菜單。
  • · Multi-items(多項目)

   多項目是在運行時創建的動態的菜單項的集合。多項目在菜單項在運行之前不清楚或項目需要在當前系統狀態進行修改的基礎上情況下非常有用。

  • · Toolbars (工具欄)
    工具欄更夠宿主按鈕,工具,菜單,工具欄選項或者組合框。像菜單一樣,出現工具欄上的控件能夠來自嵌入資源,add-in資源或者兩者的組合。工具欄能夠被自動配置,當初始化的時候會被加到應用程序中。
  • · Tool palettes(工具欄選項)

     工具欄選項提供了緊湊的方式來組合一系列工具,最常用的工具出現在工具欄上伴隨着一個小的下拉按鈕它用來選擇同組中的其他工具。像菜單一樣,出現在工具欄選項上的工具可以來自嵌入資源,add-in資源或者兩者的組合。

  • · Dockable windows (可停靠窗體)
    可停靠窗口可以懸浮或者停靠在ArcGIS 桌面應用程序中。你可以用任意一種內容填充可停靠窗體:圖表,幻燈片,視頻,迷你地圖,或者包含其他控件的自定義對話框,當然也包括ESRI的控件。Add-in開發者必須考慮在可停靠窗體上的控件的初始化,控件是否被其他可停靠窗體分組。
  • · Application extensions(應用程序擴展)
    應用程序擴展被用來協調與其他組件的活動,例如按鈕,工具,可停靠窗體。應用程序擴展通常負責存儲和add-in插件相關的狀態。 當被關聯的應用程序啓動的的時候,應用程序擴展插件的配置信息會在加載 時候配置好。擴展插件也能夠在被配置好出現在標準的ArcGIS擴展對話框內。
  • · Editor extensions (編輯器擴展)
    編輯器擴展插件允許你通過直接加載插件到編輯框架裏面來自定義你的編輯工作流。與應用程序拓展插件相反,Add-ins編輯擴展工具是在編輯會話的時候被加載的開始運行的(編輯>開始編輯)。你可以通過創建編輯擴展工具來自定義你的編輯會話的功能。

管理Add-ins

     Add-ins插件能夠通過 基於web 分享,通過郵件或者瀏文件系統或者網絡等各種各樣的資源獲得。你可以在Windows Explorer裏面通過雙擊add-in文件來安裝它。當雙擊add-in文件的時候,ESRI系統所支持add-in文件的安裝驗證機制,並將其拷貝到well-known文件夾。用戶可以查看插件的作者,描述,版本,數字簽名信息在用戶安裝插件的時候。這個驗證的步驟的作用是確保你的文件被拷貝到合適的位置,確保文件名字沒有衝突,還要確保已經存在的add-in插件的版本不能夠被老版本的插件覆蓋。

這種功能也可以通過電子郵件附件,或者網頁鏈接來工作。

看下面的截圖:

 

     Add-ins插件也可以通過ArcGIS 桌面應用程序上自定義對話框上的“添加”文件按鈕安裝插件。截圖如下:

 

        你可以通過自定義菜單選擇自定義對話框。Add-ins插件可以通過雙擊或者從本地已被分類好的文件中選擇添加操作來安裝。本地Add-ins插件位於本地機器每個用戶的well-known文件夾中。如果不使用ESRI系統的add-in功能,也可以手動拷貝文件到well-known文件夾下,但是要注意文件重名,版本覆蓋等問題。這種方法在網絡中分享add-ins插件很常見。正如經典的COM組件,單獨的add-in類型可以通過自定義對話框來訪問到。 例如,一個被定義在add-in插件功能中的按鈕和COM模型的命令式一樣的,他們都被詳細的分類列舉在命令選項卡上。從這裏,你可以將它拖到工具欄或者菜單上。

      ArcGIS桌面應用程序自定義菜單下又add-in 管理器對話框。在對話框的Add-Ins標籤欄提供了每個被安裝並且當前正在運行的插件的詳細的信息。

看接下來的屏幕截圖:

 

      Add-In管理器“操作”選項卡可以讓用戶自定義well-known文件夾。Add-In框架會每次在應用程序啓動的時候會在自定義文件夾裏自動搜索另外的add-ins插件。這個操作一個小組中用中心網絡的方式分享Add-ins 情況下特別有用。在不登錄客戶機的情況下,可以添加,刪除,更新Add-ins 插件。如果更新了add-in插件後,系統會通過反射機制在插件下次啓動的時候自動更新。“操作”選項卡也可以讓所有的add-in插件功能失效。

截圖如下:

 

      從add-in管理器裏面,用戶也可以選擇刪除某個特定的add-in插件。

卸載一個Add-in插件只不過就是把選擇的add-in文件移動到了回收站,這便於日後有需要的時候對插件進行恢復。

卸載按鈕只對本地的add-ins插件有效。爲了卸載原來自定義文件夾裏面的add-in插件,可以利用移除按鈕直接移除add-in插件。

Add-in file anatomy(插件文件結構分析)

      Add-in插件是由許多部分組成的,包括描述add-in插件的自定義信息的元數據的XML文件,圖像和其他自定義數據,還有已經編譯的代碼。

爲了把這些有關係的數據關聯在一起,add-ins插件都是被打包成一個以esriAddIn爲拓展名的zip壓縮包。(例如,Acme.esriAddIn)

Add-ins插件使用聲明式和命令式編程技術。上面提及到XML文件是聲明部分,它描述了add-in插件所有的靜態方面的信息,包括標題,提示,幫助,圖像和詳細的初始化佈局信息。這爲聲明和方案方面增加靈活性,減少和簡化的開發人員的負擔,一般會使得開發和維護更加容易。例如,你可以在不需要重新編譯的情況下修改你的插件的標題和按鈕的圖像。一些自定義工具,例如工具欄,工具欄選項,菜單等等,它們都是聲明式的,它們沒有活動的部分。

接下來的XML例子展示了一個有一個按鈕的工具欄:

複製代碼

<ESRI.Configuration

  xmlns="http://schemas.esri.com/Desktop/AddIns"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <Name>

    Acme Custom Mapping Extension

  </Name>

  <AddInID>{6fa0df73-57ab-491e-a73d-e58ce07af414}</AddInID>

  <Description>Custom mapping toolbar.</Description>

  <Version>1.0</Version>

  <Image>Images\Acme.png</Image>

  <Author>John Locke</Author>

  <Company>Acme</Company>

  <Date>5/28/2009</Date>

  <Targets>

    <Target name="Desktop" version="10.0"/>

  </Targets>

  <AddIn language="CLR" library="Acme.dll" namespace="Acme">

    <ArcMap>

      <Commands>

        <Button

          id="Acme_ToggleDockWinBtn"

          class="ToggleDockWinBtn"

          caption="OpenDockWin"

          category="Acme Tools"

          image="Images\ToggleDockWinBtn.png"

          tip="Toggle dockable window."

          message="Open dockable window.">

          <Help heading="Toggle">Turns the ACME dockable window on and off.</Help>

        </Button>

      </Commands>

      <Toolbars>

        <Toolbar id="Acme_Toolbar" caption="Acme Toolbar">

          <Items>

            <Button refID="Acme_ToggleDockWinBtn"/>

          </Items>

        </Toolbar>

      </Toolbars>

    </ArcMap>

  </AddIn>

</ESRI.Configuration>

複製代碼

 

  

 

      下面的代碼展示了部分有效按鈕的例子。

      所有的ArcObjects對象, 因爲強大的編程環境,可以直接供於開發人員使用。

複製代碼

public class ToggleDockWndBtn: Button

{

    public ToggleDockWndBtn(){}

 

    protected override void OnClick()

    {

        //Get dockable window.

        UID dockWinID = new UIDClass();

        dockWinID.Value = @"ESRI_SelectionSample_SelCountDockWin";

        s_dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID);

    }

}

複製代碼

 

  

 

複製代碼

Public Class ToggleDockWinBtn

    Inherits ESRI.ArcGIS.Desktop.AddIns.Button

    

    Public Sub New()

        

    End Sub

    

    Protected Overrides Sub OnClick()

    

    'Get dockable window.

    Dim dockWinID As UID = New UIDClass()

    dockWinID.Value = "ESRI_SelectionSample_SelCountDockWin"

    s_dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID)

End Sub

複製代碼

 

 

Building add-ins(建立add-ins插件)

   Add-ins插件使用綜合的開發環境(IDE),比如Visual Studio Express for .NET 和Eclipse for Java等。ArcObjects SDKs提供的嚮導和模板可以自動生成包括XML文件和類文件的項目。

      此外,當建立這些工程的時候,它們會自動生成一個add-in文件,然後複製它們到well-known文件夾中。大多數情況下,XML文件是由嚮導來生成的,然而,如果你想手動編輯XML文件,因爲已經關聯的架構文件有智能感知和動態驗證功能,這使得編輯就更加容易了。如果想了解更多關於add-ins插件的開發,嚮導和模板的使用,請看我後續翻譯文章的《建立一個自定義界面的add-ins插件》。

 

See Also:

怎麼樣從COM組件遷移到add-ins插件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章