用AO开发已经有一段时间了,对AO开发的模式也有一定的了解了!AO是ESRI开发的一组COM的集合,利用它用户可以进行二次开发,以快速建立满足自己要求的GIS应用.
AO开发就是利用一些类和这些类的接口进行开发.
1、抽象类,类,和组件对象类
抽象类是不能实例化的,抽象类中是一系列抽象的方法,故是不能实例化的,它只能被继承。不同的类可以继承同一个抽象类,但内部对同一方法的实现可能是不一样的。如AO中的接口都是抽象类。用户可以在类中实现这些接口,也就是继承这些接口。如用户可以在自己的类中实现ICommand接口,生成一个Command,或者实现ICommand、ITool接口,生成一个Tool.
类是不能直接实例化的,它只能作为另一个类的属性或者被其它类的对象实例化。如Sde3Workspace Class、Sde4Workspace Class,FeatureClass,FeatureDataset它们是不能通过New直接实例化的,只能通过SdeWorkspaceFactory CoClass这个组件对象类所实现的IWorkspaceFactory接口里的Open方法来实例化。FeatureClass,FeatureDataset也是不能直接实例化的,他只能通过IFeatureWorkspace接口里的CreateFeatureClass,CreateFeatureDataset方法来实例化。
组件对象类能够通过New来直接实例化。如 SdeWorkspaceFactory,QueryFilter它们是可以通过New来直接实例化的。
2、继承
3、类和接口的实现
一些类可能实现多个接口,一个接口也可能被多个类所实现,但不同的类实现同一个接口可能内部并不是一样的,这就实现了多态性.如ILayer这个接口被多个接口实现,其中包括FeatureLayer和RasterLayer,但这两个类实现ILayer接口时内部实现肯定是不一样的!但在外部对ILayer的操作是一样的!
4、接口之间的相互查询
一个类可以实现多个接口,每一个接口可能包括一系列的属性和方法,但有时候一个接口里可能没有你想要的方法和属性,可能在这个类所实现接口的另一个接口里,这就涉及到从一个接口转到这个类所实现接口的另一个接口里,对于类所实现的一系列接口里,接口间是可以相互跳转的。如我想对一个feature的属性进行修改,给的就是这个feature的IFeature接口,我们知道对一个feature进行修改必须要把这个feature所在的featureclass的工作空间设为可编辑,且编辑结束后要结束编辑,这就要通过这个IFeatue接口来获得这个这个feature所在的IFeatureClass接口和IWorkspace接口,我们知道IFeatue接口里有一个object属性,这个属性返回的是IObjectClass,而FeatureClass这个类实现了IObjectClass和IFeatureClass这两个接口,这样就可以通过接口跳转从IObjectClass转换成IFeatureClass,这样就可以获得feature的IFeatureClass接口,其代码(c#)如下:
IObjectClass i_objcls=I_FtrCur.Class;
IFeatureClass i_ftrcls=(IFeatureClass)i_objcls;
Feature所在的FeatureClass的IFeatureClass接口有了,还要这个FeatureClass所在的工作空间的IWorkspace接口,获取这个接口可以通过两个方法
一、通过IFeatureClass接口里的FeatureDataset属性来获得IFeatureDataset接口。
IFeatureDataset接口里有一个Workspace属性返回IWorkspace接口,但这种方法有一个特别说明就是这个FeatureClass必须是一个FeatureDataset的成员,如果这个FeatureClass是一个独立,这个FeatureDataset返回的就是一个空值。所以这种方法对FeatureClass是一个FeatureDataset的成员时是适用的,独立时就不适用了。
二、通过接口转换。
FeatureClass实现了多个接口,其中有IDataset接口和IFeatureClass接口,我们已经有了IFeatureClass接口,就可以通过接口跳转来获得IDataset接口,在IDataset接口里有一个Workspace属性返回IWorkspace接口,这种方法对于FeatureClass是一个FeatureDataset的成员和FeatureClass是独立的这两种情况都是可以的。代码如下:
IDataset i_ftrDset=(IDataset)i_ftrcls //接口跳转
IFeatureWorkspace i_wks=(IFeatureWorkspace)i_ftrDset.Workspace
分享到:
相关推荐
ArcEngine开发感想
ArcEngine 开发宝典
ArcEngine10官方开发手册,中文版,快速了解AE产品体系,快速开发入门。
1. 目录 1 2. 用ArcEngine的工具条添加图层要素 2 3. ArcEngine中对Feature的编辑 5 4. Feature的概念 6 ...34. ArcEngine开发感想 122 35. Geometry 对象浅析 124 36. AE开发中的一些基本方法(1)数据连接 134
ArcEngine开发教程大全
Arcengine二次开发的宝典级电子书
arcengine中文开发文档
arcengine二次开发说明文档,其中有三个文档,一个中文,两个英文,gis二次开发的资料很少啊
arcengine的完整开发实例,包含了GIS的常用功能
ArcEngine二次开发实例笔记,是作者自己在研究生三年的ArcEngine92开发的实践过程中一点一滴积累起来的财富,相信笔记中记录的66个实例也是你ArcEngine二次开发中遇到的难题,因为现在已经很少接触GIS二次开发,所以...
ArcEngine开发实现将地图视图导出成图片
\ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题.
Arcengine开发,编辑要素,裁切要素,选择要素
这一个非常有用的ArcEngine 开发教程,对于初学ArcEngine的人员,很有帮助
ArcEngine 开发文档 ArcEngine 开发文档详细介绍了如何在 ArcMap 的 VBA 环境中编程,包括如何写 VBA 宏和创建 UIControl 实现用户需求的代码。同时,文档还讨论了如何在 VB 环境中利用 ArcObjects 组件开发 ...
本程序是我学习GIS二开的练手程序,只是实现基本功能。并没有完全完善。仅供参考学习使用。
基于C#的ArcEngine二次开发,内容简明扼要,适合初学者快速入门。
ArcEngine开发手册内容翔实,有很多实例代码,很适合ArcEngine初学者。
Arcengine开发,不通过图层,直接操作shp,进行空间关系的判断,并进行裁剪。使用者可在arcmap里查看结果数据