2.ArcEngine二次开发基础
2.1 ESRI公司GIS产品介绍
ESRI公司是一家跨国的GIS软件公司,是目前世界上最主要的GIS软件开发商,其开发的产品家族比较庞杂,为了便于以后对AE的学习,对其主要产品及相互关系介绍如下:
早期产品(Arc/Info)
Arc/Info主要包括两大部分:
- ESRI开发的ARC:空间数据处理;
- Heco SoftWare开发的INFO:存储和管理空间实体关联的属性数据
中期轻量级产品(ArcView 3.X+MapObjects)
-
ArcView GIS 3.X
是一个跨平台的工具型GIS 平台,具有强大的地理数据显示、查询、统计、分析和制图设计的能力,用户界面友好,与ESRI其他产品有着良好的相互支持,是世界上最流行的桌面GIS软件之一。
2.MapObjects 2.X
轻量级的GIS二次开发平台,具有低成本、易开发(VB.vc、VS.NET等可视化开发平台)、不依赖其他GIS平台、使用环境广、通用性好、易推广等优点,同时该软件功能相对较弱,不便于网上发布。
目前ArcGIS产品
Desktop的组成
ArcMap、ArcGlobe、ArcSence、ArcCatalog、Geoprocessing
2.2 开发平台
- ArcEngine
- ArcGIS API for JavaScript
- ArcGIS Runtime SDK for Android/IOS
ArcEngine
ArcGIS Engine是用于构建定制应用的一个完整的嵌入式GIS组件库
开发者能将ArcGIS功能集成到一些应用软件,还可以为用户提供针对GIS解决方案的定制应用
ArcGIS Engine里面包含着两个部分∶
- 开发ArcGlS Engine Developer kit :
是创建自定义的GIS和制图应用的工具包.
- 部署ArcGIS Engine Runtime :
是为了运行自定义的Engine应用的可分发的ArcObejcts.
ArcGIS Runtime SDKs
ArcGIS Runtime SDKs 用于在多种平台和设备上构建和部署原生应用程序。即使在离线环境下,也能在原生应用中体验强大的空间分析能力。
2.3 ArcGIS Engine中的对象模型图
对象模型图(object Model Diagram, OMD):是基于UML基础之上,通过直观的图表和文字表示方式反映对象模型的信息和彼此间的关系的图视。
在进行GIS工程开发时帮助我们获取以下一些信息:
- 类支持哪些接口?
- 需要哪个对象完成工作?
- 怎样声明类的对象?
- 是否能用new实例化类?
AE中类与类的关系
在ArcEngine中存在三种类型的类:抽象类(AbstractClass)、组件类(CoClass)、普通类(Class)。
Abstract Class:抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。
CoClass:组件类是一个可以直接用new创建对象实例的类,它的实例对象不依赖其他对象的存在而存在,其生存周期也不用其他的对象管理。
Class:普通类不能够直接产生一个对象,但它可以用其他的普通类或组件类的方法产生,而不是使用new关键字来完成。
接口
接口成员包括属性(对象的状态)、方法(执行行为)。
属性:用类似哑铃状的东西表示。包括只读(get)、只写(put)、可读可写(get/set)。还可以是引用类型的属性(Reference)用空心表示。
理解对象模型图(Reading OMDS) - Vivu - 博客园 (cnblogs.com)
2.4 ArcGIS Engine介绍(*)
ArcGlS Engine提供了21个组件对象库,其中有基本的图形库esriGeometry、显示库esriDisplay、制图库esriCarto等,扩展的三维分析库esri3DAnalyst、网络分析库esriNetworkAnalyst等。这些组件对象库对ArcGIS底层功能进行了封装,使GIS开发人员能够集中精力按照应用需求进行开发。
ArcGIS Engine 与Arc0biects: ArcGlS Engine是对Arc0biects的提炼和简化,Arcobjects是所有产品的基础,所以结构庞大。脱离了ArcGlS桌面软件的ArcGlS Engine结构更加合理,其提供的功能完全能够满足各种层次的开发需要,而且保持了开放性和扩展性。
ArcGIs Engine是按照COM标准实现的,支持跨平台和多种编程语言的开发,在Windows下支持C、Java、VB、Delphi和 . Net等,在UNIX和LINUX下支持C和Java ,所以可以选择多种开发方式。
WINDOWS | UNIX AND LINUX |
---|---|
C++ | C++ |
Java | Java |
COM | |
.NET |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qzu4Vb6W-1687961758885)(AE二次开发.assets/image-20230626123924400.png)]
基础类库
数据访问
制图与地理分析类库
2.5 ArcGIS Engine快速入门
2.6 ArcGIS Engine的运行许可
(五)许可使用规则
许可初始化必须在所有AE代码运行以前进行在程序运行期间产品许可只能被确认一次扩展许可可以在需要时被检入检出
不能合并或混合产品许可和扩展许可
应该写代码来查询可获取许可的级别并从中检出许可
尽可能使用最低级别的许可
许可快捷使用方法
①在程序入口添加以下代码:
Using ESRI.ArcGIS; //引用命名空间
//在Sub Main入口函数添加许可绑定代码
if (!RuntimeManager.Bind(ProductCode.Engine))
{ if (!RuntimeManager.Bind(ProductCode.Desktop))
{
MessageBox.Show("Unable to bind to ArcGIS
runtime. Application will be shut down.");
return;
}
}
②在应用程序界面添加许可控件
③选中许可控件,右键弹出菜单选择属性,并设置需要的许可。
许可使用专业方法
运用许可管理类AoInitialize,实现许可的管理:
- ①用lsProductCodeAvailable方法确认是否可获得产品;
- ②用lsExtensionCodeAvailable确认可以获得什么扩展;
- ③用产品许可初始化应用程序;
- ④如需要,使用CheckOutExtension和CheckInExtensionmethods执行扩展检出和检入;
- ⑤关闭产品许可。