技术专栏

gis培训

ArcGIS Desktop Add-in插件开发

作者:张鑫 邮箱:zhangxin@lreis.ac.cn 发布时间:2014-12-01 09:54:44 阅读(7369)

1        概述

ArcGIS10版本之后引入了几个新的创新的功能,使您更容易定制和扩展ArcGIS桌面应用,包括新的桌面插件模型。

Add-in可以理解为包含多种UI和非UI对象的插件包,其中支持的对象类型包括:

a) 交互类

说明: c:\users\administrator\appdata\roaming\360se6\User Data\temp\122747_2010120917185511HU3.png

1) 按钮

按钮是一种简单的控制,可以出现在工具栏上。

2) 工具

工具也是一种简单的控制,可以出现在工具栏上或菜单中。

3) 组合框

组合框提供了一个项目的下拉列表,可以选择提供一个可编辑的输入区域。

4) 多项目

多项目是在运行时动态创建菜单项的集合。

5) 应用程序扩展

应用程序扩展用于组件之间的协调活动,如按钮、工具和停靠窗口。应用程序扩展经常用于侦听和响应由宿主应用程序公开的各种活动。应用程序扩展,可配置为自动加载或在加载它们的相关的应用程序时自动启动,也可以出现在标准ArcGIS的扩展对话框。

6) 编辑器扩展

编辑器扩展可以通过插入框架直接进入编辑工作流程。相对于应用程序扩展,编辑器扩展加载项被加载编辑会话时需要开始编辑。你也可以通过创建编辑器扩展自定义编辑会话的行为

7) 可停靠窗口

ArcGIS桌面应用程序的显示中,可停靠窗口是浮动或停靠的窗口。在可停靠窗口中你可以填充的内容分为:图表、幻灯片、视频、地图或包括Esri自定义对话框控件。

b) 容器类

说明: c:\users\administrator\appdata\roaming\360se6\User Data\temp\122747_201012091720261KkDa.png

1) 工具栏

工具栏可以承载按钮、工具、菜单、工具栏和组合框。

2) 工具盘

工具盘提供了一种紧凑的方式将一组相关的工具集。

3) 菜单

菜单提供了一个菜单项的下拉列表。

4) 右键菜单

右键菜单提供了一个右键弹出的菜单项的下拉列表。

2        开发流程

2.1 开发环境

ArcGISAdd-in的开发环境为VS2010+ArcGIS Desktop10.1+ArcGIS Engine 10.1+Win 7 64bit

2.2开发步骤

2.2.1       项目需求

查找出面积小于给定值的地块,并合并到相邻的地块中最大的地块。

2.2.2       功能实现

  1. a)        新建解决方案

启动VS2010,新建项目。

点击确定,新建一个项目。

  1. b)       进入Welcome页面设置

Add-in Name:插件的名称;

Company/Publisher:插件的制作公司或发布者;

Author:插件的制作者;

Description:插件的描述;

Image:插件的图标。

  1. c)        进入Add-in Types页面

Add-in Types页面用于设置创建的插件的类型。

选择Add-in Types,此处选择按钮。

Class Name:类的名称;

Caption:按钮上显示的文本;

Image:按钮上的图标;

Category:所属Command的分类;

Tooltip:鼠标在上面时状态栏显示的文字;

Description:工具的描述。

点击Finish完成设置

  1. d)       文件组织

Config.esriaddinx文件是一个XML文件,它是一个配置文件,里面包含了项目的相关配置,是自动生成的。内容如下:

<ESRI.Configurationxmlns="http://schemas.esri.com/Desktop/AddIns"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <Name>FeaturesMerge</Name>

  <AddInID>{94327fc0-a266-44a1-8797-3525955249cf}</AddInID>

  <Description>查找出面积小于给定值的地块,并合并到相邻的地块中最大的地块。</Description>

  <Version>1.0</Version>

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

  <Author>zx</Author>

  <Company>Higis</Company>

  <Date>2014/11/17</Date>

  <Targets>

    <Targetname="Desktop"version="10.1" />

  </Targets>

  <AddInlanguage="CLR4.0"library="FeaturesMerge.dll"namespace="FeaturesMerge">

    <ArcMap>

      <Commands>

        <Buttonid="Higis_FeaturesMerge_FeaturesMerge"class="FeaturesMerge"message="查找出面积小于给定值的地块,并合并到相邻的地块中最大的地块。"caption="FeaturesMerge"tip="查找出面积小于给定值的地块,并合并到相邻的地块中最大的地块。"category="Add-In Controls"image="Images\FeaturesMerge.png" />

      </Commands>

    </ArcMap>

  </AddIn>

</ESRI.Configuration>

FeaturesMerge.cs文件是类文件,初始内容如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

namespace FeaturesMerge

{

    public class FeaturesMerge: ESRI.ArcGIS.Desktop.AddIns.Button

    {

        publicFeaturesMerge()

        {

        }

        protectedoverride voidOnClick()

        {

            ArcMap.Application.CurrentTool= null;

        }

        protectedoverride voidOnUpdate()

        {

            Enabled = ArcMap.Application!= null;

        }

    }

}

类文件中包含两个方法:

1OnClick()方法

OnClick()方法是按钮点击方法。

2OnUpdate()方法

OnUpdate()方法是更新的方法。

  1. e)        添加引用

需要调用的类库包括:

  1. f)        代码编写

1) 添加一个窗体

该功能需要用户点击按钮后,弹出一个窗体。因此,需要添加一个Form窗体。

2) 设计窗体界面

设计窗体界面如下:

导入要素:用于选择处理的要素图层。

最小面积:用于设置合并要素的面积。

3) 编写窗体代码

//获取处理的图层

string strLayerName =thisNaNb_InputFeature.Text;

IFeatureLayerpFeatureLayer = GetFeatureLayer(strLayerName);

IFeatureClasspFeatureClass = pFeatureLayer.FeatureClass;

IQueryFilterpQueryFilter = new QueryFilter();

pQueryFilter.WhereClause= "area<=" + this.txt_MinArea.Text;

IFeatureCursorpFeatureCursor = pFeatureClass.Search(pQueryFilter, false);

IFeature pFeature = pFeatureCursor.NextFeature();

while (pFeature !=null)

{

//面积小于等于设定值的要素

IGeometry pGeometry =pFeature.Shape;

IRelationalOperatorpRelationalOperator = pGeometry as IRelationalOperator;

IQueryFilter pQueryFilter2 = newQueryFilter();

pQueryFilter2.WhereClause ="area>" + this.txt_MinArea.Text;

FeatureCursor pFeatureCursor2 =pFeatureClass.Search(pQueryFilter2, false);

IFeature pFeature2 =pFeatureCursor2.NextFeature();

//是第一个要素

bool IsFirst = true;

//基本要素

IFeature pBaseFeature = null;

while (pFeature2 != null)

{

    //面积大于设定值的要素

    IGeometry pGeometry2 = pFeature2.Shape;

    //判断面积大于设定值的要素是否与面积小于设定值的要素相临

     if(pRelationalOperator.Touches(pGeometry2))

     {

       if (IsFirst)

         {

          pBaseFeature = pFeature2;

          }

        else

       {

           IGeometry pBaseGeometry =pBaseFeature.Shape;

           IGeometry pMaxGeometry = pGeometry2;

           IArea pBaseArea = pBaseGeometry asIArea;

           IArea pMaxArea = pMaxGeometry asIArea;

           if (pBaseArea.Area < pMaxArea.Area)

           {

             pBaseFeature = pFeature2;

            }

          }

        }

          pFeature2 =pFeatureCursor2.NextFeature();

       }

      int index =pBaseFeature.Fields.FindField("area");

       object value = pBaseFeature.get_Value(index);

      MessageBox.Show(value.ToString());

        object missing = Type.Missing;

        IGeometryCollection pGeometryCollection= new GeometryBagClass();

       pGeometryCollection.AddGeometry(pGeometry,ref missing, ref missing);

       pGeometryCollection.AddGeometry(pBaseFeature.Shape, ref missing, refmissing);

        ITopologicalOperator pTopologicalOperatory =new PolygonClass();

pTopologicalOperatory.ConstructUnion(pGeometryCollectionas IEnumGeometry);

IDataset dataset = pFeatureClassas IDataset;

IWorkspaceEdit workspaceEdit =dataset.Workspace as IWorkspaceEdit;

workspaceEdit.EnableUndoRedo();

workspaceEdit.StartEditOperation();

pBaseFeature.Shape =pTopologicalOperatory as IGeometry;

pBaseFeature.Store();

//删除

//DeleteOtherSelectedFeatures(selectedFeatures);

workspaceEdit.StopEditOperation();

 pFeature = pFeatureCursor.NextFeature();

}

  m_MxDocument.ActiveView.Refresh();          

       this.Close();

4) 调试

  1. g)       编译目录

编译完成后,文件如下:

  1. h)       添加到ArcMap

打开ArcMap,打开扩展管理,选择Commands选项卡,找到Add-in Controls,这时候会发现编写的工具会出现在这一组中。

  1. i)         测试

点击按钮后即可使用该工具。

作者:张鑫 邮箱:zhangxin@lreis.ac.cn

HiGIS技术交流QQ群:336076300

关键词:arcgis,engine,add-in,教程

中科地理信息系统培训中心-原创文章
转载请注明出处:www.higis.cn/Tech/tech/tId/79

创新地理知识,共享地理价值

http://www.higis.cn

中科地理信息系统培训中心

关于我们

gis培训

苏州高新区中科地理信息系统培训中心是“国家专业技术人员继续教育基地”指定培训点,是3S方向唯一指定的培训点。同时也是国内唯一获得Esri授权的ArcGIS专业培训与认证机构,为广大用户提供ArcGIS培训、开发和咨询服务,中心已经为中国用户服务20年...详细情况...

联系方式

Email:actc@lreis.ac.cn
苏州总部电话: 0512-68076858
        0512-68075672
北京分部电话: 010-64855687
苏州总部地址:苏州市高新区科灵路78号苏高新软件园5号楼3层
北京分部地址:北京市朝阳区大屯路甲11号中科院地理所2406

顶部 返回
地理信息系统国际培训中心