【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、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);
      }
}

在这里插入图片描述

GIS VBA 结合ArcMap工具创建界址线 本文介绍ArcMap VBA二次开发创建界址线的方法,宗地图层(面要素)有6426个宗地(要素),通过面转线得到权属线23006条,利用二次开发程序把权属线转为界址线,生成界址线 397722 条。 阅读详情

相关推荐

ArcGis add-in插件开发:自动匹配最近道路交叉点

运用C#编写arcgis add-in插件

nanamxw的博客 1318

ArcGIS Engine开发教程--定制开发方法

1、定制开发的概念定制开发是基于ArcGIS Desktop软件,利用ArcObject提供的类库模块运行开发的方法,定制开发具有以下特点:(1)适合于开发重复使用的工具型功能模块;(2)无需进行过多的界面设计(3)开发周期较短,比较灵活;(4)不能脱离ArcGIS Desktop软件的支持。2、定制开发的方式(1)VBA定制开发(2)Add-in开发(3)DLL开发(4)Pytjon窗口开发3、VBA语言。

weixin_41234946的博客 1217

java for arcgis 之——将shapefile导入SDE

环境:1.安装arcgis客户端(百度有)         2.在该路径下ArcGIS\Desktop10.2\java\lib 找到arcobject.jar  这是java对arcgis二次开发所需的jar包,添加到工程中(百度有)          3.SDE本人采取的直连oracle的方式,也是查询资料后推荐的方式(需要本地安装oracle客户端,具体见百度)以上环境准备好直接上代码:注意...

weixin_36193920的博客 2282

别再只盯着时序了!聊聊SDC里那些容易被忽略的‘配角’命令:工作条件、线载模型与面积约束

本文深入探讨了SDC(设计约束)中常被忽视的关键命令,包括set_operating_conditions、set_wire_load_model和set_max_area。这些‘配角’命令在芯片设计中扮演着至关重要的角色,影响时序收敛、功耗和面积优化。文章通过实际案例和最佳实践,揭示了如何正确配置工作条件、选择线载模型以及动态调整面积约束,以提升设计质量和效率。

weixin_26875109的博客 204

Fedora 41上安装钉钉7.6.25,我踩过的那些依赖坑和最终解决方案

本文详细记录了在Fedora 41上安装钉钉7.6.25版本的全过程,包括解决依赖问题、转换deb包为rpm格式、处理libm.so.6错误等关键步骤。通过分享这些实用技巧和最终解决方案,帮助Linux用户顺利在Fedora系统上运行钉钉客户端,提升工作效率。

weixin_30485379的博客 197

UE5.4像素流送实战:GPU驱动、WebRTC与系统级调优全解析

像素流送是将实时3D渲染画面通过WebRTC编码推流至浏览器的关键技术,其本质是GPU硬件编码(如NVENC)与低延迟网络传输(UDP+BBR)的深度协同。理解其原理需跨越图形API(Vulkan/DX12)、实时音视频(H.264/H.265)、WebRTC信令与NAT穿透四大技术层。技术价值在于突破终端算力限制,支撑远程工业仿真、云VR看房等高交互场景;但落地难点集中于基础设施层——如NVIDIA驱动与UE5.4.3的CUDA Toolkit 12.2兼容性、Linux内核TCP/UDP参数调优、GPU

weixin_32943857的博客 611

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片

C#通过skd控制海康威视摄像头,获取bitmap格式图片

ReflexMechanism的博客 6582

【上海大学计算机组成原理实验报告】六、内存系统实验

学习内存访问机制//理解代码和数据的分区存放原理和技术//手动方式把立即数`33H`写入内存`D1H`单元//手动方式把`D1H`单元的内容读出,再送入`ST`单元//在`CP226`汇编语言程序集成开发环境下编写程序//既然有`ORG`微指令,为什么集成开发环境下载到实验箱的目标程序的第一条执行语句最好存放在0号地址?//上海大学计算机组成原理实验//内存系统实验

HackerKevon的博客 3121

基于 ESP32 的宿舍洗浴热水余量预测与智能排队提醒系统设计与实现

本系统以 ESP32 为主控核心,通过超声波液位传感器实时监测储热水箱剩余水量,配合 DS18B20 温度传感器采集水温数据,建立热水余量预测模型估算可用洗浴时长;同时通过红外人体传感器统计浴室排队人数,结合人均洗浴时长计算预计等待时间,并通过 OLED 屏本地显示 + WiFi Web 服务器远程推送的方式实现排队提醒功能。

weixin_42300449的博客 39

跨越边界:用MessagePipe实现无缝的进程间通信

MessagePipe是一个用于.NET平台的消息传递库,它专注于简化异步消息处理和进程间通信。通过提供一系列易于使用的API,开发者可以快速搭建起稳定可靠的通信管道,支持多种传输协议(如TCP、Unix域套接字等),并内置了序列化/反序列化功能,使得跨语言和跨平台的数据交换变得轻而易举。为了方便序列化和反序列化操作,我们需要为每种消息定义对应的类或结构体,并标记属性。这样可以确保消息在发送方和接收方之间正确无误地传递。[Key0set;[Key1set;

墨夶的博客 813

实战优化!C#上位机串口通信卡顿问题:超时机制+数据缓存方案

串口名</param>/// <param name="baudRate">波特率

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1055

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建
下一篇: 工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!
智慧空间实验室
智慧空间实验室 优质创作者: 数据科学与机器学习技术领域 优质创作者: 数据科学与机器学习技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄14年 4万+粉丝 1545原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧空间实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值