众所周知,ArcGIS的产品种类很多,光ArcGIS桌面端的二次开发产品就包括ArcGIS Engine、ArcGIS Runtime以及ArcGIS Pro SDK。初学者时常被这些产品搞乱,既不清楚这些产品的区别与联系,也不清楚做开发时应该选择哪种产品。由于这个问题被问的频率实在太高了,所以这里写个普及贴,以帮助大家更好的定位各个产品。
ArcObjects:是一整套组件式开发接口的统称,ArcGIS Desktop(不含ArcGIS Pro)、ArcGIS Engine、ArcGIS Server都是基于ArcObjects开发出来的产品,下图一看便知:
所有这些功能模块都是ArcObjects,所以说ArcObjects的功能非常强大,既可以进行Desktop的扩展开发,也可以进行Server的功能扩展,如Server Object Extension(俗称SOE),也可以进行ArcGIS Engine开发。
ArcGIS Engine:于2004年发布,是基于COM技术的可嵌入的组件库和工具包,构建在核心的ArcObjects之上,完全可扩展。它提供多种开发接口,可以适应.NET,Java和C++等开发环境,开发者可以使用这些组件来开发和GIS相关的地图应用。ArcGIS Engine既可以开发出具有地图界面的独立应用程序,也可以开发出进行后台数据处理的控制台程序,还可以进行嵌入式开发。ArcGIS Engine在10.0及之前版本又称为ArcGIS Engine Runtime,这里要和ArcGIS Runtime产品进行区分,经常有用户以为ArcGIS Runtime就是之前的Engine Runtime,这两者是不同的产品。此外,需要注意:目前ArcGIS Engine 10.7版本仅支持.Net和Java开发平台。
Tips:VC++属于.Net平台仍是支持的,但Cross Platform C++(例如Qt等)以及Engine的Linux版本从10.5版本起已经不再提供。
综上,ArcGIS Engine是ArcObjects的一部分,使用Engine可以开发出具有独立地图界面的应用程序,能够进行非常细粒度的控制,可以实现大部分ArcMap的功能(界面部分需要自定义);而ArcObjects除了可以进行Engine开发,还可以进行ArcMap以及Server的扩展开发。
ArcGIS Runtime:是伴随ArcGIS 10.1发布而诞生的一款基于服务架构的全新产品,是一款轻量级桌面移动端跨平台开发产品。目前提供了5种API:.Net、Java、Qt、Android、IOS,支持6种平台:Windows、Linux、MacOS、UWP、Android、IOS,可以轻松构建跨平台应用程序。
ArcGIS Engine和ArcGIS Runtime 都属于开发软件,可以用来开发独立的C/S程序。但是两者的底层是不同的,Engine是基于ArcObjects的,Runtime是基于Runtime API的;另一方面其开发模式也不同,Engine是单线程、同步、32位程序,而Runtime是多线程、异步、64位程序。所以如果想从Engine迁移到Runtime上来,代码是需要重写的。此外,Engine和Runtime在功能上也各有利弊:
ArcGIS Engine:
优点:功能强大,可以实现ArcMap的大部分功能,包括操作复杂对象如拓扑,几何网络等,可以进行精细化编辑,还可以进行专业级制图。
缺点:只能32位,部署繁重,不支持矢量切片、三维场景、portal等。
ArcGIS Runtime:
优点:Esri大力发展,64位,部署简单,跨平台,展示效果好,支持矢量切片、三维场景、可以操纵Portal、此外还支持VR/AR等。
缺点:对于复杂对象、精细化编辑和专业级制图的支持稍显不足。
10.2.x和100.x都是ArcGIS Runtime的产品,所以其功能是差不多的。10.2.x是早期的Runtime版本,相信进行早期Runtime开发的用户都不陌生;而100.x采用了全新的底层架构,API进行了重新设计,使得用户熟悉了一种API可以很容易的迁移到另一种,因为其API的名称、功能、参数都是一样的,比如熟悉了Runtime .Net API可以很容易迁移到移动端如Runtime Android API上。由于10.2.x版本已经不再更新,推荐直接使用100.x。10.2.x与100.x版本在结构和功能实现上都有区别,下面简单看一下:
结构上:
ArcGIS Runtime SDK for .NET包括:
Windows Presentation Framework (WPF)
Universal Windows Platform (UWP) – 替代了10.2.x Windows Store and Windows Phone APIs.
Xamarin.Android
Xamarin.iOS
Xamarin.Forms - Supports cross-platform development for Android, iOS, and UWP.
Local Server之前是必装的,现在变为可选,程序中如果用到LocalServer的功能就安装,如果没有用到就不需要安装,更加轻量化。另外,部署Runtime产品时不再需要ArcGIS Runtime .NET Deployment Manifest,详细信息。
功能实现上:
API是不同的,如果将Runtime 10.2.x版本的程序迁移到100.x上的话,代码需要改写。100.x实现了Map和View的分离,采用了Loadable模式,GraphicsOverlay代替了之前的GraphicsLayer等等。此外,100.x版本增加了对一些新的离线格式如mmpk、mspk的支持,详细信息可以参考官方帮助。
Pro SDK:利用它可以实现对ArcGIS Pro的定制与扩展。Pro SDK是基于Pro API的,目前只有.Net,同样采用的是Add-ins的开发模式。需要注意,目前有部分Pro API是没有公开的。
下面以提问题和回答的方式让大家对Pro SDK有个初步认识:
Q:ArcGIS Pro .NET SDK支持开发独立程序吗?
A:可以开发独立程序,但是没有地图界面,ArcGIS.Core.dll中的Geometry和Geodatabase 类是可以的,参考CoreHost:
Q:ArcGIS Pro SDK是ArcObjects的替代品吗?
A:不是,ArcObjects SDK用于定制和扩展ArcMap、ArcCatalog、ArcScene以及ArcGlobe。Pro SDK只用于ArcGIS Pro的定制和扩展。
Q:ArcGIS Pro SDK是ArcGIS Engine的替代品吗?
A:不是,ArcGIS Engine Developer Kit会继续提供。
Q:之前的ArcObjects代码可以用于Pro吗?
A:不行,ArcObjects代码必须使用Pro SDK进行重写。