作为一个本科侧重于应用,工作之后却做了开发的程序员来说,做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开发入门实例的更多相关文章

  1. IOS开发入门实例

    关于如何创建第一个 iOS 应用 本篇“第一个 iOS 应用”教程将向你介绍 iOS 应用开发中的“三个T”: Tools(工具)如何利用 Xcode 创建和管理工程. Technologies(技术 ...

  2. ArcGIS二次开发入门(一)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 公司培训ArcGIS二次开发(C#作为开发语言),自己回家动手实践了一下. 1. 首先是二次开发环境的安装(AE 10 ...

  3. ArcgisAdd-In开发入门实例

    1.开发环境 Vs2012+Arcgis10.2+win7 64bit 2.实现代码 首先在VS2012中新建一个解决方案,命名AddInTest. 接着,给解决方案AddInTest新建一个项目: ...

  4. 【转】Android NDK开发入门实例

    写这个,目的就是记录一下我自己的NDK是怎么入门的.便于以后查看,而不会忘了又用搜索引擎一顿乱搜.然后希望能够帮助刚学的人入门. 先转一段别人说的话:“NDK全称:Native Development ...

  5. Portlet开发入门实例

    1原生Portlet开发 这是最简单.最本质的开发方式,直接基于Portlet规范定义的接口开发Portlet.优点是贴近底层比较灵活, 缺点当然就是所有事情都要自己去做.就好比不用SpringMVC ...

  6. java web 开发入门实例

    学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多.看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了. 有的知识点要深入学习的,有的是了解下 ...

  7. Android NDK开发入门实例

    AndroidNDK是能使Android应用开发者把从c/c++编译而来的本地代码嵌入到应用包中的一系列工具的组合. 注意: AndroidNDK只能用于Android1.5及以上版本中. I. An ...

  8. Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门

    一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...

  9. destoon入门实例与常见问题

    收集了一些destoon入门实例与常见问题,大家做个参考. 链接如下: destoon忘记后台密码怎么办?destoon找回管理员密码 忘记destoon管理员后台账号密码怎么办?解决方法 desto ...

随机推荐

  1. Appium做Android功能自动化测试

    前言 做Android端功能自动化已有2年多的时间了,使用过的功能自动化框架有Robotium.Uiautomator.Appium.最近研究自动化case复用的方案,调研了Appium的自动化框架, ...

  2. python中json怎么转换成字典

    json的标准格式:要求必须 只能使用双引号作为键 或者 值的边界符号,不能使用单引号,而且“键”必须使用边界符(双引号)

  3. java要注意的问题3

    十七.使用正则 正则表达式的结构摘录如下(来源: Oracle官网) 字符 x 字符x / 反斜杠 /0n 8进制值为0n的字符(0<=n<=7) /0nn   /0mnn 8进制值为0m ...

  4. arcgis中给属性文件加x y坐标

    两种方式: 一, 1在ArcGIS 9.2桌面软件arcview级别以上软件中,加载要添加x,y坐标的数据,打开属性表,添加X.Y字段 2 右键X字段,选择calculate geometry,如果颜 ...

  5. JavaScript:判断当前浏览器是否为微信浏览器

    <script type="text/javascript"> function CheckWeChatBrowser() { var ua = navigator.u ...

  6. 从零到一创建ionic移动app:基础开发环境搭建

    myAPP项目是在Ubuntu14.04下创建   本项目开发node 4.5/cordova 6/ionic 2   第一步 安装nodejs npm install -g n n v4.5.0 使 ...

  7. Java项目结构总结

    一.Struts2+Spring+Hibernate 项目的文档结构 二.Spring MVC+MyBatis项目的文档结构 三.Tomcat文档目录结构 转载至:https://www.cnblog ...

  8. HDU - 6311 Cover (欧拉路径)

    题意:有最少用多少条边不重复的路径可以覆盖一个张无向图. 分析:对于一个连通块(单个点除外),如果奇度数点个数为 k,那么至少需要max{k/2,1}  条路径.将奇度数的点两两相连边(虚边),然后先 ...

  9. java byte为何范围是-128~127

    从我们接触Java的时候,就被告知基础类型byte是一个字节,占8位,表示的范围是-128~127.那么为什么会这个范围呢?   咱们先回顾一下计算机基础: 1. 在计算机内部数据的存储和运算都采用二 ...

  10. 【JavaScript】用JS绘制一个球

    参考: 1.http://www.w3school.com.cn/html5/html_5_canvas.asp 2.http://blog.csdn.net/qq_27626333/article/ ...