best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
阅读:1245回复:1

AO基础3(转)

楼主#
更多 发布于:2004-03-13 13:43
第三章 AO对象的使用
在第二章中我们谈到了许多关于COM的概念,象类,对象,接口,方法等,那么一个实际的AO开发中是如何体现这些COM概念的呢---既然AO是基于COM的。在本节中,我将使用VB代码来说明如何使用AO的对象,并对如何阅读OMD(Object Model Diagram)进行介绍。
3.1 AO对象的使用
让我们直接用AO相关的代码来开始这段旅程吧,如果你觉得的是的话。:)
Dim pMap as IMap
Set pMap = New Map
PMap.name =”地图名称为-Tour”
…………………….
…………………….
Pmap.ClearLayers
Pmap.Clear //ERROR
如何运行这段代码是下一章的内容,先看看为什么代码会这么写吧,里面奥妙不少。
Dim pMap as Imap
我们知道在COM中对对象的访问是通过接口来完成,因此不能象许多可视化控件那样,可以直接通过其名称来调用属性或执行其方法。那么这句其实就是定义了一个接口变量(题外注释:其实准确地讲应该是一个指向接口的指针变量才对,好在VB把这一切都给演示了)。有了这个接口变量还不行,因为接口是定义在对象上的,那么下来的步骤应该是产生一个对象,而对象又是从那里来的呢---类。
于是就有了这样的代码Set pMap = New Map。
在这句中不单纯只是实例化出一个Map对象,并且将上句的pMap接口变量做为了该对象的缺省接口。OK,现在我们就可以通过这个接口来对地图名进行修改,或者调用ClearLayer方法来删除掉该地图中的所有图层了。再看看增加最后一句的执行情况—会出错,至于为什么,原因很简单,不同的接口中的方法或属性只能通过其接口来访问,而Clear方法属于Map类的另外一个接口IactiveView所有。可以通过查询接口(Query Interface)来’切换‘到IactiveView上。代码如下
Dim mView as IactiveView
set mview=pmap
mview.clear
3.2 OMD的作用
OMD(对象模型图)是基于OMT(Object Modeling Technique)的表示方法,先来看看OMD能帮我们做些什么?
1. 该类支持哪些接口;
2. 完成任务需要哪些对象;
3. 如何使用该类的对象;
4. 是否可以直接实例化类;
5. 接口有哪些方法和属性;
6. 是否有其它类也支持该接口;
7. 对象间的关系
3.3 OMD符号解释

在OMD中有三类class,分别是抽象类(AbstractClass)、组件类(CoClass)和普通类(Class)。抽象类的主要目的是为它的子类定义公共接口,一个抽象类将把它的部分或全部实现延迟到子类中,因此,一个抽象类不能被实例化。一个组件类对象可以被直接创建,普通类对象虽然不能直接创建,但它可以可以作为其它类的一个属性或者从其它类的实例化来创建。AO中的Dataset或Geometry classes是抽象类的示例,一个Geometry类型对象不能被创建,但是一个Polyline可以被创建。这个Polyline对象实际上在类的基础上实现了Geometry中定义的接口,因此在基类对象中被定义的接口可以从coclass来访问。
在OMD中的关系类型主要有类型继承(Type inheritance)、创建(Instantiation)、组成(Composition)以及关联(Associations)等。类型继承我们在COM一章过提到过,实际上就是继承完全继承了超类的接口,这点可以利用AO对象浏览器工具清楚的看到,而组成关系指的是对象间的主次关系,也就是说主体的生命存在与否决定着次体的存在与否。
3.4 AO的组织划分
整个AO的OMD看起来密密麻麻,让人有些头晕眼花的感觉。还好,ESRI对整个AO进行了结构的组织分割,按照不同的应用领域可以找到相应的PDF格式的OMD。从AO开发帮助中我们可以发现划分为以下的几个子系统:
1. 3D Analyst Extension ---用于3D可视化和表面建模的组件对象;
2. Application Framework ---让开发者在ArcMap和ArcCatalong中通过程序来定制用户界面;
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对象;
14. Spatial Reference--- 用于完成空间参考的设置;
15.StreetMap USA Extension---这个和国内的用户关系不大。
诚然,在AO的开发中对象的层次和相互关系是极其重要的,稍有撼缺的是OMD中的对象层次组织看起来有些纷乱,个人觉得《Exploring ArcObjects》里的对象模型图更适合入门使用-----它将一些常用和重要的对象抽取出来并以上下层次结构来表示。

絮语闲聊,权当消遣- 最近抽时间整理一些以前写的程序,也开始了解MO(ESRI MapObject)的应用,有些感受一起吐出。在GIS应用中最大的工作就是数据的采集整理了,虽然你可以采用MO、MAPX等一些地图控件(我曾经还看到过一个南非人用DEPHI写的地图控件,也是很有些特点的),如果你够超人,甚至可以自己去做一个地图控件,来完成一个实用性也很个性化的系统出来。可是它终究只是一个应用系统而已。 ???你应该知道我要讲什么的了吧。所有的应用都是基于一定的数据结构,你可以在自己的应用开发中定义数据模型,但是数据的来源呢。不是CAD,就是COVERAGE,SHAPE,(标准嘛)你可以针对一两种数据格式进行转换,只是现实中的数据类型是多样的,总不能都去写吧,况且你的数据格式能否得到认可呢。再想想看你要做多少工作---那是一个GIS平台才能完成的事情。这就是许多情形下我们为什么没法完全用底层或地图控件去写一个完整GIS系统主要的原因吧。
扯远了。。。在本章中,我会实现一个特定功能的DLL,用来说明AO开发开发的几种模式,AO工具包的使用,如何应用写好的组件。在ArcObjects Developer Help中有许多完整和详尽的示例代码,这儿主要想就方法做一个简要的说明。
喜欢0 评分0
lzg_cj
路人甲
路人甲
  • 注册日期2004-01-08
  • 发帖数142
  • QQ
  • 铜币448枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-04-27 18:51
谢了!
举报 回复(0) 喜欢(0)     评分
游客

返回顶部