ArcObjects SDK 001 ArcObjects SDK 简介

1、什么是ArcObjects SDK

在网上搜索什么是ArcObjects,会搜到如下的定义。

截图.png

1.png

这个定义比较准确,也比较容易理解。

2、什么是ArcEngine

在网上搜索ArcEngine,一般会搜到以下定义。

2.png

这段话讲的非常清楚明白,ArcGIS Desktop、ArcGIS Engine和ArcGIS Server都是基于核心组件库ArcObjects搭建。也就是说ArcGIS Desktop和ArcGIS Engine是同一个级别的产品。

但第四段说ArcGISEngine的出现对于需要使用ArcObjects的开发人员来说是个福音,因为ArcGISEngine发布之前,基于ArcObjects的开发只能在庞大的ArcGIS Desktop框架下进行。这个我非常不认同,无论是ArcEngine还是Desktop,都是使用同一个ArcObject SDK开发包进行开发,不存在所谓的简化开发。感觉更主要的还是商业原因。

截图.png

联系这块说ArcEngine包括核心ArcObjects的功能,是对AO中的大部分接口、类等进行封装所构成的嵌入式组件。这个说法有可能是对的,但确实难以让人理解,并且容易和开发包混淆。我认为ArcEngine环境下,只支持 ArcObjects的部分功能,而不是对其的再次封装。

3、ArcObjects和ArcEngine开发的区别

我们经常听说AO开发和AE开发,两者到底有什么区别呢?我觉得两者基本上没什么区别,用的都是Arcobjects SDK一套开发包,只是运行环境不同。我们说的AO开发可以用开发包中所有的模块、类和接口,但必须在Desktop的环境下运行。而AE开发只能使用开发包中ArcEngine Runtime支持的部分类和接口。

也就是说,同一个开发包,想使用里面的全部功能,就需要购买Desktop,开发的应用在此环境下运行,这就是AO开发,Desktop价格会贵些。如果想便宜些,那就可以购买ArcEngine Runtime,使用开发包里面ArcEngine Runtime支持的类和接口开发应用,这就是AE开发,但功能没有那么全,很多功能,特别是Toolbox里面的工具以及一些UI都需要自己开发。

如果使用了ArcEngine Runtime不支持的接口,在ArcEngine Runtime的环境下运行,系统会报错。

我们从安装包也可以看出两者的区别。

4.png

这个安装界面上包括ArcGIS Desktop安装以及for .Net和Java的安装包,这样就可以进行AO开发了。

ArcEngine开发的安装包如下图所示。

5.png

可以看出,该安装包包含了ArcEngine Runtime的安装包以及for .Net、Java和C++的开发包,如果基于这个开发,并且只使用ArcEngine Runtime支持的接口,并最终在ArcEngine Runtime环境下运行,我们就可以称为AE开发。

AE开发起始比AO开发弱很多,至少大部分Toolbox里面的工具都是不能直接用的。这和开发包没关系,和运行环境有关系,开发包中,这些接口都是有的。如何判断一个接口或类AE是否支持,我们可以在帮助中查看。

例如IFeatureLayer接口,帮助如下图所示。

6.png

在支持的环境中有ArcGIS Engine这项,那么就可以在ArcEngine Runtime的环境下运行。

颜色选择器接口,帮助如下图所示。

7.png

在支持的环境中只有ArcGIS Desktop这项,所以该接口只能在ArcGIS Desktop环境下正常被调用。

网上很多人都说ArcEngine的出现是为了降低开发难度,但我觉得是为了降低开发成本。即用户可以花比较少的钱,基于SDK中的部分常用接口开发一些应用,此时就可以购买便宜的ArcEngine Runtime,而不必购买昂贵的ArcGIS Desktop。只是现在Desktop绿色版较容易获取,大家开发的时候,都不是那么在意,开发的软件基本上都是直接在Desktop的环境下运行,反而ArcEngine Runtime的安装包在网上不易找到。

我们一直都在说我们在做AE开发,其实很多时候我们做的就是AO开发,但我们还是习惯称为基于ArcEngine的开发。所以以后我们不需要过多纠结到底是AE还是AO。

总结一下,我们使用ArcObejcts SDK开发了一个应用程序,验证许可的时候验证的是桌面许可,并在桌面环境下部署运行,我们称为AO开发。如果验证许可的时候验证的是Engine许可,并在安装ArcEngine环境下部署运行,我们称为AE开发。ArcObejcts SDK中的很多API,ArcEngine是不支持的。

4、ArcObjects SDK在ArcGIS各类API中的位置

8.png

WebAPIs主要指的是ArcGISAPIfor js。

Mobile APIs是做移动端开发的API。

Native/Desktop APIs,翻译出来是本地/桌面APIs,里面具体API名称为ArcGIS Runtime API for,这个和我们上面说的ArcEngine Runtime没什么关系,和我们使用的ArcMap桌面软件以及Arcobjects SDK也没什么关系。这是一套轻量级的GIS桌面软件开发包,和WebAPIs以及Mobile APIs是一个体系的。API提供了地图数据展示、绘制以及简单的分析等功能,但如果实现复杂的业务,就需要GIS Server的配合。如果我们要做一些行业软件,只是在底图的基础上展示一些简单矢量数据,并进行查询等,就可以使用这套API。

ArcGIS Pro SDK目前只能在ArcGISPro上进行扩展功能,还不能实现类似于Arcobjects SDK单独的应用程序开发。如果后面出现能够开发独立应用程序的ArcGIS Pro SDK,我感觉Arcobjects SDK会慢慢退出历史舞台。

最后就是Arcobject SDK,也就是功能最全的一套SDK,我们平常说的基于AO或者AE的开发就是指基于这套SDK上进行的开发。使用Arcobject SDK,可以充分调用ArcGIS提供的各种数据加载、分析和处理等功能。

Native/Desktop APIs和ArcobjectSDK都是用来做桌面软件的。我觉得Native/Desktop APIs的推出是因为Arcobject SDK太重了,例如我们要实现一个加载底图,并在上面显示一些点和路线,点击点,可以弹出信息框,这样一个轻GIS桌面软件。在没有Native/Desktop APIs之前,如果基于ArcGIS技术体系做的话,就只能使用Arcobject SDK开发,其部署的时候还需要依赖ArcGIS Desktop或者ArcEngine Runtime,部署困难,成本也很高。

推出Native/Desktop APIs后,底图可以加载瓦片。点和线数据可以存储到数据库、文本文件或者转换成Geojosn,系统启动的时候,直接绘制上去即可。这样做出的软件,可以单独打包部署,比ArcobjectSDK要轻很多。

posted @ 2022-11-24 16:15  mytudousi  阅读(552)  评论(0编辑  收藏  举报