arcengine的基本原理对象组件模型.ppt
ArcEngine 基本原理组件对象模型,上一课 内容复习提要,1.1 地理信息系统定义、类型和构成1.2 地理信息系统的研究内容1.3 地理信息系统的功能1.4 GIS软件的发展与技术1.5 GIS软件的开发模式1.6 GIS软件的开发内容1.7 GIS软件开发的相关技术,课程2,ArcGIS整体架构ArcEngine与ArcObject的关系与区别ArcEngine的体系结构对象组件模型COM如何阅读OMDArcEngine软件安装说明ArcEngine在VB 或.net环境中的应用实例ArcGIS的二次开发VBA,2.1 ArcGIS 整体架构,ArcGIS Desktop,ArcGIS Server,ArcIMS,ArcGIS Mobile ArcPad,ArcGIS Engine,桌面 GIS,嵌入式 GIS,服务器 GIS,移动 GIS,Geodatabase,DBMS,File-based,XML,ArcSDE,ArcEditor,ArcView,ArcInfo,Engine Developer Kit,Server Developer Kit,Customization,Desktop Developer Kit,.NET,C+,VB,Java,.NET,VC+,VB,.NETADF,JavaADF,C+,ArcObjects,Customization,XML+,VBScript,ArcPad Application Builder,JavaScriptHTML/DHTML,XML.NET,Services,JSPJava,ActiveX(ASP)ColdFusion,2.1 ArcGIS 整体架构,ArcGIS Desktop:一套集成的高级GIS产品(ArcReader,ArcView,ArcEditor,ArcInfo,ArcGIS扩展模块等);ArcGIS Engine:嵌入式GIS组件库,可使用C+,COM,.NET和Java来构建自定义的、面向行业的应用软件;ArcGIS Server:GIS软件对象的共享库,用于构建企业和网络计算框架内的应用软件。它使用.NET/ASP和Java/JSP来构建基于SOAP的网络服务和网络应用程序;ArcIMS:GIS网络服务,通过开放的因特网协议发布地图、数据和元数据;ArcSDE:在大量的数据库管理系统(DBMSs)中进行地理数据管理的界面。,2.1 ArcGIS 整体架构,所有产品共享ArcObjectsEngine包括核心 ArcObjects的功能,ArcGIS Desktop,ArcGIS Engine,ArcGIS Server,2.2 ArcObjects与ArcEngine的联系与区别,联系:ArcEngine包括核心 ArcObjects的功能,其是对AO中的大部分接口、类、库进行封装所构成嵌入式组件。Ae中的组件接口、方法、属性与Ao是相同的。区别:开发环境:ArcObjects必须依赖与ArcGIS Desktop桌面平台,即购买安装了ArcGIS Desktop的同时,安装ArcObjects,才能利用AO进行开发。ArcEngine是独立的嵌入式组件,不依赖ArcGIS Desktop桌面平台,直接安装ArcEngine runtime 和Developer Kit后,即可利用其在不同开发语言环境下开发 功能:Ao的功能更强大,Ae的功能相对弱些,Ae 不具备Ao的少部分功能 可以理解为ArcEngine为嵌入式的ArcObjects,其具有简洁,灵活,易用,可移植性强的特点。,2.3 ArcGIS Engine 体系结构,P1619,ArcEngine 具有哪些功能?,基础服务核心函数,几何操作数据存取可以访问栅格数据和矢量数据地图分析高级空间分析和SQL 访问地图表达标注,符号化,专题图开发组件Developer kit,mapping 和 3D 控件,toolbar,TOC,ArcGIS Engine,ArcGIS Engine功能,显示具有多个地图图层(如公路,河流和边界)的地图。漫游与缩放地图。通过单击来识别地图上的要素。搜索地图上的要素。显示字段值的文本标注。绘制来自于航空照片或卫星影像的图像。绘制图形要素(如点、线、圆以及多边形)。绘制描述性文本。沿线或在方框、区域、多边形及圆内选择要素。在其它元素的特定距离内选择要素。使用SQL表达式查找并选择要素。使用主题方法为要素着色(如值映射图、分类图和点密度图)。动态显示即时或时间序列数据。根据提供的街道地址或交点在地图上查找位置。转换地图数据的坐标系统。执行形状的几何操作,来创建缓冲区;计算差值;或查找形状的交集,联合或反转交集。操作形状或旋转地图。创建和更新几何特征及其属性。交互操作个人地理数据库与主地理数据库。ArcGIS Engine非常适合于构建高级GIS应用软件的基础制图。,ArcGIS Engine 产品和扩展,ArcGIS Engine Runtime 运行所有的ArcEngine应用程序都必需的安装在客户机的终端 不同的 runtime 许可是可选择的ArcGIS Engine Developer Kit为开发者而设计包括所有库和开发资源所有选项都是已经激活 许可通过软件授权,ArcGIS Engine Developer Kit是什么?,一个可嵌入式的 GIS 组件用来创建客户应用程序容易设计、配置、开发 可扩展可展开可分发是面向开发者的产品,而不是最终用户,ArcEngine能创建哪种类型的应用程序?,可以创建任何类型的独立的GIS应用程序例如:独立,嵌入式的以及交叉平台的。可视 Mapping,drawing,selecting,editing,不可视 Utility,updating,Component(Map.dll),ClientArcMap,2.4 COM,连接一个软件模型和另一个软件模型的一种协议独立的一种语言 二进制规范运用界面或组件来开发、配置程序模型客户端调用服务器并且服务给予响应所有通讯是通过接口进行的,2.4 COM 类,COM类执行接口所有类执行 IUnknown管理所有对象的产生、终结成员:QueryInterface,AddRef 和 ReleaseCoclasses 是可创建的,Public Sub mapName()Dim pMap As IMap 你能通过一个接口来创建一个实例 Set pMap=New MapEnd Sub,IUnknown,COM 类与接口,类对象拥有一个或多个接口 接口是定义了一组方法和属性的逻辑关系与对象的通信是通过接口来进行的,2.4 COM 接口,定义一组逻辑的方法和属性从 IUnknown(default)继承ArcObjects 支持客户化接口通过 QueryInterface(QI)访问接口,Public Sub mapName()Dim pMap As IMap Set pMap=New Map 通过定义的pMap你可以有权使用其的properties and methods MsgBox pMap.NameEnd Sub,2.4 COM 外部连接的一些接口,提供跟客户端来进行交换的一些事件的途径通过连接对象并接收它外部接口许多不同的事件在ArcEngine都可用例如:document load events,map drawing events,editing events,Private WithEvents MxDocEvents As MxDocumentPrivate Sub setNewValues().Set MxDocEvents=pMxDoc.FocusMap Now can access eventsEnd SubPrivate Function MxDocument_NewDocument()As Boolean MsgBox New ArcMap documentEnd Function,2.4 ArcEngine和COM API(应用编程接口),所有ArcEngine COM 类型都已在类型库里定义好并且类型库是通过二进制文件来进行描述类:CLSIDs 和ProgIDs接口:IIDs常量和列举执行DLL和 EXE文件开发工具ArcGIS Developer Help(VB6 or VC+)LibraryLocator,EOBrowser and OleView,*ArcObjects C+*.dll files,*COM Type Libraries*.olb files,2.4 学习ArcEngine需要了解的COM内容(1),COM不是接口,也不是类,它是一种二进制级别的组件通信标准符合COM标准的对象称为COM对象,COM对象是实现了很多接口的对象,它可以DLL或者EXE文件形式存在COM对象必须实现IUnknown,它负责管理对象的生命周期QI,即所谓的查询接口。它是一个COM对象的多个接口之间相互转换的方法。缺省接口,每个COM对象一个缺省接口,通常为IUnknown,2.4 学习ArcEngine需要了解的COM内容(2),每个组件都有一个独一无二的表示:GUID,组件的身份证。接口的GUID称为IID,而组件类的GUID为CLSID一个COM对象可以分为多个接口,一个接口可被多个COM对象实现接口分为两种:内向接口(属性、方法)和外向接口(事件)COM组件必须被注册后才能使用COM对象可在开发过程中不断扩充、添加新的接口。如:ILayer2COM对象编译为DLL和EXE进行传播,2.4 其他,类型库中包含了所有COM类每个类型都有全球唯一标识(GUID)比如:CLSID,IID,Progid,使用esriSystem.UID就可以代表一个对象GUID详细描述CLSID或ProgID(ProjectName.ClassName),Dim u As New UIDu.Value=4FDD8858-DF31-4D6B-8679-1FED633262DA CLSID of ControlsMapRotateToolDim u As New UIDu.Value=esriControlCommands.ControlsMapRotateTool“ProgID of ControlsMapRotateTool,Dim command As ICommandcommand=AxToolbarControl1.CommandPool.FindByUID(u)If Not command Is Nothing Then MsgBox(command.Name)End If,2.4 COM的优越性,使得编程技术难度和工作量降低,降低开发周期和成本使得软件的复用性得到提高语言独立,可以使用任何一种语言编写COM组件,2.5 如何阅读OMD,OMD(Object Model Diagram 对象模型图)阅读一个对象的模型图类的类型类的相互关系接口、属性、方法的图标,OMD帮助编写代码OMD 中展示每个类的接口,方法,属性OMD中展示各类之间的相互关联关系AO在几个图表中拥有超过 1,500 个类超过 1,600 个接口,ArcObject 的OMD,在哪里可以找到ArcGIS OMD图表,Start Programs ArcGIS Developer Help简单的、详细的类图PDF files电子书籍光盘中软件安装的目录中,关系符号的含义,继承组成用来创建对应关系 1:N关联,*,_,蛋,鸟,翅膀,羽毛,2,Abstract,Class,Class,Class,燕子,CoClass,巢,CoClass,*,类和他们相应的对象,AO 对象中关系符号的实例应用,MxDocument,Map,Layer,*,*,FeatureLayer,Application,OMD 中的类与对象,抽象类(Abstract Class)普通类(Class)组件类(CoClass)接口方法和属性,不能创建一个新的对象实例也不能可能从其他对象中获取实例对象只能定义接口,被子类继承OMD 中:2D 的灰色矩形表示抽象类,抽象类(没有阴影),普通类(Class),不能用于创建一个新的对象,即不能用new关键字来产生对象可以从其他对象中获取对象实例OMD 中:没有阴影的3D矩形,Dim pNewRow As IRowSet pNewRow=pTable.CreateRow,生 成,可以直接创建,用new关键字Dim pMap As IMapSet pMap=New Map也可以从其他对象中获取Dim pMap As IMapSet pMap=pMxDocument.FocusMapOMD 中:有阴影的3D矩形,组件类(CoClass),棒棒糖类型的图标(),类的接口,这些接口也是有效的。但是详细的属性和方法必须在其它地方浏览。(e.g.,Object Browser).,该接口被本类使用.所有的属性和放都列表在类图中.,继承接口是有效的,接口中属性与方法,Property(属性)哑铃形状的图标(表示属性是否可获取,是否可写入)Method(方法),1)属性值的直接写入:(Ao中大多数属性的写入方式)属性直接获取值或者是对象的一个copy 不需要使用 Set关键字 2)属性值的引用写入:(Ao中部分属性的写入方式)属性值是为对象的引用值需要使用 Set关键字如果引用对象发生了变化,对象的属性将同步受到影像,属性写入方式,pLayer.Name=Port Moresby No Set keyword,Set pLayer.FeatureClass=pMoresbyData Must use Set!,1)返回属性值Name:String 2)返回属性值的引用Document:IDocumentStatusBar:IStatusBar,属性获取方式,返回一个值Dim strName As String Dim pDoc As IDocumentDim pBar As IStatusBarstrName=Application.NameMsgBox strName返回一个引用Set pDoc=Application.DocumentSet pBar=Application.StatusBar pBar.Message(0)pDoc.Title,FeatureLayer on Map Layer OMD,概念上,这是一个对象模型事实上,被分别在几张图表里存放虫洞表现了图表与图表间的连接关系,虫洞(Wormholes),Element on ArcMap OMD,虫洞,2.6 ArcEngine软件安装说明,安装 argengine9.2 Runtime,Developer Kit Lience的许可文件:ArcEngineDKit.ecp无时间限制designer,92,ecp.arcgis.engine,none,WEJ7LNA3D187XH46C097 standardengine,92,ecp.arcgis.engine,none,WELDC7PPE00LTJT46220 到31-jan-2010过期3dengine,92,ecp388002580,31-jan-2010,JFB450NHRHELCZM6D168 designer,92,ecp280035361,31-jan-2010,XXMA0RD7G9EL8PJ28188,2.7 ArcEngine在VB 或.net环境中的应用实例,在VB环境下1、打开VB运行程序,创建一个项目 2、引用ArcEngine中的库3、添加ArcEngine中的组件MapControl,ToolBarControlTocControl其以图标方式增加到工具栏,4、将MapControl控件,ToolBarControl,TocControl拖到Form窗体,修改属性,加载数据 5.添加代码,应用ArcEngine中库的对象,直接调用方法、属性。6、点击运行,即可,2.7 ArcEngine在VB 或.net环境中的应用实例,在VB.net环境下1、打开.net 运行程序,创建一个项目 2、引用ArcEngine中的库3、添加ArcEngine中的组件MapControl,ToolBarControlTocControl其以图标方式增加到工具栏,4、将MapControl控件,ToolBarControl,TocControl拖到Form窗体,修改属性,加载数据5.添加代码,应用ArcEngine中库的对象,调用方法、属性。需要在代码头添加“Imports 库名”,如:Imports esriCarto6、点击运行,即可,2.7 VB 与VB.net语法差异,Set关键字 VB.net:pFeatureLayer=pMap.Layer(0)VB:Set pFeatureLayer=pMap.Layer(0)C#:pFeatureLayer=pMap.get_Layer(0);函数返回语句 Function CreateTable()as ITablereturn pTable/VB.net 的返回方式 CreateTable=pTable/VB中 的返回方式 End function New 语句,取消引用对象 外部语法的表示方式一样,但内部VB 与VB.net 的实现机制不一样,2.8 ArcGIS的二次开发VBA,VBA(VisualBasic for Application),是嵌在arcGIS程序中的一种工业化开发工具。Application 和ThisDocument是VBA环境中的两个全局变量利用VBA可以快速定制和扩展ArcGIS,向ArcGIS中添加工具栏、按钮等,扩展其功能。,实例:MxDocument Map layer,Dim pMxDoc As IMxDocumentSet pMxDoc=ThisDocumentDim pMap As IMapSet pMap=pMxDoc.FocusMapDim pLayer As ILayerSet pLayer=pMap.Layer(1)Is pLayer a FeatureLayer?If TypeOf pLayer Is IFeatureLayer ThenMsgBox Yes!,its a feature layerEnd If,MxDocument,Map,FeatureLayer,Layer,*,*,Others,总结,ArcGIS整体架构ArcEngine与ArcObject的关系与区别ArcEngine的体系结构对象组件模型COM如何阅读OMDArcEngine软件安装说明ArcEngine在VB 或.net环境中的应用实例ArcGIS的二次开发VBA,课后要求,预习P25-30,VBA开发环境,进行上机操作预习课本 第二章 用户界面定制VBA开发,