【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);}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用.Net驱动Jetson Nano的OLED显示屏

背景最近几年,边缘计算的需求急剧爆发。人工智能、物联网和 5G 的演进给边缘计算带来了无限的可能性。因为工作原因,有幸在2019开始接触了英伟达 Jetson 家族的各种边缘计算设备:Nano,TX2,AGX,NX等&#xf…

工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!

工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!文末提供下载地址。

2016-2017-2学期《程序设计与数据结构》教学进程

2016-2017-2学期《程序设计与数据结构》教学进程 目录 考核方式课前准备教学进程 第00周学习任务和要求第01周学习任务和要求第02周学习任务和要求第03周学习任务和要求第04周学习任务和要求第05周学习任务和要求第06周学习任务和要求第07周学习任务和要求第08周学习任务和要求…

C语言试题121之输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 分析:利用 w…

5.4 Spring AOP

2019独角兽企业重金招聘Python工程师标准>>> 5.4.1 从代理机制初探AOP 来看一个简单的例子,当需要在执行某些方法时留下日志信息,可能会这样写: import java.util.logging.*; public class HelloSpeaker{ pirvate Logger loggerL…

WPF 实现心电图曲线绘制

本文经原作者授权以原创方式二次分享,欢迎转载、分享。原文作者:流浪g原文地址:https://www.cnblogs.com/cong2312/p/16411637.html一、前言项目中之前涉及到胎儿心率图曲线的绘制,最近项目中还需要添加心电曲线和血样曲线的绘制功…

C语言试题110之利用条件运算符的嵌套来完成此题:学习成绩大于等于90分的同学用 A 表示,60到89 分之间的用 B 表示, 60 分以下的用 C 表示。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:C语言试题110之利用条件运算符的嵌套来完成此题:学习成绩大于等于90分的同学用 A 表…

如何让 Dapper 支持 DateOnly 类型

前言在上次的文章中,我们让 EF Core 6 支持了 DateOnly 类型。那么,Dapper 是否支持 DateOnly 类型呢?public class User {public int Id { get; set; }public string Name { get; set; }public DateOnly Birthday { get; set; } }using (var…

VB常用内部函数大全一览表(建议收藏)

VB提供了大量的内部函数供用户在编程时调用。内部函数按其功能分为数学运算函数、字符串函数、转换函数、日期与时间函数、判断函数和格式输出函数等。 文章目录 算术函数字符串函数日期和时间函数数据类型转换函数算术函数 字符串函数 日期和时间函数

数据库分类介绍

在当今的互联网中,最常见的数据库模型主要是两种,即“关系型数据库”和“非关系型数据库”。 一、关系型数据库 1、关系型数据库的由来 虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享问题,但是在数据库独立性和抽象级别上扔有…

记一次 .NET 某物管后台服务 卡死分析

一:背景 1. 讲故事这几个月经常被朋友问,为什么不更新这个系列了,哈哈,确实停了好久,主要还是打基础去了,分析 dump 的能力不在于会灵活使用 windbg,而是对底层知识有一个深厚的理解&#xff0c…

C语言试题111之 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时 共有 5 个数相加),几个数相加有键盘控制。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目: s=a+aa+aaa+aaaa+aa…a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时 共…

MathType插入带序号公式的两种方法

方法一: 由于我之前使用表格15% 70% 15%来布局的,所以最开始相的就是如何录入公示后插入公式序号,如下图所示 先设置序号格式 录好公式后点“Insert Number”就好了,这样的话需要紧挨着公式,用空格把他空到最右侧就好了…

【系统设计】邻近服务

在本文中,我们将设计一个邻近服务,用来发现用户附近的地方,比如餐馆,酒店,商场等。设计要求 从一个小明去面试的故事开始。面试官:你好,我想考察一下你的设计能力,如果让你设计一个…

[转]Redis持久化存储(AOF与RDB两种模式)

Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;pe…

C语言试题112之一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2+3.编程 找出 1000 以内的所有完数。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2+3.编程 找出 …

关于jstl.jar引用问题及解决方法

在前文SSM说到因为从MyEclipse换成了Eclipse。有些架包自动缺失。 造成:"org.apache.jasper.JasperException: This absolute uri (http://java.sun.com/jsp/jstl/core ) cannot be resolved in either web.xml or the jar files deployed with this applicati…

网络技术基础与计算思维实验教程_2.3_单交换机VLAN配置实验

2.3.1 实验内容 2.3.2实验目的 实验的目的一是验证交换机 VLAN 配置过程; 二是验证属于同一 VLAN的终端之间的通信过程; 三是验证每一个 VLAN 为独立的广播域; 四是验证属于不同 VLAN的两个终端之间不能通信; 五是验证转发项和 VLAN的对应关系。 2.3.3实验原理 默认情况下,交换…

dotnet-exec 0.5.0 released

dotnet-exec 0.5.0 releasedIntrodotnet-exec 是一个 C# 程序的小工具,可以用来运行一些简单的 C# 程序而无需创建项目文件,而且可以自定义项目的入口方法,支持但不限于 Main 方法Install/Updatedotnet-exec 是一个 dotnet tool,可…

C语言试题113之一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时,共经过多少米?第 10 次反弹多高?

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:一球从 100 米高度自由落下,…