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],点点试试……
Arcgis Add-In开发入门实例的更多相关文章
- IOS开发入门实例
关于如何创建第一个 iOS 应用 本篇“第一个 iOS 应用”教程将向你介绍 iOS 应用开发中的“三个T”: Tools(工具)如何利用 Xcode 创建和管理工程. Technologies(技术 ...
- ArcGIS二次开发入门(一)
作者:朱金灿 来源:http://blog.csdn.net/clever101 公司培训ArcGIS二次开发(C#作为开发语言),自己回家动手实践了一下. 1. 首先是二次开发环境的安装(AE 10 ...
- ArcgisAdd-In开发入门实例
1.开发环境 Vs2012+Arcgis10.2+win7 64bit 2.实现代码 首先在VS2012中新建一个解决方案,命名AddInTest. 接着,给解决方案AddInTest新建一个项目: ...
- 【转】Android NDK开发入门实例
写这个,目的就是记录一下我自己的NDK是怎么入门的.便于以后查看,而不会忘了又用搜索引擎一顿乱搜.然后希望能够帮助刚学的人入门. 先转一段别人说的话:“NDK全称:Native Development ...
- Portlet开发入门实例
1原生Portlet开发 这是最简单.最本质的开发方式,直接基于Portlet规范定义的接口开发Portlet.优点是贴近底层比较灵活, 缺点当然就是所有事情都要自己去做.就好比不用SpringMVC ...
- java web 开发入门实例
学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多.看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了. 有的知识点要深入学习的,有的是了解下 ...
- Android NDK开发入门实例
AndroidNDK是能使Android应用开发者把从c/c++编译而来的本地代码嵌入到应用包中的一系列工具的组合. 注意: AndroidNDK只能用于Android1.5及以上版本中. I. An ...
- Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门
一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...
- destoon入门实例与常见问题
收集了一些destoon入门实例与常见问题,大家做个参考. 链接如下: destoon忘记后台密码怎么办?destoon找回管理员密码 忘记destoon管理员后台账号密码怎么办?解决方法 desto ...
随机推荐
- Extracts
@1:四层和七层负载均衡的区别:所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器.以常见的TCP为例,负载均衡设备在接收到第一个 ...
- 微信小程序将带来web程序员的春天!
微信之父张小龙在年初那次演讲中曾表示:“我自己是很多年的程序员,我觉得我们应该为开发的团体做一些事情.”几个月后,微信正式推出微信应用号(即微信小程序)在互联网中掀起又一波热潮. 过去,对于很多开发者 ...
- 特别好用的swagger ui 封装
Swagger简单介绍 Swagger是一个Restful风格接口的文档在线自动生成和测试的框架 官网:http://swagger.io 官方描述:The World’s Most Popular ...
- ie9下面的console的bug
摘自:http://blog.csdn.net/cdnight/article/details/51094464 ie9下面,很奇怪的是有console的代码有时候执行不下去,不过当f12打开控制台的 ...
- mount、umount、fuser命令使用小结
mount -t cifs -o username=administrator,password=xxxxx //192.168.11.17/Data/ /mnt/databak/之后想卸载挂载目录, ...
- 解决Webpack 安装sass时出现的错误
webpack环境下,加载css需要 css-loader 和 style-loader. css-loader:使用类似@import和url(...)的方法实现 require的功能: style ...
- jQuery多功能日历插件 带事件记录功能
在线演示 本地下载
- react-native run-android Starting: Intent Error type 3 Error: Activity class does not exist
使用”react-native run-android”命令运行android应用时,如果常常出现如下错误: Starting the app (/home/xxx/soft/sdk//platfor ...
- Mysql导出数据结构 or 数据
如果我们单单只想导出mysql数据表结构,通过navcat工具还不行,这时我们可以用mysqldump工具 在mysql server的安装目录:C:\Program Files\MySQL\MySQ ...
- 深入理解MR1与MR2的执行流程
摘自:Tom White ,<Hadoop.The.Definitive.Guide.3rd.Edition> MR1 MR2