1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ArcEngine开发,入门介绍,1,内容简介,ArcGIS,产品体系,ArcObject,简介,ArcEngine,概况,简单的,ArcEngine,开发实例,开发资源,2,ArcGIS,产品体系,3,ArcObject,简介,AO,是,ESRI,公司,ArcGIS,家族中应用程序的开发平台,它是基于,Microsoft COM,技术所构建的一系列,COM,组件集。,AO,是随,ArcGIS,产品一同发布的,要使用,AO,必须购买,ArcGIS Desktop,,才能利用,AO,提供的组件对象来进行应用开
2、发。,在,ArcGIS9,中发布了一个新的产品:,ArcGIS Engine,ArcGIS Engine,基于,AO,,并且实现了更好的封装,是一个独立的产品。,4,AO,的功能,通过,AO,你可完成以下,GIS,功能:,空间数据的显示、查询检索、编辑和分析;,创建各种专题图和统计报表;,高级的制图和输出功能;,空间数据管理和维护;,5,AO,编程基础,-COM,COM,是,Component Object Model,的缩写,它不仅定义了组件程序之间进行交互的标准,而且也提供了组件程序运行所需要的环境。,COM,本身要实现一个称为,COM,库,(COM library),的,API,,它提供
3、诸如客户对组件的查询,以及组件的注册,/,反注册等一系列服务。,一般来说,,COM,库由操作系统加以实现,我们不必关心其实现的细节,,COM,主要应用于,Microsoft Windows,操作系统平台上。,COM,通常的发布形式是:以,win32,动态链接库,(DLL),或可执行文件(,EXE,)的形式发布。,6,COM,的目标和特性,建立在二进制代码级上的可重用性,;,语言无关性,只要其能生成符合,COM,规范即可;,对使用,COM,对象的客户程序而言的进程透明性;,7,庞大的,COM,组件集合,Enum,Struct,Interface,COM,Total,ArcGIS 9.2,1106
4、,40,4824,3847,9817,ArcGIS 9.3,1194,51,5206,4049,10500,ArcGIS 9.2,与,9.3,间的类型(接口、,COM,类、枚举、结构)变化列表,备注,:,不包括类型库中隐藏或受限制的类型,.,8,理解对象模型图(,OMD,),OMD,是基于,OMT,(,Object Modeling Technique,)的表示方法,先来看看,OMD,能帮我们做些什么?,1,该类支持哪些接口;,2,完成任务需要哪些对象;,3,如何使用该类的对象;,4,是否可以直接实例化类;,5,接口有哪些方法和属性;,6,是否有其它类也支持该接口;,7,对象间的关系。,9,在
5、哪里可以找到,ArcGIS OMD,图表,Start Programs ArcGIS Developer Help,简单的、详细的类图,PDF files,软件安装的目录中,一般在 安装目录,DeveloperKitDiagrams,下,电子书籍光盘中,10,解析对象模型图,OMD,中的类有:,抽象类(,Abstract Class,):不能用于创建对象,但可以用来指定子类。(通过类型继承)。,组件类(,CoClass,):可以直接创建对象。,普通类(,Class,):不能直接创建对象,但可以作为另一个类的属性或者通过另一个类的实例化来创建对象。,在,OMD,中的关系类型主要有:,类型继承(,
6、Type inheritance,),创建(,Instantiation,),组成(,Composition,):对象间的主次关系,关联(,Associations,),A,和,B,为普通类对象,,C,为组件类对象,,D,为一普通类,,如下面代码:,A=B.writeA(),A=C.writeA(),A=New D(),X,普通类不能通过,New,方法产生,A,的生命周期是由产生它的对象,B,和,C,控制的,11,ArcObjects UML,关系符号,组件类,抽象类,实例化,类,继承,关联,组成,12,ArcObjects UML,关系符号例子,继承,组成,用来创建,对应关系,1,:,N,联
7、合,*,_,蛋,鸟,翅膀,羽毛,2,Abstract,Class,Class,Class,小鸡,CoClass,巢,CoClass,*,13,类和他们相应的对象,ArcObjects,对象例子,MxDocument,Map,Layer,*,*,FeatureLayer,Application,14,不能创建或实例化,抽象类永远不能有实例,为子类定义了泛化(,general,),子类集成了抽象类的接口,抽象类的,OMD,符号,:2,维阴影矩形,抽象类(,Abstract Class,),15,可以创建,:,使用,New,关键字,IMap,pMap=new,MapClass(),实例化,:,从其它
8、对象获得,IMap,pMap=,pMxDocument.FocusMap(),可创建类的,OMD,符号,:3,维阴影矩形,组件类,(CoClass),16,类,(Class),不能直接创建的类,不能使用,New,关键字来创建,从其它对象处获得实例,IRow pNewRow=pTable.CreateRow(),实例化类的,OMD,符号:,3,维没有阴影的矩形,生 成,17,属性和方法的符号,属性,哑铃形状的图标,方法,Property Get,(,read,),Property Set,(,write,),18,属性传值,:,大部分,ArcObjects,的属性,属性保存了一个对象的值或者一个
9、拷贝,不需要使用,Set,关键字,属性传引用,:,一些,ArcObjects,的属性,属性保存了一个对象的引用,必须使用,Set,关键字,如果引用对象发生了变化,对象的属性将同步受到影响,设置属性,pLayer.Name=Port Moresby,No,Set,keyword,Set,pLayer.FeatureClass=pMoresbyData,Must,use,Set,!,19,接口棒棒糖类型的图标,(),查找接口,这些接口也是有效的。但是详细的,属性和方法必须在其它地方浏览。,(e.g.,Object Browser).,该接口被本类使用,.,所有的属性和方法都列表在类图中,.,继承接
10、口是有效的,20,FeatureLayer on Map Layer OMD,概念上,这是一个对象模型,事实上,被分别在几张图表里存放,虫洞表现了图表与图表间的连接关系,ArcObjects OMD,图表上的虫洞,Element on ArcMap OMD,虫洞,21,例子,:MxDocument Map layer,从当前的文档中取得聚焦的,Map(active data frame,),MxDocument,可以包含一些,Maps(*),从一个,Map,中取得图层对象,图层对象有多种的类型,(),IMxDocument pMxDoc=LoadMxdDoc,(,c:Temptest.mxd)
11、;,IMap pMap=pMxDoc.FocusMap;,ILayer pLayer=pMap.,get_Layer(1),;,/Is pLayer a FeatureLayer?,if(pLayer is IFeatureLayer),MessageBox.Show(Yes!,its a feature layer);,MxDocument,Map,FeatureLayer,Layer,*,*,Others,22,ArcEngine,概况,ArcGIS9,新的开发产品,从核心的,ArcObjects,组件构建,创建独立应用或者集成到第三方系统,23,24,ArcEngine,功能,读取所有支
12、持的,ESRI,数据格式,包括,geodatabase,地图制作(创建和编辑,MXD,),ArcGIS,级别的绘图,查询和分析,地理编码,简单编辑,25,AO,与,AE,的联系与区别,联系:,1.ArcEngine,包括核心,ArcObjects,的功能,是对,AO,中的大部分接口、类等进行封装所构成的嵌入式组件。,2.AE,中的组件接口、方法、属性与,AO,是相同的。,区别:,1.,开发环境:,ArcObjects,必须依赖,ArcGIS Desktop,桌面平台,即购买安装了,ArcGISDesktop,的同时,安装,ArcObjects,,才能利用,AO,进行开发;,ArcEngine,
13、是独立的嵌入式组件,不依赖,ArcGISDesktop,桌面平台,直接安装,ArcEngine Runtime,和,DeveloperKit,后,即可利用其在不同开发语言环境下开发。,2.,功能:,AO,的功能更强大,,AE,的功能相对弱些,,AE,不具备,AO,的少部分功能。,ArcEngine,具有简洁、灵活、易用、可移植性强等的特点。,26,ArcGIS Engine,扩展模块,Geodatabase Update,Spatial,3D With Global Visualization,Engine,开发包包括了高级的,Engine,扩展模块,27,ArcGIS Engine,组成,两
14、个产品:,Engine,开发包,是创建自定义的,GIS,和制图应用的工具包,Engine,运行时,是为了运行自定义的,Engine,应用的可分发的,ArcObjects.,28,ArcGIS Engine,开发包,组件,,APIs,,工具的集合,开发人员可以用来创建高级的,GIS,应用,组件,-Engine,库:制图,绘制,选择,编辑等,-Control,库:地图控件,布局空间,工具条等,APIs,-COM,.NET,JAVA,C+,工具,-ArcGIS Developer Kit,-Documentation,-Developer Utilities,29,ArcGIS Engine,类库体
15、系结构,30,System,类库,:,System,类库是,ArcGIS,体系结构中最底层的类库。,System,类库包含构成,ArcGIS,的其他类库提供服务的组件。,System,类库中定义了大量开发者可以实现的接口。开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展,ArcGIS,系统。,SystemUI,类库:,SystemUI,类库包含用户界面组件接口定义,这些用户界面组件可以在,ArcGIS Engine,中进行扩展。包含,ICommand,、,ITool,和,IToolControl,接口。开发人员可以通过使用这些对象简化用户界面的开发。,Geometry,类库:,
16、Geometry,类库包含了核心的几何形体对象,如点、线、面等,即在,AO,中的要素和图形元素的几何形体都可以在这个组件库中寻找到。除此之外,这个库还包含了空间参考对象,包括,GeographicCoordinateSystem,(地理坐标系统)、,ProjectedCoordinateSystem,(投影坐标系统),GeoTransformations(,地理变换,),对象等。,Display,类库:,Display,类库包含用于显示,GIS,数据的对象。它包括,Display,对象、,Color,对象、,ColorRamp,对象、,DisplayFeedback,对象、,RubberBan
17、d,对象、,Tracker,对象、,Symbol,对象。,31,Output,类库,:,Output,类库包含了,AO,中的所有输出对象:打印输出对象,Printer,和转换输出对象,Export,。前者可以将视图上的地图通过打印机进行输出,而后者包含的丰富对象,可以将地图转换为多种格式的矢量或者栅格形式的数据,如,EMF,、,PDF,、,JPEG,、,TIFF,等。,Framework,类库,:,arcgis,程序存在一个内在的框架,所有的,ao,组件对象都在这个框架中扮演了不同的角色,它的协作可以完成,arcgis,提供的,gis,功能。这个框架中的某些核心对象被放置在,Framework
18、,库中。,Framework,库提供了,arcgis,程序的某些核心对象和可视化组件对象。这个库中的一些对象可以让,arcgis,程序扩展他们的定制环境,以改变,arcgis,程序的外观界面。同时,这个库也提供了诸如,ComPropertySheet,、,ModelessFram,和,MouseCursor,等对象,它们是一些对话框,用于在,arcgis,上实现用户的交互。,Carto,类库,:,Carto,库包含了为数据显示服务的各种组件对象,如:,MapElements(,包含,Map,对象的框架容器,),;,Map,和,PageLayout,(地理数据和图形元素显示的两个主要对象);,M
19、apSurrouds,(一个与,Map,对象相关联的用于修饰地图的对象集);,Map Grids,(地图网格对象,用于设置地图的经纬网格或数字网格,起到修饰地图的作用);,Renderers(,着色对象,用于制作专题地图,),,,Labeling,,,Annotation,,,Dimensions(,标注对象;用于修饰在地图上产生文字标记以显示信息,),,,Layers,(图层对象,用于传递地理数据到,Map,或,PageLayout,对象中去显示),,MapServer,,,ArcIMS Layers,、,GPS Support,等。,32,CartoUI,类库,:,CartUI,库中的对象
20、也是为了数据显示服务的,在,ao,中所有以,UI,结尾的库中的对象都具有可视化的界面。,CartoUI,库中包含诸如,IdentifyDiaLog,、,SQLQueryDialog,、,QueryWizard,等对象,这些对象都以一个对话框的形式出现。,Controls,类库,:,Controls,库包含了在程序开发中可以使用的可视化组件对象,如,MapControl,、,PageLayoutControl,等,,Controls,库分以下,7,个子库:,MapControl,PageLayoutControl,TocControl,ToolbarControl,ControlCommands
21、,ReaderControl,LicenseeControl,。,DisplayUI,类库,:,DisplayUI,库提供了具有可视化界面的对象用于辅助图形显示,它包括,property pages,(属性页)对象和,StyleGalleryClass,对象,前者可以用于设置,Symbol,对象,后者则可以用于管理和获取,Style,和,Symbol,(符号)对象。,GeoDatabase,类库:,GeoDatabase,库中包含的,COM,对象是用于操作地理数据库的。这个库中的对象包括核心地理数据对象,如,Workspace(,工作空间,),、,DataSet,(数据集)等;它也包含了几何网
22、路、拓扑、,TIN,数据、版本对象、数据转换等多方面的丰富内容。,33,DataSourcesFile,类库,:,地理数据保存在不同形式的文件中,,DataSourceFile,库中的对象正是起到打开文件格式地理数据的作用。,DataSourcesGDB,类库,:,DataSourcesGDB,库中的,COM,对象用于打开数据源为,Access,数据或任何,ArcSEDE,支持的大型关系数据库的地理数据。这个库的对象不能被扩展。,DataSourceGDB,库中的主要对象是工作空间工厂,一个工作空间工厂可以让用户在设置了正确的连接属性后打开一个工作空间,而工作空间就代表了一个数据库,其中保存着
23、一个或多个数据集对象。这些数据集包括表、要素类、关系类等。库中主要的对象,AccessWorkspaceFactory,,用于打开一个基于,Access,数据库的,Personal GeoDatabase,;,ScratchWorkspaceFactory,,用于产生一个临时的工作空间存放选择集对象;,SdeWorkspaceFactroy,,用于打开,SDE,数据库。,DataSourcesRaster,类库,:,DataSourcesRaster,库中的,COM,对象用于获取保存在多种数据源中的栅格数据,这些数据源包括文件系统、个人数据库或者企业地理数据库(,SDE,数据库)。这个库还提供
24、了用于栅格数据转换等功能的对象。,34,开发控件,MapControl,PageLayoutControl,TocControl,ToolbarControl,ReaderControl,SceneControl,GlobeControl,35,命令和工具,提供了超过,100,个命令和工具,36,ArcGIS Engine,的分发和部署,分发应用程序,用,Engine,开发包开发的应用程序可以运行在,:,-ArcGIS Desktop 9,许可,-ArcGIS Engine,运行时许可,应用程序开发人员可以控制运行程序的许可,37,创建第一个,ArcGIS Engine,桌面应用程序,38,39,开发资源,OMD,图,ArcGIS Developer Help,40,其他资源,Samples,User forums:,ESRI:,或,ESRI,中国,:,bbs.esrichina-ESRI,ESRI Developer Network,ArcGIS,产品框架,2.ArcObject,简介,-,基于,COM,接口编程基础,-,如何阅读,OMD,3.ArcEngine,基础知识,-ArcEngine,的产品及环境,-ArcGIS Engine,类库,4.,创建第一个,ArcGIS Engine,桌面应用程序,5.,有用的开发资源,42,谢 谢!,43,