去沙滩穿什么鞋:AO与AE的区别

来源:百度文库 编辑:中财网 时间:2024/05/03 08:42:44

一、AO和AE是什么及区别和联系

 

甲文:

AO的全称叫ArcObjects,是一组组件对象库,号称是“世界上继微软之后第二庞大的类库!”我们所熟悉的ArcGIS桌面产品,ArcGIS Desktop(ArcMap,ArcCatalog……)都是AO的产品,也就是说都是用AO开发出来的。

AE全程ArcEngine,是用于嵌入式开发的组件类库,或叫开发包,可以供使用者在现有的MS系统中嵌入地图服务等功能。AE从类库或是从体系架构上来说,是AO的子集,其功能没有AO那么强大,但凡是在ArcGIS Desktop中能实现的功能,用AE开发基本都能实现。

AO是基于COM技术的,因此,凡是支持COM技术的IDE环境或语言都可以应用AO或是AE进行开发,如用VB VC .Net。

AO和AE开发很相像,因为AE是AO的子集的缘故,但由于AE的定位是开发包,因此比AO少了很多UI的东西,就是少了许多图形界面的工具及对话框,不过功能不差,开发人员需根据自己需要利用AE进行“组装”。这是在开发方法和功能方面,在最终程序的部署过程中由于所需要的运行环境不同,因此需要在运行你程序的机器上安装ArcGIS Desktop(提供AO环境)或是ArcEngine RunTime,由于这两者的价格相差甚远,因此大家都会选用AE做开发,说白了AE开发出来的程序可以脱离ArcGIS平台环境。

乙文:

以前对AO与AE的区别一直不是很明了,总以为AO也是一个组件,今天查了一下资料,才算把这两个概念澄清了:

     所谓AO,现在一般都是指ArcGIS Desktop版本的组件开发集,即需要安装ArcGIS桌面版软件后才能安装这些组件开发集,它是所有版本中组件最全的版本,如果想对ArcGIS产品及其开发有个详尽的了解,学习AO是最恰当的。AO版本包括了所有的类库,其中包括ArcMap、ArcMapUI、ArcCatalog、ArcCatalogUI等组件库,这些组件库必须在安装了桌面版软件后才能使用。


     由于使用AO开发的程序必须安装桌面版软件,这使得它的开发成本大大增加。出于产品策略上的考虑,ESRI将AO中的某些组件集单独封装出来,起名为AE,使用AE开发的软件需要在一个RUNTIME下运行,而不需要安装ArcGIS软件。

     因此,将二者区别与联系总结如下:

     联系: 1、ArcEngine包括核心 ArcObjects的功能,其是对AO中的大部分接口、类、库进行封装所构成嵌入式组件。 2、AE中的组件接口、方法、属性与AO是相同的。

     区别:1:开发环境:①ArcObjects必须依赖与ArcGIS Desktop桌面平台,即购买安装了ArcGIS Desktop的同时,安装ArcObjects,才能利用AO进行开发。②ArcEngine是独立的嵌入式组件,不依赖ArcGIS Desktop桌面平台,直接安装ArcEngine runtime和Developer Kit后,即可利用其在不同开发语言环境下开发。2:功能: AO的功能更强大,AE的功能相对弱些,AE不具备AO的少部分功能。

二、脚本语言VBA、Python

Visual Basic For Application(VBA)是微软VB的子集,一种通用的自动化语言,逐渐成为工业标准,微软诸多系统都内嵌vba环境。

Python是阿姆斯特丹国家数学和计算机科学研究所Guido Van Rossum于1991年第一次公开发行的一门脚本语言,它集成了诸多语言的特性,如ABC,Molula等等。是一门动态脚本语言。

上面介绍的是这两门语言的定义,那么现在来说说用这两门脚本语言在做ArcGIS开发上的一些区别和联系。

VBA,ArcGIS Desktop产品内嵌了一套VBA环境,可通过Tools->Macors->Visual Basic Editor菜单进入,进入VBA环境后,会发现和VB的IDE环境基本相同。基于VBA,用户可以对ArcGIS Desktop产品进行定制,如:菜单加载些什么选项等等,最重要的是可以基于VBA运用AO开发自己关心而ArcGIS所没有提供的功能,由于此VBA属ArcGIS自身内嵌,所以开发是基于AO进行的。

Python这门语言是ArcGIS 9后被包含在桌面产品的安装包中,应该大家在用这门脚本语言的时候,多是在9.2之前,用Python语言来写批处理吧,而9.2之后为ArcToolBox中的每个工具都提供了Batch功能,不用大家在自己写脚本来做批处理工作了。
利用Python可以很好的调用GP(Geoprocesing)工具及Model builder创建的Model,关于Python开发,很好的例子是ArcToolBox中的带有文件表示的工具,可以鼠标右键打开,查看源码,因为这些工具都是用Python写的。

关于VBA开发和Python的写法,帮助中都会有,上面对应一段VBA的代码,下面对应的就是Python的。
不过对于定制开发而言,大家都会首选ArcGIS内嵌的VBA。

三、GIS之路在何方
                     ——兼论ArcGIS
(本文仅探讨GIS软件的未来发展趋势。纯属自娱自乐。观点有失偏颇,欢迎评论!)

GIS是地理信息系统的简称,作为一个行业,其更应该具有软件工程的属性,而与地理学关系不大。所以,各大学地理系(偏文)开设此专业,不太适合。GIS是个技术性很强,却没多少理论价值的学科。

搞自己的GIS软件,难度很大,但也不是不可行,如北京超图和武汉中地就做的很好。GIS软件经历了集成式、组件式、Web服务式等几个发展阶段。集成式已经被淘汰,可能为数不多的系统躺在国外大学的研究所里。组件式虽然发展多年,但仍不过时,因为应用系统的千差万别,需要灵活搭建应用平台,所以最好的办法是做成组件式。目前应用领域越来越宽广。

可以设想,组件式这种模式还会存在相当长的一段时间。需要指出的是ESRI ArcGIS的组件式GIS产品,如MapObjects(MO)和ArcObjects(AO)。我觉得AO好象是在MO基础上开发出来的,或者至少受了MO的启发。但是AO走了一个极端,就是凡物则组件。就象Java语言,万物皆是对象。这其实是个误区。任何事情到了极端都未必是好事情,就象AO,复杂庞大到让人望而生畏。我自觉也算熟练开发人员,目前还不敢用AO来做项目。给我的感觉,设计AO的人应该是学院派。

接着,ArcEngine产生了。因为没使用过,所以不好评论。如果说ArcEngine是用来弥补AO的缺陷的,那么不正说明AO设计上的失误么。

MO是一套ActiveX对象的体系结构。设计思想简单实用。但也可以看出它是用比较老的Windows 组件开发语言框架(我估计是MFC)。有些地方写的还是敷衍了事,功能较少,谈不上体系。在大项目中使用MO会给程序员带来很大的困扰。比如符号化、线型化、图层配置、地物编辑、多数据源、打印等等。而这些基本的GIS功能,是客户需要的。不能期待一个使用VB的开发人员来完善MO的这些功能,如果无法深入到MO内部,这些事情无论如何是做不好的。

这样就存在一个悖论,用AO太难了(起码对大多数程序员),用MO太简单了(简单是指MO本身的功能太简单,而无法完成业务)。这个现实的问题是回避不了的。ESRI设计AO本来的目的是替代MO的,但是MO目前的市场并不弱,说明AO本身的局限导致AO的应用出现了问题。AO的设计缺点是太过庞大、复杂、混乱。庞大是指软件的尺寸和规模;复杂指对象之间的关系错综复杂;两者结合起来就是混乱。

设计需要匠心,要精巧和细致。这样写出来的代码才精简高效。而ESRI以为搞了一套AO就万事大吉了,所有GIS开发,就是AO组件搭台唱戏的过程,这就错了——天下没有不变的道理。

自己开发组件GIS也需要吸取MO、AO的特点和教训。MO太简单、AO太复杂。所以可以折衷一下,只做必要的事情,不做所有的事情。还有就是隐藏复杂于简单的背后。当一个人习惯简单的东西,才能适应越来越复杂的东西。这是一个过程。

我的看法是:未来的GIS要发展出类似游戏一样的行业应用来。GIS地图引擎其实类似游戏引擎。这样看,无论AO还是MO最终都要淘汰。(那么象AO那样设计出复杂的接口干什么呢?)如果以为掌握了ESRI的开发工具就可以万事大吉了,那就错了。未来的2次开发只能越来越简单,没有人会花几个月甚至半年的工夫学ArcObjects,有那时间还真不如打打游戏有意义。

目前地图的显示太枯燥、刻板,当然这也是工程的需要。但是,一个大胆的设想就是未来的GIS必须给我们构筑一个虚拟现实的世界,这个世界是有生命的,不仅仅是枯燥的点、线、面,要有建筑、阳光、空气、绿色植物、水和情感——它应该是现实世界的再造。当我们漫游在GIS的世界里,就进入一个现实的世界,这里有一切我们需要的东西:你可以看到KFC店里香喷喷的鸡翅;可以看到南京路上攒动的人群;可以在西湖里看自己的影子;你还可以开着越野车撒欢地跑在乡村公路上。

Web服务式的GIS其实是一种应用模式。它与组件是不矛盾的。任何一个大型软件都要细分成单元,所以组件式的发展会与软件工程密切相关。服务式的GIS简化了对客户的要求,所以必将成为占统治地位的应用模式——WebGIS。

无论哪种GIS,都需要构筑一个丰富多彩的世界。这就是GIS未来发展的方向。我预计5年时间会出现这样的产品。如果没有,我来做一个 。

四、杂谈

上文作者的开发能力很强,但对目前市面上的GIS还了解不是很深啊!这么大的题目,真正讲的却是ArcGIS,有点名不副实了。AO可不是在MO的基础上开发的,他们是两套体系。ESRI已经不打算支持MO了,今后ESRI的产品都将围绕AO开发,如ArcGIS Server的核心还是AO。ArcEngine只是AO的一个没有UI控件的子集,根本不是什么新东西,ESRI也会搞这种挂羊头卖狗肉的事情!AO是和MO完全不同的组件系统,我认为应该没受MO的什么影响。其实做一个MO很简单,就一个控件,懂GIS并且MFC熟悉的半年时间就可以搞出来,只是ESRI推出的比较早而已(1996年下半年)。我个人认为AO或许受了Intergraph的GeoMedia的影响,前者推出于1999年,后者早在1997年上半年就诞生了,但AO做的显然要复杂庞大得多。其实,我认为AO是个做很失败的产品,组件的粒度太细,一个组件类实现多个接口的方式也让人学习的难度加大了许多,这显然已经违背了通过组件式GIS节省二次开发人员的工作量的初衷。没错,AO粒度太细,MO粒度太粗,如果有一个介于其中的最好,其实GeoMedia和SuperMap就是如何这个要求的。而且,我个人认为, SuperMap很明显地在很多地方学习了GeoMedia的设计,所以GeoMedia和SuperMap的易用性很好,大大高于AO,这也是SuperMap聪明的地方。