注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

ArcObjects学习的重要工具 Object Model Diagrams  

2013-06-14 00:45:37|  分类: AO |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

(1)不知道到底应该使用哪个类来操作:

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

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

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

 

1)Class(类):AO中有三种类。

Abstract class(抽象类):抽象类算一个超类,不能用来实例化一个对象,比如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 Diagram,ArcObjects Developer help和EOBrowser来寻找完成一个操作所需要设计的类和方法。实例如下:访问C:/data/US.mdb这个GeoDatabase中 的”Status”这个Feature Class。首先,知道这个操作与GeoDatabase有关,可以打开GeoDatabase这个Object Model Diagram,利用PDF的查找功能查找Access这个关键字(Access是访问数据库的关键字,如果Diagram不大,可以游览整个 Diagram寻找),可以发现一个AccessWorkspaceFactory类,但是在Developer Help中可以看到AccessWorkspaceFactory类提供了三个接口 IWorkspaceFactory,IWorkspaceFactory2,ILocalDatasetCompact。其中接口 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会有一个更深的理解!

 

-----------------------------------------------------

转帖来自http://zhmzhgis.blog.sohu.com/19315350.html

  评论这张
 
阅读(275)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018