Arcgis Add-In開發入門實例

作爲一個本科側重於應用,工作之後卻做了開發的程序員來說,做GIS,開發應該是一門必修課,只是,苦於各種原因吧,做GIS應用的人會開發的很少,做GIS開發的大部分都是計算機出身,痛心疾首啊……

不好意思,剛開始,就嘮叨兩句,還望大家見諒。在Arcgis10的版本之後,ESRI公司推出了很方便的Add-In插件式開發,下面就Add-In做一個簡單的介紹:

Add-In是一種能夠快速擴展桌面應用程序功能的全新擴展方式。

作爲ArcGIS 10中全新定製方法,它有以下特點:

(1)容易創建:ArcGIS提供了很多創建Add-In模板,並提供了詳細的接口以實現各種功能。

(2)更易共享:Add-In本質上是一個Zip壓縮文件這個壓縮文件裏面包含了,易於網絡、郵件傳輸、易於局域網內共享。

(3)更加安全:可以對Add-In文件進行數字簽名,使用的安全性得到保障。

(4)更易安裝管理:只要安裝有桌面軟件,系統就能自動識別Add-In文件,雙擊即可安裝部署,同時desktop也有用於管理Add-In的管理工具。

ArcGISAdd-In支持的類型

 按鈕和工具

 組合框

 菜單和右鍵菜單

 Multi-items

 工具條

 Tool palettes

 可停靠窗體

Application extensions

Editor extensions

在做Add-In開發需要安裝ArcObjects for .net的開發包。下面就詳細的介紹一個簡單的例子:在Arcmap界面添加一個按鈕,按鈕對應的事件爲添加shp數據。

1、開發環境

Vs2010+Arcgis10.0+win8 64bit

2、實現代碼

首先在VS2010中新建一個解決方案,命名AddInTest。

接着,給解決方案AddInTest新建一個項目:

點擊[確定],出現如下界面,直接點擊[finish]。

接着,給項目ArcMapAddinTest新建一個項目

點擊[添加],設置相關信息,並點擊[finish]完成。

上圖中,class name是類的名稱,caption是button顯示的文字,category是所屬的command的分類,tooltip是鼠標在上面時狀態欄顯示的文字,description是工具的描述。

項目建成後,文件組織如下圖:

Config.esriaddinx是一個XML文件,是一個配置文件,裏面包含了項目的相關配置,是自動生成的,內容如下:

<ESRI.Configuration xmlns="http://schemas.esri.com/Desktop/AddIns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name>ArcMapAddinTest</Name>
  <AddInID>{0f7ec41b-d1e3-4391-8d67-9dea10bea621}</AddInID>
  <Description>Type in a description for this Add-in.</Description>
  <Version>1.0</Version>
  <Image>Images\ArcMapAddinTest.png</Image>
  <Author>Administrator</Author>
  <Company></Company>
  <Date>2013/12/12</Date>
  <Targets>
    <Target name="Desktop" version="10.0" />
  </Targets>
  <AddIn language="CLR" library="ArcMapAddinTest.dll" namespace="ArcMapAddinTest">
    <ArcMap>
      <Commands>
        <Button id="ArcMapAddinTest_AddShp" class="AddShp" message="點擊瀏覽shp文件並添加" caption="AddShp" tip="實現添加shp文件的功能" category="Add-In Controls" image="Images\AddShp.png" />
      </Commands>
    </ArcMap>
  </AddIn>
</ESRI.Configuration>

新建完成之後,addshp的內容如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;


namespace ArcMapAddinTest
{
    public class AddShp : ESRI.ArcGIS.Desktop.AddIns.Button
    {
        public AddShp()
        {
        }

        protected override void OnClick()
        {
        }

        protected override void OnUpdate()
        {
        }
    }
}

裏面包含兩個方法,onclick和onupdate方法。onclick方法是點擊按鈕時,我們在裏面寫添加shp文件的代碼。

首先,添加如下引用:

using System.Windows.Forms;
using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;

onclick方法裏,事件的實現代碼如下:

	IMxDocument pMxd;
        public Button1()
        {
            pMxd = ArcMap.Document as IMxDocument;
        }

        protected override void OnClick()
        {            
            System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
            openFileDialog.Filter = "shp(*.shp)|*.shp";
            openFileDialog.InitialDirectory = @"D:\";
            openFileDialog.Multiselect = false;
            DialogResult pDialogResult = openFileDialog.ShowDialog();
            if (pDialogResult != DialogResult.OK)
            {
                return;
            }
            string pPath = openFileDialog.FileName;
            string pFolder = System.IO.Path.GetDirectoryName(pPath);
            string pFileName = System.IO.Path.GetFileName(pPath);

            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0);
            IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
            IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName);
            IFeatureLayer pFLayer = new FeatureLayerClass();
            pFLayer.FeatureClass = pFC;
            pFLayer.Name = pFC.AliasName;
            ILayer pLayer = pFLayer as ILayer;
            IMap pMap = pMxd.FocusMap;
            pMap.AddLayer(pLayer);
            
            //
            //  TODO: Sample code showing how to access button host
            //
            ArcMap.Application.CurrentTool = null;
        }

OnUpdate方法事件的代碼如下:

	protected override void OnUpdate()
        {
            Enabled = pMxd.FocusMap.LayerCount >= 0;
        }

代碼編寫完成後,編譯程序,打開編譯目錄,編譯文件如下:

雙擊.esriAddIn文件,添加工具到Arcmap中。打開Arcmap,打開擴展管理,command選項卡,找到Add-In Controls,這時候你會發現你編寫的工具會出現在這一組裏面。

點擊[close],點點試試……

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