ArcGIS桌面开发之Add-in模式
ArcGIS 10 为桌面的定制开发提供了一种全新的选择方式-Add-In
什么是Add-InAdd-In是一种能够快速扩展桌面应用程序功能的全新扩展方式
作为ArcGIS 10中全新定制方法,它有以下特点:
l容易创建:ArcGIS提供了很多创建Add-In模板,并提供了详细的接口以实现各种功能。
l更易共享:Add-In本质上是一个Zip压缩文件这个压缩文件里面包含了,易于网络、邮件传输、易于局域网内共享
l更加安全:可以对Add-In文件进行数字签名,使用的安全性得到保障
l更易安装管理:只要安装有桌面软件,系统就能自动识别Add-In文件,双击即可安装部署,同时desktop也有用于管理Add-In的管理工具.
ArcGIS Add-In支持的类型按钮菜单按钮和工具
组合框
菜单和右键菜单
Multi-items
工具条
Tool palettes
可停靠窗体
Application extensions
Editor extensions
下面两个类型是ArcGIS 10.1 支持的
Editor Construction Tools
Server Object Extensions
Add-In文件结构从文件结构来看,每个Add-In文件都包括了xml文件,程序集(对于java来说就是jar)及资源包,如下图
前面介绍了Add-In的特点、类型及其文件结构,下面我们来看看如何共享,当我们将Add-In制作好了之后,只需要双击就可以安装,这里的安装安装就是将Add-In文件部署到Well-Known文件目录里,当打开desktop时会自动将Add-In解压到desktop能自动识别的临时目录,执行时便是从该目录下读取资源。这两个目录是默认的,Well-Known目录里的文件可以移植到其它目录,或者网络共享目录,以实现共享。ArcGIS 10 在Windows 7上的Well-Known目录的位置(目录跟操作系统有关XP的默认Well-Know目录位置就不是下面这个)
C:\Users\esri\Documents\ArcGIS\AddIns\Desktop10.0
解压目录:
C:\Users\<username>\AppData\Local\ESRI\Desktop10.1\AssemblyCache
Add-In与本地化
Add-In支持多语言显示,这里的多语言显示是指同一个的Add-In文件安装到不同的语言环境的桌面应用程序里,能够自动检测其语言环境,来选择最佳匹配的语言来显示。我们可以来看下这个Add-In文件,一般的Add-In文件里只有一个config.xml,这里有多个的xml文件,分别对应多个语言版本,那么桌面程序在使用这个Add-In时能选择最佳的config.xml进行显示 。这个功能在一个语言跨度比较大,需要不同语言版本的组织中比较有意义
自动检测您的桌面应用程序运行的语言环境,并选择最佳匹配的配置文件来显示语言
Config.<language>.xml ,Config.<language>-<CountryCode>.xml 如下图:
管理Add-In
ArcMap的菜单中有一个Add-In Manager 通过这个我们可以查看本机可以访问的Add-In,可以查看类型,以及是自己的Add-In还是共享的Add-in
开发并部署一个Add-In(VS2008+ArcGIS 10)
l
启动VS-新建项目-ArcGIS-Desktop
Add-Ins(我们用ArcMap Add-In)
l
填写相关说明,这些信息都会出现在XML文件中
l
选择相关的Add-In类型,填写类名,类别等信息,这些信息都会出现在XML文件中
l
点击完成后生成的xml文件如下,里面包含我们上面的描述信息,如下图:
这是给我们生成的模板,我们需要再Onclick函数和OnUpdate函数或者构造函数填写相关信息,其中OnUpdate函数是系统自动调用如果我没记错的话应该是500毫秒调用一次用来检查这个Add-In是否可用,而Onclick函数是当我们点击的时候调用的,模板如下:
我们添加如下代码,其中ArcMap是自动生成一个静态类,代表了ArcMap,为什么是ArcMap?因为我们选择的是ArcMap的Add-In,这个对象就可以帮助我们获取ArcMap里的其他对象,可以说这个对象是我们进入ArcMap的入口,代码如下:
我们说了Add-In很容易使用,不用安装(实际是Copy),我们编译后可以看到一个esriAddin结尾的文件,我们双击就行了,这个时候这个Add-In就被放到Well-Known目录中,当ArcMap启动的时候从这个Well-Known中发现并解压到一个临时目录下,就可以使用了,如下双击安装:
打开ArcMap通过Customize界面找到这个Add-In,然后拖放到菜单上,如下图:
双击这个按钮出现如下效果:
当我们将图层全部移除后,发现这个按钮成为灰色的了?为什么?这是因为ArcMap自动的调用OnUpdate函数,发现图层的个数小于1,就变成不可用,如下图: