页面载入中....

页面载入中....


公告
页面载入中....


我的分类(专题)
页面载入中....

日志更新
页面载入中....

最新评论
页面载入中....

交流专区
页面载入中....

链接

Blog信息
页面载入中....







ArcObject学习的重要工具--Object Model Diagrams
GIS_Guy 发表于 2006-3-23 22:16:35

ArcObject是以一组的基础的类库组成的,在使用这些类的时候经常可能会发现这样那样的问题,比如:

1)      不知道到底应该使用那个类来操作;

2)      有的时候使用某个类的时候会出现有的类不能实例化而有的类又不能直接定义而必须从某个实例中初始化而得到;

 

际应用中我们有一些工具可以使用:Object Model DiagramsArcObjects Developer Help SystemESRI’s object browserEOBrowser)。其中ArcObjects Developer Help SystemEOBrowser可能大家用得也比较多,但是Object Model Diagrams可能就用得不多,不太注意。其实Object Model DiagramsArcObjects学习和使用很有用的工具,通过这些图可以更好的理解各种类之间的关联,结合COM的知识,可以加深对ArcObject的认识,是对其的使用更高效。

 

面首先结合图说一下Object Model Diagrams中的一些概念:


 

1)             Class(类):AO中有三种类。abstract calss(抽象类):抽象类算一个超类,不能用来实例化一个对象,比如Line就是一个抽象类,其他的线是Line之上,Line给出了所有线性的共同特性和方法;CoClass:这种类可以直接通过new方法实例化出一个对象;Class:这种类不能直接new出一个对象,但是可以通过实例的属性得到或者通过某个方法生成一个对象。

2)             Interface(接口):接口跟类的概念,一个类可以提供很多个接口。

3)             Relationships Between Classes:类之间的关系有Association(关联),Type Inheritance(继承),instantiation(实例化),Composition(组成)。

a)        Association表示一个类的实例可以和几个其他类的实例相关联,比如一个Line Symbol对象只能和一个线对象相关。

b)        Type Inheritance是一个类可以通过继承,得到其父类的属性和方法,比如Line这个超类之上可以有其他类型的特定线类。

c)        Instantiation是某个类的某个方法可以实例化其他类的实例,比如IWorkspaceFactory类的OpenFromFile()方法可以实例化一个IFeatureWorkspace类的实例。

d)        Composition是一个强制的关系,是一个类的实例包含了其他的类的实例,比如一个points会包含很多个point,当这很多的point的生命周期没有结束,points对象就不能从内存中卸载掉。

清楚了类的类型和类之间的关系,对于合理的应用类,正确的实例化和卸载类,提高开发的可靠性,清楚类的运行机制很有帮助。

 

示例:

 

现在通过一个实例给出如何利用Object Model DiagramArcObjects Developer helpEOBrowser来寻找完成某一个操作所需要设计的类和方法。实例如下:访问C:\data\US.mdb这个GeoDatabase中的“Status”这个Feature Class

首先,知道这个操作与GeoDatabase有关,可以打开GeoDatabase这个Object Model Diagram,利用pdf的查找功能查找Access这个关键字(Access是访问数据库的关键字,如果Diagram不大,可以浏览整个Diagram寻找),可以发现一个AccessWorkspaceFactory类。但是在Developer Help中可以看到AccessWorkspaceFactory类提供了三个接口IWorkspaceFactoryIWorkspaceFactory2ILocalDatasetCompact。其中接口IWorkspaceFactory有一个OpenFromFile()方法可以打开一个database,可以定义一个IWorkspaceFactory接口来应用这个方法,但是需要实例化一个类来实现这个方法,但WorkspaceFactory是一个抽象类,但AccessWorkspaceFactory类继承了WorkspaceFactory,所以可以用AccessWorkspaceFactory类来实现IWorkspaceFactory接口使用OpenFromFile()方法。

然后,OpenFromFile()方法返回了一个IWorkspace接口,在Workspace类中有一个IFeatureWorkspace接口,可以通过这个把OpenFromFile()方法返回到一个IFeatureWorkspace上,IFeatureWorkspace类有一个OpenFeatureClass()方法。所以可以用这样的代码来实现上面的示例:

Dim pWSF as IWorkspaceFactory

Dim pWS as IWorkspace

Dim pFWS as IFeatureWorkspace

Dim pFC as IFeatureClass

 

Set pWSF = New AccessWorkspaceFactory

Set pWS = pWSF.OpenFromFile(“C:\data\US.mdb”,0)

Set pFWS=pWS ‘QueryInterface

Set pFC=pFWS.OpenFeatureClass(“States”)

 

利用Object Model Diagrams可以清楚的了解类的关系,一个类到底有什么接口,接口之间是什么关系,用某一个方法会返回什么样的类型的结果,如果利用这些结果,如果能够很好的利用这些类图的话,对于ArcObjects会有一个更深的理解!

 


阅读全文 | 回复(4) | 引用通告 | 编辑
 


Re:ArcObject学习的重要工具--Object Model Diagrams
link2point(游客)发表评论于2007-5-18 16:19:15
在上面的示例中我发现你用IWorkSpaceFactory接口的OpenFromFile方法之间打开了本地的Access数据库C:\data\US.mdb,我在实现的时候,为什么这一句总是报错?

个人主页 | 引用 | 返回 | 删除 | 回复
 


Re:ArcObject学习的重要工具--Object Model Diagrams
Rosky(游客)发表评论于2006-10-26 16:20:51
请问你们有Arcobject组件吗,我也是学地信的,都大三了,还没见过。我想学这个,我们图书馆也有这本书的教材,就是没组件去试验。如果有,能共享吗,谢谢回信》my e-mail::dujiangyan101@163.com.
重在交流嘛。

个人主页 | 引用 | 返回 | 删除 | 回复
 


回复:ArcObject学习的重要工具--Object Model&
FreePark发表评论于2006-4-1 13:01:40

谢谢提醒,研究AO的同时也在看COM的本质论,觉得只有先对COM了解更深刻才能用好AO。谢谢你的提醒我已经修改了文章中的错误。


个人主页 | 引用 | 返回 | 删除 | 回复
 


回复:ArcObject学习的重要工具--Object Model&
malotus发表评论于2006-4-1 9:35:18

文章不错,但是里面犯了基本的语法错误。如下:“AO中有三种类。abstract calss(静态类):静态类算一个超类”

其中abstract class应该说成“抽象类”这对有点oo概念的人来说,都能看出作者不注意犯的文法错误。

只不过想提醒一下对oo不熟的初学者,当然我也是个gis初学者,呵呵。


个人主页 | 引用 | 返回 | 删除 | 回复
 


发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:
    页面载入中....



Powered by Oblog.