ArcGIS教程:第2章 桌面GIS应用软件的开发方式
1.使用VBA进行桌面软件开发
10
VBA开发方式
UIControl方式--创建UIControl
【New UIControl】对话框下的四个控件均可以进行创建。
UIControl类型 UIControl UIControl UIControl UIControl
用途 创建按钮 创建与Map交互的工具 创建编辑框 创建组合框
1.使用VBA进行桌面软件开发
4
VBA开发方式
宏命令方式--创建宏
(1)调出宏命令对话框的方式有两种:
一是在ArcMap中,点击主菜单中的【Customize】 菜单,选择【VBA Macros】然后选择【Macros…】
二是直接按【Alt+F8】键
(2)代码编写
在VBA程序界面中,完成 CreateLayerBySelection()过程(Sub),实现根据选择 集创建临时图层的操作
2.使用DLL进行桌面软件开发
17
DLL开发方式
添加ArcGIS引用项
添加新建项
2.使用DLL进行桌面软件开发
18
DLL开发方式
添加工具
在弹出的【添加新项】对话框中, 选择“Extending ArcObjects”→“Base Tool”, 并输入工具名称“ZoomIn”,点 击【添加】按钮。
最高级别的安全性将只能运行有签名的宏,而潜在 的不安全命令将会被删除。
1.使用VBA进行桌面软件开发
14
DLL开发方式
(1)DLL(Dynamic Link Library),动态链接库 (2)DLL是Windows平台下的一种类文件编译格式
这种格式的文件可以被任何支持COM规则的语言所支持和引用
注:基本的界面要包括LicenseControl控 件、MapControl控件、TOCControl控件、 ToolbarControl等
4.使用ArcGIS Engine构建独立应用程序
37
构建流程
对ToolbarControl控件进行属性设置
1.使用VBA进行桌面软件开发
6
VBA开发方式
宏命令方式--宏属性设置
在该宏命令按钮上单击鼠标右键,在弹 出的下拉框中可以改变它的属性信息。
可以对这些按钮进行图像、样式等的更改(设置成 是只显示文字还是同时显示文字和图片等)也可以对按 钮进行编组、删除等操作。
1.使用VBA进行桌面软件开发
7
VBA开发方式
编写代码
实现将当前视图窗口定 位到鼠标所绘范围的功能。
2.使用DLL进行桌面软件开发Βιβλιοθήκη 21DLL开发方式
程序调试
按【F5】键启动程序调试,将自动启动 ArcMap程序,在ArcMap界面中,点击主菜 单中的【Customize】菜单,然后选择 【Customize Mode…】,找到“ZoomIn”命 令,将其拖动到ArcMap工具栏中。
安装ArcGIS Desktop时不再附带VBA安装选项。
(4)根据操作方式的不同,在ArcGIS Desktop中进行VBA编程的方法有两种
一是编写VBA宏命令 二是创建UIControl工具并在其事件中写入实现代码
1.使用VBA进行桌面软件开发
3
VBA开发方式
宏命令方式
(1)开发人员将那些能够自动执行某种操作的命令统称为宏 (2)宏是一种操作命令,它和菜单操作命令的使用方式一致 (3)使用宏的目的是完成某些重复的操作,借以提高工作效率
目录
1 使用VBA进行桌面软件开发 2 使用DLL进行桌面软件开发
3 使用Add-in进行桌面软件开发
4 使用ArcGIS Engine构建独立应用程序
5 不同开发方式的比较
目录
1
VBA开发方式
(1)通过VBA开发环境进行ArcGIS桌面软件的扩展和定制是最简单的GIS软 件开发方式
只需专注于ArcGIS软件不能提供的功能,对于ArcGIS软件已经提供的工具,直接“拿过 来”使用即可
(1)容易创建 (2)更易共享 (3)更加安全 (4)更易安装和管理
3.使用Add-in进行桌面软件开发
25
Add-in开发方式
以“获取多边形选择集”为例,介绍如何采用Add-In开发方式进行桌 面程序的扩展
新建项目
启动Visual Studio 2010,选择【文件】 →【新建项目】,在 “Visual C#”选择 项下选择“ArcGIS”→“Desktop AddIns”,在右侧窗口中,选择“ArcMap Add-in”方式,并完成新建项目的设置。
1.使用VBA进行桌面软件开发
5
VBA开发方式
宏命令方式--添加宏命令
关闭VBA环境回到ArcMap环境中,点 击主菜单中的【Customize】菜单,然后选 择【Customize Mode…】,在Commands选 项卡中单击“[Macros]”,在右侧选中该宏 命令拖动至ArcMap工具条中,完成宏命令 的添加。
(2)VBA环境本身已经提供了对整个应用程序和文档进行控制的变量
如在ArcMap中开发人员可以直接通过Application、ThisDocument两个全局变量获取程序 本身和程序所使用的文档对象,使开发更为快捷和简单
1.使用VBA进行桌面软件开发
2
VBA开发方式
(3)ArcGIS 10.0版本中要进行VBA的开发时,需要单独安装VBA开发程序 模块
2.使用DLL进行桌面软件开发
22
DLL功能的应用部署
注册
(1)在ArcGIS 10.0版本中,提供了用于注册 DLL的注册程序,即ESRIRegAsm.exe
该注册工具随ArcGIS Desktop一同安装,一般位 于...\Program Files\Common Files\ArcGIS\bin目录下,当 然不同安装环境该目录不同,读者可自行查找
(2)使用UIControl可以进行交互式开发。
1.使用VBA进行桌面软件开发
9
VBA开发方式
UIControl方式--创建UIControl
在ArcMap界面中,点击主菜单中的 【Customize】,然后选择【Customize Mode…】,弹出【Customize】对话框, 在Commands选项卡中找到“[ UI Control ]”,然后点击【New UIControl】, 弹出【New UIControl】对话框
1.使用VBA进行桌面软件开发
13
VBA代码的安全性
在【Customize】对话框中选择【Options】 选项卡,进行以下安全设置: (1)点击Lock Customization…】按钮,输 入文档保护密码 (2)点击【Change VBA Security…】按钮, 设置VBA代码的安全级别
3.使用Add-in进行桌面软件开发
26
Add-in开发方式
设置Add-in描述信息
Add-in类型选择
3.使用Add-in进行桌面软件开发
27
Add-in开发方式
Add-in工程组成
主要包含以下两部分内容: (1)Config.esriaddinx文件包含Add-in的配 置信息 (2)SelectTool.cs文件是实现获取选择集 功能的类文件
构建流程
引用项和授权设置
(2)选择需要添加的ArcGIS引用项,并在【License Checking】选项页中选 择需要的软件许可授权和扩展模块许可授权
4.使用ArcGIS Engine构建独立应用程序
36
构建流程
添加控件
(3)在【工具箱】面板中找到【ArcGIS Windows Forms】选项卡,此选项卡 中包含有ArcGIS Engine中所有的可视 化控件,选择需要的控件添加到 【Sample】窗体中
(2)输入反注册命令
“ESRIRegAsm.exe /p:desktop /u "C:\SampleDll\SampleDll\bin\Debug\SampleDll.dll"(DLL文件 所在的绝对路径信息),回车完成DLL文件的反注册
2.使用DLL进行桌面软件开发
24
Add-in开发方式
Add-In是ArcGIS 10.0提供的一种能够快速扩展桌面应用程序的全新 的扩展方式,其特点如下:
3.使用Add-in进行桌面软件开发
31
Add-in的安装部署
有以下两种部署方式: (1)直接部署 (2)在ArcMap界面的主菜单中部署
3.使用Add-in进行桌面软件开发
32
Add-in的安装部署
直接部署
双击要部署的 SampleArcMapAddin.esriAddIn文件,在弹 出的对话框中,单击【Install Add-In】按 钮进行部署。
(3)ArcObjects组件本身的物理文件就是DLL文件 (4)DLL开发方式的特点是开发环境脱离了ArcGIS Desktop软件,可以使 用如Java、C#等语言进行开发
2.使用DLL进行桌面软件开发
15
DLL开发方式
开发大型软件一般采用DLL的方式将一类相似的操作进行封装,主要 原因是: (1)提高程序的复用性,减少了代码开发的工作量 (2)方便软件的更新和分发
3.使用Add-in进行桌面软件开发
33
Add-in的安装部署
在ArcMap界面的主菜单中部署
打开ArcMap之后,在界面主菜单中选择 【Customize】→【Custominze Mode…】,在 Commands选项卡中单击【Add from file…】按钮, 在弹出的对话框中选择要添加的Add-in文件,进 行部署。
1.使用VBA进行桌面软件开发
11
VBA开发方式
UIControl方式
应用桌面GIS软件开发
GIS软件开发的历程
模块化GIS
其基本思想是把GIS按照功能划分为一系列模块,运行于 统一的基础环境之上(如MicroStation)。尽管许多集成 式GIS软件也可以划分为几个模块,但模块化GIS软件的 模块被有目的地划分得更细。模块化GIS具有较大的工 程针对性,便于开发和应用,用户可以根据需求选择所需模 块。 代表:Intergraph的MGE 但无论是集成式GIS或是模块化GIS,都很难与管理信息 系统(MIS)以及专业应用模型一起集成高效、无缝的GIS 应用软件。
应用桌面GIS开发方式
三种开发方式的比较:
独立开发:不依赖商业GIS工具软件,减少开发成本,但 是对开发人员的程序设计能力要求较高,开发时间长,过 程繁琐,效率不高 单纯二次开发:省时省心,GIS二次编程语言相对低级,开 发出的程序,在界面设计上相对单一, 功能上难以满足不同 GIS应用的需要。 集成二次开发:高效便捷, 大大提高了应用系统的开发效 率,系统界面和功能都能满足用户需求,且可靠性好、便于 维护。缺点是前期投入比较大,需要同时购买GIS工具软件 和可视化编程软件。
组件式GIS
组件式GIS产品:
ESRI(美国环境研究所)推出的MapObjects; MapInfo公司推出的MapX; Intergragh公司的GeoMedia; 加拿大阿波罗科技集团的TITAN; 中科院地理所的ActiveMap; 超图公司的SurpeMapObject等。
组件式GIS
应用桌面GIS
应用桌面GIS是指主要运行于PC平台,使用者 主要是非GIS专业人员的应用型GIS。如何针 对不同的应用目标高效地开发出既合乎需要又 具有方便友好美观的界面的应用地理信系统是 GIS开发者非常关心的问题。
ArcGIS培训教程
ArcGIS培训教程引言地理信息系统(GIS)是一种强大的工具,能够帮助用户捕捉、分析和管理地理和空间数据。
ArcGIS是由Esri公司开发的一款领先的GIS软件,广泛应用于各个领域,包括城市规划、环境管理、资源监测等。
本教程旨在为初学者提供ArcGIS的基本知识和操作技能,帮助用户快速入门并掌握ArcGIS的使用。
第一章:ArcGIS简介1.1地理信息系统(GIS)的概念1.2ArcGIS的特点和优势1.3ArcGIS的应用领域第二章:ArcGIS软件安装与配置2.1系统要求2.2安装步骤2.3许可证配置第三章:ArcGIS界面与基本操作3.1ArcGIS软件界面介绍3.2地图导航与缩放3.3图层管理与符号化3.4基本地图元素编辑与标注3.5基本空间分析工具的使用第四章:空间数据管理4.1空间数据的概念与类型4.2空间数据获取与导入4.3空间数据库管理4.4空间数据质量控制与维护第五章:空间数据分析与应用5.1空间查询与选择5.2缓冲区分析5.3地图代数与栅格分析5.4网络分析5.5三维分析第六章:地图设计与输出6.1地图设计原则与布局6.2地图元素设计与布局6.3地图标注与注记6.4地图打印与输出第七章:ArcGIS高级功能与应用7.1地理处理模型与脚本编写7.2ArcGISServer与WebGIS7.3三维GIS与虚拟现实7.4大数据与实时GIS分析结论本教程从ArcGIS的基本概念和操作入手,逐步介绍了ArcGIS 软件的安装与配置、界面与基本操作、空间数据管理、空间数据分析与应用、地图设计与输出以及高级功能与应用等方面的内容。
通过本教程的学习,用户可以掌握ArcGIS的基本使用方法,并能够进行简单的空间数据分析和地图制作。
然而,GIS是一个不断发展和创新的领域,要成为一名优秀的GIS专业人员,还需要不断学习和实践,探索更深入的空间分析技术和应用领域。
希望本教程能为您的GIS学习之旅提供有价值的帮助。
第二部分 ArcGIS开发
Company Logo
类和相应的对象
MxDocument Application
Map
*
Layer
*
FeatureLayer
Company Logo
VBA开发
Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Set pLayer = yer(0) 'Is pLayer a FeatureLayer? If TypeOf pLayer Is IFeatureLayer Then MsgBox "Yes!, it’s a feature layer" End If
Company Logo
Library list
Search string Search matches
Classes list
Properties and methods
Arguments and return values
Company Logo
Company Logo
添加栅格数据 Dim pRWS As IRasterWorkspace Dim pWSF As IWorkspaceFactory Dim pRaster As IRaster Dim pRasterlayer As IRasterLayer Set pWSF = New RasterWorkspaceFactory Set pRWS = pWSF.OpenFromFile("d:\vb", 0) Set pRaster = pRWS.OpenRasterDataset("city.tif").CreateDefaultRaster Set pRasterlayer = New RasterLayer pRasterlayer.CreateFromRaster pRaster MapControl1.AddLayer pRasterlayer
arcgis 开发教程
二 创建桌面应用程序
5.加载MXD地图文档数据-1
二 创建桌面应用程序
6.创建第一个ArcGIS Engine桌面应用程序-2
1. 动Visual Studio .NET,并从新建项目对话框中创建一个新的Visual C# “Windows应用程序”项目。 2.将项目命名为“DEMO”,并选择位置存取该项目。 3.在“工具箱”的“Windows窗体”标签栏中单击右键,然后从上下文菜 单中 选择“选择项”(VS2005)“添加/移除项(I)…”(VS2003);或者工具->选 择工具箱。 4.在“选择工具箱”中选择“.NET Framework组件”,并复选“ AxMapControl”,“AxPageLayoutControl”,“AxTOCControl”和“ AxToolbarControl”,单击确定按钮。这样所选择的控件将显示在工具箱的
一 使用ArcEngine控件开发
2. MapControl和PageLayoutControl
• MapControl和PageLayoutControl对应于ArcMap桌面应用程 序的“数据”和“布局”视图。用ArcMap创作的地图文 档可以装载到这两个控件中。 • 地图文档可在设计时通过这两个控件的属性页设置,控件 可以被设置为“链接”或“包含”地图文档;地图文档也 可以使用LoadMxFile方法通过编程装载到控件中。 • MapControl和PageLayoutControl不仅可以读取地图文档, 还可以写入地图文档(*.mxd)。
}
二 创建桌面应用程序
6.创建第一个ArcGIS Engine桌面应用程序-2
private void Form1_Load(object sender, EventArgs e) { string filename ="E:\\上课资料\\测绘08-GIS开发\\map\\SD.mxd"; if ( axMapControl1.CheckMxFile (filename) )
第2章 桌面GIS应用软件的开发方式
第2章桌面GIS应用软件的开发方式对于桌面GIS应用来说,ArcGIS平台不仅提供了用于开发独立运行的GIS应用软件的二次开发工具包ArcGIS Engine,还提供了对ArcGIS Desktop桌面软件进行扩展的开发方法。
在开发一个具体的GIS行业应用软件时,程序员应该根据系统规模、用户水平和具体应用环境等设计相应的系统架构,从而决定是采用C/S架构还是B/S架构?如果采用C/S 架构,是开发一个独立的系统还是在现有的ArcGIS桌面软件上进行扩展?因此选择合适的开发方式是进行GIS软件设计的第一步。
特别需要注意的是,并不是所有的GIS应用系统都一定要基于ArcGIS Engine开发。
因此,本章将首先介绍基于ArcGIS平台开发桌面GIS应用系统的其它几种方式,包括使用VBA的方法,使用DLL动态链接库的方法,以及使用Add-In的方法等。
最后再介绍使用ArcGIS Engine创建一个简单的能独立运行的GIS应用软件的方法。
2.1使用VBA进行桌面软件开发VBA(Visual Basic for Applications)可以理解为简化的Visual Basic语言,它是Visual Basic语言的子集,主要用于对支持VBA的Windows程序(称为“宿主程序”)进行扩展和定制。
Word、Excel等Office办公套件很早就集成了VBA语言,利用它可以进一步扩充这些宿主程序的功能,或者基于这些宿主程序开发较为复杂的应用系统。
Visual Basic开发的系统可以脱离Visual Basic而运行,但是基于VBA开发的系统不能脱离宿主软件运行,它的代码存储在宿主程序的文档中,如对Word进行VBA定制和开发的代码存储在*.doc 文件中,对ArcMap进行扩展的代码存储于*.mxd地图文档中。
使用VBA进行系统扩展是一种轻量级的软件开发模式。
Esri目前不特别推荐使用VBA 进行系统开发,而更侧重于推荐使用Python语言进行扩展。
地理信息系统基本功能开发技术介绍PPT课件讲义
▪ 在控件上绘制图形:DrawShape,DrawText
三,MapControl控件
❖IMapControl3接口 ▪ 该接口继承于IMapControl2,增加了8个 属性和1个方法
▪ CustomProperty:设置自定义控件属性 ▪ DocumentFilename:返回MapControl装
❖可以通过ArcObjects来扩展ArcGIS Desktop,定制ArcGIS Engine应用,使 用ArcGIS Server实现企业级GIS应用
❖采用ArcObjects可以在多种编程环境 中开发,包括C++、支持COM的编程语 言、.NET、Java等
3,ArcObjects组件库
❖可以应用ArcGIS Desktop SDK来扩展 ArcGIS Desktop的功能,如添加新的工 具、定制用户界面、增加新的扩展模块 等,甚至对ArcGIS Desktop应文档的文件名
▪ DocumentMap:返回MapControl最后装入 的地图名称
▪ KeyIntercept:返回或设置MapControl 截取键盘按键的信息
▪ Object:返回潜在的MapControl控件
三,MapControl控件
❖当使用IMapControl2接口时: IMapControl2 pMapControl; pMapControl = axMapControl1.Object as IMapControl2;
四,PageLayoutControl控件
❖1)Page对象
❖ ---管理PageLayout对象中页面
❖2)SnapGrid对象
ArcGIS_Engine基础开发教程(2)
ArcGIS Engine基础开发教程(0)——目录1创建第一个ArcGIS Engine桌面应用程序 (6)2几何对象与空间参考 (15)3地图和地图布局 (44)4图层符号化 (64)5地图查询 (91)6.空间分析 (110)7地图输出... 121、下周讲推出第三章和第四章内容。
我只是给大家介绍了入门的知识以及经验,最重要的还是自己敲代码感悟。
很多人是不熟悉ArcGIS Desktop就开始从网上Down代码修改代码开始了自己的开发之旅,包括我,我大学时代是MapInfo的粉丝,一直没学过ArcGIS。
这是非常不科学的,因为ArcGIS Desktop就是从AO开发起来的,你只有掌握了ArcGIS Desktop的使用,才能很容易理解AO接口提供的功能。
实际上ArcGIS Engine二次开发说白了就是在ArcGIS Desktop所提供的功能和业务相结合进行的创新性开发。
所以熟悉ArcGIS Desktop以及ArcGIS数据模型对学习ArcGIS Engine二次开发非常重要!祝大家学习愉快!ArcGIS Engine基础开发教程(1)——创建第一个ArcGIS Engine桌面应用程序ESRI BBS GIS大讲堂首发,转载请注明出处1创建第一个ArcGIS Engine桌面应用程序ArcGIS Engine9.3提供了丰富的GIS组件方便用户快速的定制开发一个GIS应用程序,无需写代码即可实现GIS数据加载,地图操作等功能甚至可以实现高级编辑以及空间分析功能。
接下来使用ArcGIS Engine9.3提供了MapControl Application模块来创建第一个ArcGIS Engine桌面应用程序,并为桌面应用应用程序提供编辑功能。
1.1目标1.创建第一个ArcGIS Engine桌面应用程序2.为应用程序添加编辑功能。
1.2准备工作1.IDE:Visual Studio 2005/20082.ArcGIS Engine Developer kit 9.33.制作ArcGIS实验数据地图文档MXD1.3设计流程图1.4制作地图文档在ArcMap中加载数据后,点击保存生成一个*.mxd地图文档,如图1所示:图11.5创建第一个ArcGIS Engine桌面应用程序在Visual Studio2008中新创建项à选择àArcGISàEngineàMapControl Application,点击确定,如图2所示:图2可以看到在Visual Studio中看到在新创建的项目中自动加载了ToolBarControl、TocControl、LicenseControl、MapControl四个ArcGIS Engine控件以及一个.NET ToolStripMenuItem菜单控件,如图3所示:图31.6加载MXD地图文档数据单击F5键运行程序,然后单击打开MXD地图文档按钮打开MXD地图文档,如图4所示:图4可以看到应用程序把MXD地图文档加载到MapControl地图上,可以使用ToolbarControl 提供的常用GIS功能如:放大,缩小,信息查询等功能。
ArcGIS开发入门
GeoDatabase的顺序号为7,它依赖于前面的6个类库,即System,
(1)System类库: System类库是AE体系结构中最低层的类库,因而也是最基本的 类库。该类库包含的组件为组成ArcGIS的所有其它类库提供服务。 System类库提供了很多开发者可以利用的接口。
AoInitializer对象就是在System类库中定义的,所有的开发者必
2、编程风格
在适当的位置应该加入必要的注解,即程序内部的文档。注解对于程序的 阅读及调试都有很大的作用。
数据说明应以方便阅读、理解、查找和维护为目的;变量名等标识符应作 到恰如其分地表达内容含义;注意声明次序的标准化;不同变量在同一语句 中声明时,应按字母先后顺序排列。
语句书写应有层次感,便于理解。例如采用缩进排列、避免使用大量的嵌 套结构、不将多个语句放在同一行中书写、避免复杂的条件测试等。
3、结构化程序设计
思想:自顶向下、逐步求精; 按功能模块组成树状结构;各 模块相对独立;模块内部有顺 序、选择和循环三种结构组成 ;模块化的实现方法是通过子 程序。 优点:复杂任务简单化;使用 方便。 缺点:数据与过程相互独立, 代码重用性差;可能导致数据 与所需处理过程不匹配现象; 封装性和隐蔽性差。
2.1国外著名GIS软件
2.2国内著名GIS软件
3、开发模式比较 1、独立开发 优点: 灵活性较强、易于扩展、有系统版权 缺点:难度大、开发连续性难以保证、对开发人员的素质要求 高 2、单纯二次开发 优点:简单易学 缺点:功能简单、缺乏独立性,软硬件要求高、没有系统版权 3、集成二次开发 优点:高起点、可靠性好 缺点:可扩展性差、较为庞大,软硬件要求高、没有系统版权
借鉴“工程项目管理”的技术方法,组织软件生产。
《ArcGIS教程》课件
图层叠加方式
包括求交、相减、合并等不同方式的 叠加分析。
叠加结果
可以得到新的地理实体或区域,以及 它们之间的空间关系。
叠加分析应用
用于土地利用规划、城市规划、资源 管理等领域的空间分析。
网络分析
网络分析
基于地理网络数据,对地理实体之间的路径、距离、方向等进行分析。
感谢观看
网络数据
包括道路、河流、铁路等地理网络数据。
网络分析方法
包括最短路径分析、最佳路径分析、路径规划等。
网络分析应用
用于交通规划、物流配送、公共设施布局等领域的空间分析。
04
ArcGIS数据管理
数据导入与导
数据导入
详细描述了如何将不同格式的数据导入到ArcGIS中,包括Shapefile、GeoJSON、 CAD文件等。
地图的缩放与漫游
总结词
学习如何使用缩放和漫游工具查看地图的不同部分。
详细描述
ArcGIS提供了多种缩放级别,您可以通过滚动鼠标滚轮或使用缩放工具条上的按 钮来改变视图。漫游工具则允许您在地图上自由移动,查看不同区域。
地图的符号化与标注
总结词
了解如何改变地图上要素的显示方式 以及添加标注。
详细描述
ArcGIS的应用领域
城市规划
环境监测
ArcGIS可以用于城市规划中的空间分析和 可视化,帮助规划师更好地理解城市空间 结构和人口分布。
ArcGIS可以用于环境监测中的数据分析和 可视化,帮助环保部门更好地了解环境状 况和变化趋势。
灾害应急
农业管理
ArcGIS可以用于灾害应急中的数据分析和 可视化,帮助救援人员更好地了解灾区情 况和救援需求。
AE开发日记 2016-01-27桌面GIS应用软件的开发方式
AE开发笔记常考By lincx2016-01-27 桌面GIS应用软件的开发方式1、VBA桌面扩展1)VBA是简化的Visual Basic语言及其子集2)用于支持VBA扩展的Windows程序,不能离开宿主程序独立运行3)VBA定制和开发的代码均存储于本身程序数据工作文件中4)VBA开发于ArcGIS 10.1转为ADD-IN方式并官方强调并建议不使用VBA进行软件开发,并推荐利用Python语言扩展5)VBA程序安装包不再包含Desktop安装内,需要独立从安装光盘里进行安装6)VBA开发分为宏(自动执行的操作命令集)和UIControl(可交互的宏)两种方式7)VBA程序是事件驱动的,常用MouseDown事件1.1、宏开发方式Sub CLyrBySel()''定义文档变量Dim pMxDoc As IMxDocument''有Dim就有SetSet pMxDoc = Application.Document''定义地图文档Dim pMap As IMapSet pMap = pMxDoc.ActiveView.FocusMap''核心代码''定义变量Dim pLayer As ILayer, pNewLayer As ILayerDim pEnumLyr As IEnumLayerDim pFeatLyr As IFeatureLayer, pNewFeatLyr As IFeatureLayer Dim pFeatSel As IFeatureSelectionDim pFeatLyrDef As IFeatureLayerDefinition''获取当前地图中的图层枚举类型Set pEnumLyr = yerspEnumLyr.Reset ''重置刷新,初始化枚举数位置于第一成员前面Set pLayer = pEnumLyr.Next ''第一图层成员(Top)''循环遍历当前地图文档中的所有图层While(Not pLayer Is Nothing)Set pFeatLyr = pLayer ''ILayer转IFeatureLayerSet pFeatSel = pFeatLyr ''IFeatureLayer转IFeatureSelection''判定当前图层是否有选中要素,有则根据选中要素生成图层,无则直接跳过If pFeatSel.SelectionSet.Count <>0Then''选择集不为零则Set pFeatLyrDef = pFeatSel ''IFeatureSelection转IFeatureLayerDefinitionSet pNewFeatLyr = pFeatLyrDef.CreateSelectionLayer("New"+ pFeatLyr.FeatureClass.AliasName,True,"","")pFeatSel.Clear ''选中图层显示消失''将根据选择集生成的图层加载到当前地图文档中If Not pNewFeatLyr Is Nothing ThenSet pNewLayer = pNewFeatLyr ''IFeatureLayer转ILayer pMap.AddLayer pNewLayer ''不用括号(pNewLayer)End IfEnd IfSet pLayer = pEnumLyr.Next ''更新下一个图层进行判断WendpMxDoc.ActiveView.Refresh ''刷新地图End Sub1.2、UIControl用户界面控制1)VBA宏的可交互替代,进行交互式开发2)UIControl类型与用途UIControl类型用途UIButtonControl 创建按钮UIToolControl 创建与Map交互的工具UIEditBoxControl 创建编辑框(编辑文本)UIComboBoxControl 创建组合框(下拉列表)Private Sub UIToolControl1_MouseDown(ByVal button As Long,ByVal shift As Long,ByVal x As Long,ByVal y As Long)''定位到所选范围''获取当前地图文档Dim pMxDoc As IMxDocumentSet pMxDoc = Application.Document''获取显示范围Dim pScreenDis As IScreenDisplaySet pScreenDis = pMxDoc.ActiveView.ScreenDisplay''获取缩放范围Dim pEnv As IEnvelopeDim pRubber As IRubberBandSet pRubber =New RubberEnvelope ''实例化并获取所框选范围Set pEnv = pRubber.TrackNew(pScreenDis,Nothing)''将新框选的显示范围赋予pEnv''缩放所选范围pMxDoc.ActiveView.Extent = pEnv ''更新当前显示的范围pMxDoc.ActiveView.Refresh ''刷新地图End Sub2、DLL动态库开发1)弥补VBA无法脱离宿主程序运行、安装部署不易、开发规模受限制2)DLL动态链接库是Windows平台下的一种类文件编译格式3)被任何支持COM规则的语言所支持和引用4)AO组件本身的物理文件是DLL文件5)开发环境脱离Desktop软件6)封装性好、功能传递(.dll文件)7)利用ESRIRegAsm.ex注册和反注册DLL文件//工具属性设置public ZoomIn(){//// TODO: Define values for the public properties//base.m_category = "BaseTools"; //localizable text 类别名称base.m_caption = "pZoomIn"; //localizable text 工具名称base.m_message = "This should work inArcMap/MapControl/PageLayoutControl"; //localizable textbase.m_toolTip = "缩放至框选范围"; //localizable textbase.m_name = "BaseTools_ZoomIn"; //unique id, non-localizable (e.g. "MyCategory_MyTool")try{//// TODO: change resource name if necessary//string bitmapResourceName = GetType().Name + ".bmp";base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);base.m_cursor = new System.Windows.Forms.Cursor(GetType(), GetType().Name + ".cur");}catch (Exception ex){System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap"); }}//事件驱动public override void OnMouseDown(int Button, int Shift, int X, int Y){// TODO: Add ZoomIn.OnMouseDown implementation//获取当前地图文档IApplication pApplication = m_hookHelper.Hook as IApplication;IMapDocument pMapDoc = pApplication.Document as IMapDocument;IScreenDisplay pScreenDis = new ScreenDisplayClass();pScreenDis = pMapDoc.ActiveView.ScreenDisplay;//获取绘制范围IEnvelope pEnv = new EnvelopeClass();IRubberBand pRubberBand = new RubberEnvelope();pEnv = pRubberBand.TrackNew(pScreenDis, null) as IEnvelope;//设置当前视图范围pMapDoc.ActiveView.Extent = pEnv;//刷新地图//pMapDoc.ActiveView.Refresh();pMapDoc.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);}注册dll文件后即可类似宏命令添加到ArcMap中使用,也可将dll文件分享3、ADD-IN插件扩展1)Add-in分为基于.NET和基于Python两种(推荐Python)2)容易创建(Add-in模版)、更易共享(Add-in是Z包括配置文件、程序、资源的ZIP 文件)、更加安全(可以对Add-in文件进行数字签名)、更易安装和管理(提供Add-in管理工具)3)Add-in工程包括两部分内容:Config.esriaddinx(配置信息)和代码文件.cs(类文件)Add-in类型用途Tool 与Map交互的工具Button 按钮Multi-Item 菜单和右键菜单Combo Box 组合框Editor Extension 编辑扩展Extension 应用程序扩展Dockable Window 可停靠窗体//Add-in配置信息<ESRI.Configuration xmlns="/Desktop/AddIns"xmlns:xsi="/2001/XMLSchema-instance"><Name>ArcMapAddin_ZoomIn</Name><AddInID>{8002f8f6-0181-43ef-bc55-f8a0a691bb26}</AddInID><Description>Type in a description for this Add-in.</Description><Version>1.0</Version><Image>Images\ArcMapAddin_ZoomIn.png</Image><Author>lincx</Author><Company>Microsoft</Company><Date>2016/1/27</Date><Targets><Target name="Desktop"version="10.2" /></Targets><AddIn language="CLR4.0"library="ArcMapAddin_ZoomIn.dll"namespace="ArcMapAddin_ZoomIn"><ArcMap><Commands><Tool id="Microsoft_ArcMapAddin_ZoomIn_SelectTool"class="SelectTool" message="Add-in command generated by Visual Studio project wizard."caption="Sel Tool"tip="Add-in command tooltip."category="Add-In Controls"image="Images\SelectTool.png" /></Commands></ArcMap></AddIn></ESRI.Configuration>//Add-in事件protected override voidOnMouseDown(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg){//获取当前地图文档 Map、ActiveViewESRI.ArcGIS.ArcMapUI.IMxDocument pMxDoc = ArcMap.Application.Document as ESRI.ArcGIS.ArcMapUI.IMxDocument;ESRI.ArcGIS.Carto.IMap pMap = pMxDoc.FocusMap;ESRI.ArcGIS.Carto.IActiveView pActiveView = pMap asESRI.ArcGIS.Carto.IActiveView;//生成矩形框//返回对象为IGeometryESRI.ArcGIS.Display.IRubberBand pRubberBand = new RubberRectangularPolygonClass();ESRI.ArcGIS.Geometry.IGeometry pQueryGeometry =pRubberBand.TrackNew(pActiveView.ScreenDisplay, null);//根据矩形框获取选择集?默认最上层要素pMap.SelectByShape(pQueryGeometry, null, false);//刷新地图pActiveView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGeography, null, null);}直接双击文件注册即可或者【自定义\命令->Add from file…】4、AE独立开发4.1、简单流程此处应有流程图1)GIS功能脱离ArcGIS平台软件独立运行2)控件基础GIS程序功能快速搭建控件编程顺序:不可视的LicenseControl控件进行许可授权->MapControl控件显示->TOCControl目录树->ToolbarControl工具条及工具按钮对添加的控件绑定MapControl控件,可【属性】绑定或代码初始化时绑定public Sample(){InitializeComponent();//对控件进行绑定axTOCControl1.SetBuddyControl(axMapControl1); //目录树绑定axToolbarControl1.SetBuddyControl(axMapControl1); //工具条绑定 }。
