【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比
文章目录
- 2.1 使用VBA进行桌面软件开发
- 2.1.1 VBA开发方式
- 2.1.1 VBA代码的安全性
- 2.2 使用DLL进行桌面软件开发
- 2.2.1 DLL开发方式
- 2.2.2 DLL功能的应用部署
- 2.3 使用Add-in进行桌面软件开发
- 2.4 使用ArcGIS Engine构建独立应用程序
对于桌面GIS应用来说,ArcGIS平台不仅提供了用于开发独立运行的GIS应用软件的二次开发工包ArcGIS Engine,还提供了对ArcGIS Deskop桌面软件进行扩展的开发的话,在开发个具体的GIS 行业应用软件时,程序员应该根据系统规权用户水平和其体应用环境等设计相应的系统架构,从而决定是采用C/S还是B/S架构。如果采用C/S架构,是开发一个独立的系统还是在现有的ArcGIS桌面软件上进行扩展。因此,选择合适的开发方式是进行GIS软件设计的第一步。特别需要注意的是,并不是所有的GIS应用系统都一定要基于ArcGIS Enine开发。
2.1 使用VBA进行桌面软件开发
VBA(Visual Basic for Applications)可理解为简化的Visual Basic语言,它是VisualBasic 语言的子集,主要用于对支持VBA的Windows程序(称为“宿主程序")进行扩展和定制。微软公司的Word、Excel等Office办公套件很早就集成了VBA语言,利用它可以进一步扩充这些宿主程序的功能,或者基于这些宿主程序开发较为复杂的应用系统。Visual Basic开发的系统可以脱离Visual Basic而运行,但是基于VBA开发的系统不能脱离宿主软件运行,它的代码存储在宿主程序的文档中,如对Word进行VBA定制和开发的代码存储在*.doc文件中,对ArcMap进行扩展的代码存储于. .mxd地图文档中。
使用VBA进行系统扩展是一种轻量级的软件开发模式。 Esri目前不特别推荐使用VBA进行系统开发,而更侧重于推荐使用Python语言进行扩展。但在很多情况下,特别是一些业务模式相对固定的生产和管理部门,并不需要复杂的GIS分析功能,而是更侧重于地理数据的管理,并且这些用户基本掌握了ArcGIS软件的使用,通过VBA开发方式将一系列业务管理流程自动化为工具按钮置于ArcGIS桌面软件中,既能满足行业管理的需求,又能充分利用ArcGIS本身强大的空间数据管理功能,这时使用VBA开发定制无疑是种较好的方式。
2.1.1 VBA开发方式
通过VBA开发环境进行ArcGIS桌面软件的扩展和定制是最简单的GIS软件开发方式,开发者只需专注于ArGIS软件不能提供的功能,对于ArcGIS软件已经提供的工具,直接拿过来可以使用。
ArcGIS Desktop默认是没有安装VBA开发环境的,需要手动安装安装包中的VBACompatibility,如下图所示,点击setup.exe,一路完成即可。安装完VBA之后,就可以在ArcMap的自定义菜单下看到macro了。
1. 宏命令方式
将那些能够自动执行某种操作的命令统称为宏(Macros),是一种操作命令。
宏命令对话框如下:
VBA程序实现界面如下:
2. UIControl方式
2.1.1 VBA代码的安全性
VBA代码保存在文档或者模板中,开发人员编写的代码很容易被别人使用。为了保护,可以设置VBA密码,增加安全性。
2.2 使用DLL进行桌面软件开发
DLL(动态链接库)是Windows 平台下的一种类文件编译格式,这种格式的文件可以被任何支持COM规则的语言所支持和引用,ArcObjects组件本身的物理文件就是DLL文件。DLL开发方式的特点是开发环境脱离了ArcGIS Desktop软件,读者可以使用自己熟悉的开发语言,如Java、C#等语言进行开发;开发的功能可以更为强大和灵活;编译的结果是DLL文件,封装性更好,功能分发只需传递DLL文件即可。后期维护也只需要更新相应的DLL文件即可,而不需要对源程序做任何修改。
2.2.1 DLL开发方式
选择命名空间引用。
以新建一个工具为例,在项目名称上右键→添加→新建项。
由于我们开发的工具实际上是对已有的工具进行调用和扩充,因此选择第二项ArcMap,MapControl,or PageLyaoutControl Tool
。
2.2.2 DLL功能的应用部署
2.3 使用Add-in进行桌面软件开发
1. addin介绍
ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作。相对于以往9.x系列,addin的无论是从使用或者编写都更加方便快捷。通过开发语言,可以制作ArcGIS Desktop各个软件模块的插件。
ArcGIS Add-In插件开发是对ArcGIS Desktop应用软件的功能扩充,ArcGIS Desktop 本身就是一个插件式框架,可以允许用户根据自己的需求定制开发扩充功能,开发的功能主要是置于工具栏上。
2. addin开发方式
ArcGIS Add-In插件开发有两大类型,如下:
一是Python Add-In开发,但是需要从ESRI官网上下载Python加载项向导才能进行。。
二是基于Arc0bject/ArcGIS Engine的Add-In开发,又分command、tool、toolbar、Dockable Window开发。
(1)Python Add-In开发
Esri提供了Python加载项向导工具来实现Addin界面的搭建,可以到Esri官网去下载该工具Python加载项向导 。从介绍来看,该设计器要求的最低ArcGIS版本为10.1 ,如下图所示:
插件下载地址:https://www.arcgis.com/home/item.html?id=5f3aefe77f6b4f61ad3e4c62f30bff3b
双击安装包中的addin_assistant.exe,即可。
(2)基于ArcObject/ArcGIS Engine的Add-In开发
2.4 使用ArcGIS Engine构建独立应用程序
对大型、专业的GIS应用系统来讲,由于功能的复杂性和软件版本保护等原因,往往需要所包含的GIS功能脱离ArcGIS平台软件独立运行,这就需要使用AE开发。
例1 :
打开VS2010,新建项目。
选择需要添加的引用项,点击Next。
勾选需要的软件许可和扩展模块,点击Finish。
从工箱中添加ToolbarControl、TOCControl和MapControl,简单的界面构造如下(如果想要更优美的界面,可以借助DevExpress插件来构造个性化的界面):
ToolbarControl属性设置如下:
TOCControl属性设置如下:
MapControl属性设置如下:
运行程序,点击Add Data按钮加载一个栅格数,如下图所示。
例2:
private void button1_Click(object sender, EventArgs e)
{string sPath = Application.StartupPath + "\\world.mxd";if (axMapControl1.CheckMxFile(sPath)){axMapControl1.LoadMxFile(sPath);}
}
【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比相关推荐
- ArcGis Engine二次开发入门(1)
对矢量图层的字段:进行增加.删除和查找及读取相应字段的属性值,鹰眼实现 // 添加字段private void button5_Click(object sender, EventArgs e){IF ...
- Revit二次开发入门捷径_升维学习、降维打击
问题 入门Revit二次开发有捷径吗? 答案 量子力学:有也没有.(皮一下:叠加态) 没有:目的地只有一个,路只有一条,学习没有捷径. 有:虽然路只有一条,但我们可以借助交通工具,缩短时间就是捷径. ...
- 【ArcGIS Pro二次开发】系列学习笔记,持续更新,记得收藏
一.前言 这个系列是本人的一个学习笔记. 作为一个ArcGIS Pro二次开发的初学者,最困扰的就是无从入手.网上关于ArcGIS Pro二次开发的中文资料极少,官方文档对于我这样的英文苦手又太不友好 ...
- arcgis api for flex 开发入门(二)map 的创建
arcgis api for flex 开发入门(二)map 的创建 在flex 中创建一个esri 的map ,你只需要使用<esri:Map>标签就可以轻松完成. 在<esri: ...
- Arcobjects for java:Arcgis二次开发入门,开发一个基本地图组件
一.目的 因学习需要,使用Java进行Arcgis二次开发.当前对arcgis进行二次开发使用的语言基本是C#,使用Java对Arcgis进行二次开发的很少.于是使用java在idea上进行Arcgi ...
- ArcGIS API for Silverlight开发入门
ArcGIS API for Silverlight开发入门 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都 ...
- JSP WEB开发入门基础到高手进阶教程002
JSP WEB开发入门基础到高手进阶教程 -------开发入门 JSP与微软的Active Server Pages 兼容,但它是使用类似HTML的卷标以及Java程序代码段而不是VBScript. ...
- arcgis api for flex 开发入门(九)webservices 的使用
arcgis api for flex 开发入门(九)webservices 的使用 flex 本身对webservices有着良好的支持,我们可以调用互联网上的各种 webservices来结合es ...
- Revit二次开发入门秘籍 01如何入门
关于入门 我想在开始学习之前大家应该更需要知道如何入门,对比一下我们在学校的学习,我们需要书.老师-书上呢,是有所有的知识点,有重要的,有不重要的,而老师呢,会知道哪些是重点,也就是我们考试要考的,教 ...
最新文章
- mysql 分库分表 ~ 方案选择浅谈
- cnn stride and padding_CNN中的stride、kernel、padding计算
- Android 网络交互之MD5为什么要加盐
- 数据结构与算法分析资源总结
- loadrunner 参数化数据更新方式
- [前端漫谈] 做一个四则计算器
- pandas 读取所有表头_像用excel一样用pandas
- cocos2dx 回调函数
- Python中将字典保存为文件并读取
- 51单片机—LED小灯的点亮及其流水灯程序
- 解决Typora和搜狗输入法快捷键冲突问题
- Element properties is not closed
- 使用Canvas制作刮刮乐,看看你能刮出什么奖品来?
- elm and halogen
- 基于FPGA的ALU计算器verilog实现
- (完结项目)fpga采集双路CCD摄像头1000帧图像上传到上位机显示
- ssi 指令 php,SSI 漏洞学习笔记
- web前端面试题(面试题大全)
- 产品经理如何破壳成长?
- Linux USB RNDIS设备在WinXP、Win7、Win10下的驱动安装
热门文章
- C# 离线人脸识别 ArcSoft
- c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法
- Typora 开始收费, 不妨试试这个开源免费的MD编辑器
- 如何让 Timer 在特定时间点触发?
- MAUI 移植 Xamarin.Forms 自定义渲染器
- 你知道哪些开源基金会?
- C# 在自定义的控制台输出重定向类中整合调用方信息
- ASP.NET Core Blazor Webassembly 之 路由
- 论ORM框架—EntityFrameworkCore
- .NET如何写正确的“抽奖”——数组乱序算法