ArcMap_AddIns开发标准流程介绍
ArcGIS的插件式开发,可以帮助开发人员对ArcGIS相关产品的现有作业流程进行人工干预,以达到作业效率提升的目的。
近来由于业务需要,本人自学ArcMAP的二次开发,积累浅薄的经验给大家分享,帮助大家快速入门AddIn二次开发快速入门。
注意:本文基于ArcMap10.1和Visual Studio 2010开发实践,相关操作展示。
1 新建工程项目及其注意事项
1.1 以工具集的方式创建项目
点击 [确定] 之后,进入欢迎界面,填写【工具集名称】、【所属单位】、【作者信息】和【工具集描述信息】
之后,直接点 [Fnish],这里不要点Next进行6种插件选择;这么做的优势在于以下两点:
- 插件最好是放在自己定义的工具集中会比较好找一些
- 如果你定义了单个控件,需要在手动叫将插件拖入到ArcMap的工具栏中;直接采用工具栏的开发方式,可以像正常的ArcMap工具集一样使用
1.2 项目配置文件解析
完成1.1部分的项目创建操作之后,打开 [解决方案管理器]中的Config.esriaddinx文件,内容如下所示:
<ESRI.Configuration xmlns="http://schemas.esri.com/Desktop/AddIns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>我的ArcMap拓展工具集</Name>
<AddInID>{db88469e-f3b4-457a-9523-2d439039838d}</AddInID>
<Description>这是一个面向ArcMap的AddIns开发入门流程介绍程序</Description> <Version>1.0</Version>
<Image>Images\ArcMapAddin1.png</Image>
<Author>天才</Author>
<Company>光杆司令一个</Company>
<Date>2020/2/26</Date>
<Targets> <Target name="Desktop" version="10.1" /> </Targets>
<AddIn language="CLR4.0" library="ArcMapAddin1.dll" namespace="ArcMapAddin1">
<ArcMap />
</AddIn>
</ESRI.Configuration>
这个文件中记录了开发工具集的配置信息,具体说明如下:
- 包含之前设置的Name, AddInID, Description, Image, Author, Company,Date等信息
- Targets信息记录了这个工具集是针对ArcDesktop 2010开发的
- CLR4.0表示是在.Net 4.0下开发的,这一点对调试很重要
1.2.1 The 'language' attribute in the AddIn element is invalid
如果.Net版本不是4.0报错如下:
警告 1 自定义工具警告: The 'language' attribute in the AddIn element is invalid - The value 'CLR4.0' is invalid according to the project's target framework version - The value should be 'CLR'. E:\C#\Doctor\ArcCatalogAddin1\ArcCatalogAddin1\Config.esriaddinx 13 10 ArcCatalogAddin1
此时的解决方案是,点击[项目名称] -- [右键属性] -- [应用程序] -- [目标框架] -- 选择 [.NET Framework 4.0],弹框选择 [是] 即可
1.2.2 调试是遇到【 当前不会命中断点,还没有为该文档加载任何符号】 的处理方法
详见之前的博客:
基于C#的ArcEngine二次开发教程18:ArcGIS addIns 调试【当前不会命中断点,还没有为该文档加载任何符号】问题处理办法
2 新建组件与容器
组件是单一的按钮,容器可以存放许多种组件
2.1 组件的创建
2.1.1 添加Button组件
2.1.2 配置文件解析
再次查看刚才的配置文件,你会发现多了如下内容, 你每添加一个组件,就会在这里多一行关于你添加按钮的描述信息 。
<ArcMap>
<Commands>
<Button id="光杆司令一个_ArcMapAddin1_ArcGISAddinButton1" class="ArcGISAddinButton1" message="关于按钮的描述,不要也行" caption="测试按钮1" tip="鼠标驻留到该按钮会显示的信息" category="Add-In Controls" image="Images\ArcGISAddinButton1.png" />
</Commands>
</ArcMap>
说明:
- id是按钮的ID,由公司名 + 你的项目名称 + 按钮类名构成
- classs是设置的按钮类的名字
- message是刚才填写的Descrption中的信息
- Caption, 按钮的文本名称
- tip,按钮的提示文本
- category为归属类别
- Image为按钮的显示图标,如要修改,参见博文 基于C#的ArcEngine二次开发教程19:Addin开发之修改工具栏中的按钮图标
再添加一个按钮的配置文件:
<ArcMap>
<Commands>
<Button id="光杆司令一个_ArcMapAddin1_ArcGISAddinButton1" class="ArcGISAddinButton1" message="关于按钮的描述,不要也行" caption="测试按钮1" tip="鼠标驻留到该按钮会显示的信息" category="Add-In Controls" image="Images\ArcGISAddinButton1.png" />
<Button id="光杆司令一个_ArcMapAddin1_ArcGISAddinButton2" class="ArcGISAddinButton2" message="Add-in command generated by Visual Studio project wizard." caption="测试按钮2" tip="Add-in command tooltip." category="Add-In Controls" image="Images\ArcGISAddinButton2.png" />
</Commands>
</ArcMap>
此处应注意:如果你手动删除一个组件,这里的配置文件是不会自动删除的,确需删除,需要手动操作
2.1.3 增加代码
using System;
using System.Collections.Generic;
using System.Text; using System.IO;
using System.Windows.Forms;
namespace ArcMapAddin1 {
public class ArcGISAddinButton2 : ESRI.ArcGIS.Desktop.AddIns.Button
public ArcGISAddinButton2()
//类的构造函数,填写加载按钮需要设置的信息,可是更改按钮的图标等操作
//图标最好做成资源文件,这样避免索引不到图标路径,导致ArcMap异常崩溃
protected override void OnClick()
MessageBox.Show("测试按钮2的被点击");
protected override void OnUpdate()
{ MessageBox.Show("测试按钮2被更新");
关于OnUpdate的解释:【主要功能是确定控件 属性的可用性 ;如果按钮被按下,将会被一直更新】
The OnUpdate method is called periodically by the framework once the control has been created. This provides an opportunity to run some code periodically within your customization. One typical use of OnUpdate is to determine and set the Enabled property of the control. Note that as OnUpdate is called frequently you should avoid lengthy operations in this method, as this would reduce the responsiveness of the application user interface.
2.2 添加容器
添加容器的目的是将多个组件统一到一个容器中,实现功能的集成和分组;
例如,我要通过按钮来干预编辑器拓展的情形,那就必须要按钮和编辑器两个组件协同工作,此时就要使用到容器,会很方便
选择组件
完成后,查看配置文件,会增加如下信息:
<Toolbars>