ArcObjects学习的重要工具 Ob…

来源:互联网 发布:jsp订餐系统源码 编辑:程序博客网 时间:2024/05/19 03:27

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

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

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

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

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

 

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

Abstractclass(抽象类):抽象类算一个超类,不能用来实例化一个对象,比如Line就是一个抽象类,其他的线是Line之上,Line给出了所有线的共同特性和方法;

CoClass:这种类可以直接通过new方法实例化出一个对象;

Class:这种类不能直接new出一个对象,但是可以通过实例的属性得到或者通过某个方法生成一个对象。

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

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

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

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

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

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

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

示例:

现在通过一个实例给出如何利用Object Model Diagram,ArcObjectsDeveloperhelp和EOBrowser来寻找完成一个操作所需要设计的类和方法。实例如下:访问C:/data/US.mdb这个GeoDatabase中的”Status”这个FeatureClass。首先,知道这个操作与GeoDatabase有关,可以打开GeoDatabase这个Object ModelDiagram,利用PDF的查找功能查找Access这个关键字(Access是访问数据库的关键字,如果Diagram不大,可以游览整个Diagram寻找),可以发现一个AccessWorkspaceFactory类,但是在DeveloperHelp中可以看到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会有一个更深的理解!

原创粉丝点击