为什么AO平台本地文件平台入不进

橘子平台上的ao tennis2有人玩过了嘛为毛我进去就闪退根本玩不了

}

欢迎加入AO(ArcObjects的缩写)的世界! 本節将把您引进AO的天地并回答一些相关的问题,如:AO是什么为什么AO使得开发功能更加强大,如何学习和获取相关的资源 信息
Desktop的任何一個产品,不管是ArcView还是ArcInfo你都有了这套强大的AO组件集,利用AO提供的组件对 象来进行应用开发

通过AO你可完成以下甚至更多的GIS功能:
?空间数据嘚显示、查询检索、编辑和分析;
?创建各种专题图和统计报表;
?高级的制图和输出功能;
?空间数据管理和维护;
等等。其实是ArcMap、ArcCatalog和ArcScene这三个應用程序都是由AO搭建起来的因此从理论上讲这些应 用程序能完成的任务,通过AO同样可以完成(但重新搭建一个ArcMap式的应用程序先不考虑其玳价就可靠性和稳定性而言就值 得怀疑,在以后的内容里我会谈到这个问题)我们现在绝大部分时候要做的---就是要利用ESRI提供的这些AO组件来进行积木 式的组装任务。 AO已经提供了许多底层的基本功能而你的任务是按照应用需求将这些底层功能组装集合成一个更强大的COM对象。我们现在知道A O是基于微软的COM技术来构建的因此它的开放性和扩展性很强大。这儿的开放性是指在开发环境的选择上可以有VBA、VB、V C++、DEPHI等多種支持COM标准的开发工具而扩展性是指AO组件没有提供的功能,如需要定义一种新的数据格式你就可 以利用COM技术来写自己的COM组件,对AO组件庫进行扩展补充在ESRI的文挡中曾经看过类似‘用AO开发功能是没有限制 的,这取决于你的想象力’这样的话是不是觉得有些很狂妄。喔鈈要理解错啊,AO的确非常强大 看看ArcMap给我们展现出来的功能就知道了。由于采用了COM技术因此你不但可以在AO的基础上构造自己的COM组件, 而苴可以自己来完成一个COM组件来对AO进行补充至于为什么AO会基于COM技术,就我个人而言目前和以后GIS的发展会 和主流IT技术融合的越来越紧密,畢竟任何一个软件产品最终是要拿来用的所以除了提供专业的GIS功能外,从易用性和扩展性来 说也是极其重要的而COM技术提供了一个解决の道。是不是有些罗嗦强调其重要性的理由无非是在开始我们对AO的开发前先需要 您打针兴奋剂,虽然功能强大、使用方便的应用程序从來不是简单的几行代码和控件的拖来拖去就可以搞定的还需要您不断地学习和掌 握更多的新的东西,但对于一个开发人员而言这些投入昰值得的对于尝试利用AO做开发的人员也是如此。那我们还不开始吗

如何进入AO软件的领域开发?对于高级的AO程序设计人员我想必须跨越㈣大技术障碍:
1.面向对象技术思想;
3.AO各组件对象的层次组织和相互关系;
4.支持COM的各种开发工具及其环境(如VB、VC、DEPHI等)
真正属于ESRI自己嘚东西无非就是这套AO组件库对于初次进入AO开发领域的人员来说,我个人觉得(至于COM还有其它暂时 可以先放一边照猫画虎完成许多任务還是没有问题的了)可以先从ArcGIS Desktop的应用开始,对AO的层次及相关概念有一个了解(如Map、Layer、View、Label、支持的数据格式等

1.《ArcObjects Developer Help》 ----- 这是AO开发的首选资源個人觉得一定程度上甚至可以和微软的MSDN相媲美。不管是AO的基础COM、AO的对象层次图都提供 了说明此外还提供了大量的开发示例。
2.《ArcObjects Online》 ----- 提供叻最新的AO组件库文档其中有一个关于AO的技术论坛相信会让大家有很多意外的收获;
3.《Exploring ArcObjects》 -----一本很不错的AO技术文档,对AO的开发进行了很好嘚组织而且有大量的示例,可以随时复制利用;
4.《Building a Geodatabase》 -----应用都是围绕数据来展开的这本书主要是用来设计和创建Geodatabase的,但理解和掌握Geodatabas e的層次和建摸方法对AO的开发是很好的补充。
5.《Microsoft MSDN》----即使你的AO开发工具不是微软的也建议安装一套完整的MSDN,想多了解和应用COM进行设计开发MSD N是个宝藏。

组件化程序设计思想在今天应用已经非常普及那么关于COM都有哪些东西呢? 在本节中我会介绍什么是CLASSOBJECT,INTERFACE等COM等相关概念
要介绍COM,就不能不提到面向对象思想那么让我们先来看看什么是对象吧?在日常生活中你我都是一个个对象,有姓名有身高 、体重等外在的特征,也有各自所具备的工作技能也需要彼此间进行语言交流,同样在开发应用和GIS中也有对象的概念存在
你在窗体上使用了一個控件,这个控件本身有大小、位置、颜色、名称等一系列称之为属性(Properties)的外在表示而且 也会有CLICK等称之为事件(Events)的通信动作存在。茬AO的世界里每个东西都是一个对象,有象Map、Form、 Layer这些我们可以看到的对象也有在表中产生查询结果集时的游标(Cursor)-这类不可见的对象。那么对象是如何产生 的呢哦,它是由类(CLASS)实例化产生的许多AO类对我们来说很熟悉(象Point,Line,Polygon,Lay er,Table,如果你对GIS还不是很陌生的话)。不用太多的废話就先实际进入AO来展示下什么是类和对象吧。
(很遗憾在这里我不能用图形来表达上述概念突然觉得有些滑稽—在写一个GIS的话题)。
洳果你用过ArcMap应用程序并且还有印象的话你会发现这个MapScale其实就是应用程序中那个文本框的内容,而Add Layer这个方法呢好象就是那个用来增加图层嘚“+”的行为
(关于COM实在有太多的东西,以下的内容对AO的初始开发者而言权当是一个了解吧,现在大可不必去深究)
终于开始COM了,┅个很沉重也很值得玩味的东西我想许多AO的开发者对此都会有不同的感受。COM是Microsoft的C omponent Object Model缩写它不仅定义了组件程序之间进行交互的标准,而苴也提供了组件程序运行所需要的环境(COM本身要实现一个称为C OM库(COM library)的API它提供诸如客户对组件的查询,以及组件的注册/反注册等一系列服务一般来说,COM库由操作系统加 以实现我们不必关心其实现的细节,象大家经常看到的ActiveXDirectX,OLEDB都是基于COM技术的),主要 应用于Microsoft Windows操作系统平台上COM通常的发布形式是:以win32动态链接库(DLL)或可执行文件平台(EXE)的形式发布。

建立在二进制代码级上的可重用性(通过包容和聚合);
语言无關性只要其能生成符合COM规范即可;
对使用COM对象的客户程序而言的进程透明性;

对象是COM的基本要素之一,和C++中的对象不同的是其封装特性昰真正意义上的封装对于对象使用者(通常称为客户)而言是不 可见的,此外COM对象的可重用性表现在COM对象的包容和聚合,一个对象可鉯完全使用另一个对象的所有功能而C++对象的 可重用性表现在c++类的继承性。
接口是指组件对象的接口它是包含了一组函数的数据结构,通过这组数据结构客户代码可以调用组件对象的功能,组件对象间的访问 都是通过接口来进行的接口设计必须满足:
1. 必须直接或间接地从IUNKNOWN接口继承(该接口在AO中是省缺的);
2. 接口必须有唯一的标识符号;接口不变性,一旦分配和公布了IID接口定义的任何因素都不能妀变。
用COM开发意味着使用接口也可以称为基于接口的设计模型。对象间的所有通信都是通过它们的接口来进行的COM接口是抽象的 ,意味著相关的接口没有实现和接口相关的代码来自于一个类实现。如何实现接口对于不同对象是不同的因此对象只是继承接口的类 型,而鈈是它的实现这称为类型继承。功能用接口被抽象地构造并且用类去真正实现。在COM中类和接口通常被当作‘做什么’和 ‘怎么做’接口定义一个对象能做什么,类定义它怎么去做
COM类提供了一个或多个接口相关的代码,因此功能实体封装在类中几个类可以有同样的接口,但是它们的实现可能是极不相同的 通过实现这些接口,COM实现了面向对象的多态性COM不支持多重继承概念,然而这不是一个缺点洇为一个类可以实现多个接口 。

COM对象的接口可以是双接口双接口不同于普通接口(Custom Interface)之处在于双接口是从Automation基本接口Idispatch继承的,而普通接口昰从Iunknow n接口直接继承来的缺省的接口模型是双接口模型是双接口。
COM调用既可以是单向的(即客户程序创建组件对象然后客户程序调用对潒所提供的功能,在适当时候再把对象释放掉)通常称为 入接口。如果一个COM对象支持一个或多个主动与客户程序进行通信的接口则这種接口称为出接口,是因为这些接口并不由对象实现 而是由客户程序实现。类型库(Type Library)
一个类型库被作为一个接口定义语言(IDL)文件平台的②进制版本是一系列COM对象和接口的集合,并被编译进一个形如OLB、D LL或OCX这样的二进制文件平台中为了支持一个不依赖于开发语言工具的组件集,关于ArcObjects库所有相关的数据都被打 包进esricore.olb的类型库它就包括了一个所有coclasses的二进制描述,接口方法和服务器类型。
Microsoft提供了多个COM接口用于類型库这两个接口是ITypeInfo 和ItypeLib。利用标准的COM接口不同的开发工具和编译器能够获得由一个特定库支持的coclasses和接口有关信 息。
4. 双向COM支持 昰指有可能既在一种语言中使用COM对象又可使用这种语言编写COM对象;
COM是一个客户/服务器体系,服务器(或对象)提供功能并且客户程序使用这些功能。如果COM程序和客户程序在同一进程地址 空间内则称之为进程内COM,这通常是以DLL形式实现而本地COM是指同一计算机上不同进程中的EXE,远程COM则是指 不同计算机中的DLL或EXE有不耐烦或现在回过头看这章而且存有疑问的人吗?讲了那么多COM AND COM那么我在DEPHI或VB下用AO写一个DLL,这个DLL箌底算什么呢好,就让我来用C/S的概念来做一个解释如 果你是自己写的应用程序框架,那么你的应用程序就是客户端而调用的DLL其实就昰服务器了;如果你在ArcMap中,那么Ar cMap应用程序其实就充当了客户端的角色发出请求这个请求通过COM机制传递给COM服务器—那个你写的DLL来完成相应嘚 功能,而这个服务器外部和内部就是由ESRI AO的接口及类来完成的

第三章 AO对象的使用
在第二章中我们谈到了许多关于COM的概念,象类对象,接口方法等,那么一个实际的AO开发中是如何体现这些COM概念的呢 ---既然AO是基于COM的在本节中,我将使用VB代码来说明如何使用AO的对象并对如哬阅读OMD(Object Model Diagram)进行介绍。
让我们直接用AO相关的代码来开始这段旅程吧如果你觉得的是的话。:)
如何运行这段代码是下一章的内容先看看为什么代码会这么写吧,里面奥妙不少
我们知道在COM中对对象的访问是通过接口来完成,因此不能象许多可视化控件那样可以直接通過其名称来调用属性或执行其方法。 那么这句其实就是定义了一个接口变量(题外注释:其实准确地讲应该是一个指向接口的指针变量才對好在VB把这一切都给演示了) 。有了这个接口变量还不行因为接口是定义在对象上的,那么下来的步骤应该是产生一个对象而对象叒是从那里来的呢---类。
在这句中不单纯只是实例化出一个Map对象并且将上句的pMap接口变量做为了该对象的缺省接口。OK现在我们就可以通过這 个接口来对地图名进行修改,或者调用ClearLayer方法来删除掉该地图中的所有图层了再看看增加最后一句的执行情况—会 出错,至于为什么原因很简单,不同的接口中的方法或属性只能通过其接口来访问而Clear方法属于Map类的另外一个接口I

1. 该类支持哪些接口;
2. 完成任务需要哪些对象;
3. 如何使用该类的对象;
4. 是否可以直接实例化类;
5. 接口有哪些方法和属性;
6. 是否有其它类也支持该接口;

在OMD中有三类class,分别昰抽象类(AbstractClass)、组件类(CoClass)和普通类(Class)。 抽象类的主要目的是为它的子类定义公共接口一个抽象类将把它的部分或全部实现延迟到子類中,因此一个抽象类不能被实例化。一 个组件类对象可以被直接创建普通类对象虽然不能直接创建,但它可以可以作为其它类的一個属性或者从其它类的实例化来创建AO 中的Dataset或Geometry classes是抽象类的示例,一个Geometry类型对象不能被创建但是一个Polyline可以被创建。这个Polyl ine对象实际上在类的基础上实现了Geometry中定义的接口因此在基类对象中被定义的接口可以从coclass来访问。
在OMD中的关系类型主要有类型继承(Type inheritance)、创建(Instantiation)、组成(Composition)鉯及关联(Associati ons)等类型继承我们在COM一章过提到过,实际上就是继承完全继承了超类的接口这点可以利用AO对象浏览器工具清楚的看 到,而組成关系指的是对象间的主次关系也就是说主体的生命存在与否决定着次体的存在与否。

整个AO的OMD看起来密密麻麻让人有些头晕眼花的感觉。还好ESRI对整个AO进行了结构的组织分割,按照不同的应用领域 可以找到相应的PDF格式的OMD从AO开发帮助中我们可以发现划分为以下的几个孓系统:
3. ArcCatalog --- 能够让开发者扩展数据对象模型并集成定制对象和视图到ArcCatalog应用框架中;.
4. ArcMap --- 提供了ArcMap应用程序的核心功能,用于操作和显示地图文檔;
5. ArcMap Editor--- 包括了对象编辑器扩展组件对象要做编辑开发来这吧;
6. Display --- GIS的一个重要应用就是数据表现,对国内的许多最终用户更是热衷于此利用这里包含的对象可以完成诸如地图符号显示、图形编辑 反馈轨迹、坐标转换和屏幕控制等功能;
7. Geocoding --- 主要用于创建和管理地理编码服务等;
8. Geodatabase--- AO开发中一个不可或缺,毕竟GIS的应用都是围绕数据展开的所以有关的GIS数据创建、加载、管理和存储等都是通过这里的对 象进行的;
9. Geometry--- 不管是要素还是图形,涉及到空间信息的获取和应用来这儿找吧;
10. IMS ---提供了连接到ArcIMS服务器并访问ArcIMS图象和要素服务的功能;
11. NetWork--- 提供了网络創建、管理和完成分析操作等功能打算定制和开发特定网络应用可以利用NetWork对象;
12. OutPut ---有入就有出,如果想把制作好的地图输出怎么办通過这里提供的对象来完成吧;
13. Raster --- 用于访问和管理栅格数据的的AO对象;
诚然,在AO的开发中对象的层次和相互关系是极其重要的稍有撼缺的昰OMD中的对象层次组织看起来有些纷乱,个人觉得《Exp loring ArcObjects》里的对象模型图更适合入门使用-----它将一些常用和重要的对象抽取出来并以上下层次结構来表示
絮语闲聊,权当消遣- 最近抽时间整理一些以前写的程序也开始了解MO(ESRI MapObject)的应用,有些感受一起吐出在GIS应用中最大的工作就昰数据的采集整理了,虽然你可以采用MO、MAPX 等一些地图控件(我曾经还看到过一个南非人用DEPHI写的地图控件也是很有些特点的),如果你够超人甚至可以自己去做一个 地图控件,来完成一个实用性也很个性化的系统出来可是它终究只是一个应用系统而已。 ?你应该知噵我要讲什么的了吧。所有的应用都是基于一定的数据结构你可以在自己的应用开发中定义数据模型,但是数据的来源 呢不是CAD,就是COVERAGESHAPE,(标准嘛)你可以针对一两种数据格式进行转换只是现实中的数据类型是多样 的,总不能都去写吧况且你的数据格式能否得到认鈳呢。再想想看你要做多少工作---那是一个GIS平台才能完成的事情这就是 许多情形下我们为什么没法完全用底层或地图控件去写一个完整GIS系統主要的原因吧。
扯远了。在本章中,我会实现一个特定功能的DLL用来说明AO开发的几种模式,AO工具包的使用如何应用写好的组件。茬 ArcObjects Developer Help中有许多完整和详尽的示例代码这儿主要想就方法做一个简要的说明。
4.1选择一个开发模式
AO可选的的开发方式可以分为两种一种是在ArcMap應用框架基础上进行定制开发,另一种是脱离ArcMap应用框架去开发 独立的应用程序通常情况下,我们都是在ArcMap框架下进行定制开发开发环境鈳以选择ArcMap本身自带的VBA,也可 以选择VB、VC、DEPHI(AO 8.2以上的版本开始支持C#)
4.2选择一个开发工具
作为首选的是VB语言,这样不管是在VBA还是编写COM组件,伱都有最充足的资源可以使用(AO开发文档中最多的SAMPL E就是VB代码了)第二种是VC(我更愿意将VC做为一个强有力的后备工具),第三种在我看来應该是一种无奈之举了即用DE PHI(有一堆人该贬我了:)一直对DEPHI是仰慕有加心仪已久的,只是在AO中有关DEPHI的例子太少了这对快速应用开

4.4AO程序實现的一般过程
不管是用VB还是VC或是其它,要做的第一步就是在集成环境因入AO对象库(Esricore.olb)剩下的工作在接口中实 现你要做的事情。关于如哬进入VB和VC开发的完整代码及说明请参阅ArcObject Developer Help。

第五章 AO高级通用组件
可能是有感于独立AO应用程序开发群的迅速扩大ESRI在其最新的ArcGIS8.2版本中不但继續提供对MapContro l控件的开发支持,而且新增了一个PageLayoutControl控件这对于有制图应用的开发者来说无疑带来了福音。许多 时候可能会对组件和控件有些糊塗其实Active X并不能代表整个COM,它只是COM对象的封装技术由于COM对象使用的复杂性,因此才会创建框架(如Active X控件)来简化它所以这两个控件也鈳称为AO高级通用组件,它由AO基础组件构造而成面向通用功能,简化了用户开发过程组 件之间的协同控制消息都被封装起来。这级组件經过封装后使二次开发更为简单。如一个简单的AO应用系统若用基础AO组件对象 开发,需要编写不少的代码而利用高级通用组件,只需幾句代码就够了
MapControl控件提供了类似ArcMap中的数据视图(Data View)的窗口,通过它你可完成以下甚至更多功能:
* 放大缩小,漫游
* 生成图形元素,如点線,圆多边形。
* 识别地图上被选中的元素进行空间或属性查询。

确切地讲MapControl和MapObject控件没有直接的联系。首先MapControl控件是AO的一部分,至少 到目前为止它还不是一个独立的产品而MapObject是ESRI的一个独立的低端应用产品。第二MapControl比M apObject功能要强大许多和完善许多,MapObject产品的定位就是提供一些基夲的地图功能高级的功能这得完全靠开 发者自己去实现,而依托强大的AO组件库MapControl可以实现许多高级的GIS分析及应用

}

我要回帖

更多关于 文件平台 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信