arcengine的基本原理对象组件模型.ppt
Copyright 2004 ESRI.All rights reserved.Developing Applications with ArcGIS EngineArcEngine 基本原理基本原理组件对象模型组件对象模型上一课上一课 内容复习提要内容复习提要uu1.1 1.1 地理信息系统定义、类型和构成地理信息系统定义、类型和构成地理信息系统定义、类型和构成地理信息系统定义、类型和构成uu1.2 1.2 地理信息系统的研究内容地理信息系统的研究内容地理信息系统的研究内容地理信息系统的研究内容uu1.3 1.3 地理信息系统的功能地理信息系统的功能地理信息系统的功能地理信息系统的功能uu1.4 GIS1.4 GIS软件的发展与技术软件的发展与技术软件的发展与技术软件的发展与技术uu1.5 GIS1.5 GIS软件的开发模式软件的开发模式软件的开发模式软件的开发模式uu1.6 GIS1.6 GIS软件的开发内容软件的开发内容软件的开发内容软件的开发内容uu1.7 GIS1.7 GIS软件开发的相关技术软件开发的相关技术软件开发的相关技术软件开发的相关技术课程课程2uArcGIS整体架构整体架构uArcEngine与与ArcObject的关系与区别的关系与区别uArcEngine的体系结构的体系结构u对象组件模型对象组件模型COMu如何阅读如何阅读OMDuArcEngine软件安装说明软件安装说明uArcEngine在在VB 或或.net环境中的应用实例环境中的应用实例uArcGIS的二次开发的二次开发VBA2.1 ArcGIS 整体架构整体架构ArcGIS DesktopArcGIS ServerArcIMSArcGIS Mobile ArcPadArcGIS Engine桌面桌面 GIS嵌入式嵌入式 GIS服务器服务器 GIS移动移动 GISGeodatabaseDBMSFile-basedXMLArcSDEArcEditorArcViewArcInfoEngine Developer KitServer Developer KitCustomizationDesktop Developer Kit.NET C+VB Java.NET VC+VB.NETADFJavaADFC+ArcObjectsCustomizationXML+VBScriptArcPad Application BuilderJavaScriptHTML/DHTMLXML.NETServicesJSPJavaActiveX(ASP)ColdFusion2.1 ArcGIS 整体架构整体架构uArcGIS Desktop:一套集成的高级:一套集成的高级GIS产品(产品(ArcReader,ArcView,ArcEditor,ArcInfo,ArcGIS扩展模块等);扩展模块等);uArcGIS Engine:嵌入式:嵌入式GIS组件库,可使用组件库,可使用C+,COM,.NET和和Java来构建自定义的、面向行业的应用软件;来构建自定义的、面向行业的应用软件;uArcGIS Server:GIS软件对象的共享库,用于构建企业和网软件对象的共享库,用于构建企业和网络计算框架内的应用软件。它使用络计算框架内的应用软件。它使用.NET/ASP和和Java/JSP来来构建基于构建基于SOAP的网络服务和网络应用程序;的网络服务和网络应用程序;uArcIMS:GIS网络服务,通过开放的因特网协议发布地图、网络服务,通过开放的因特网协议发布地图、数据和元数据;数据和元数据;uArcSDE:在大量的数据库管理系统(:在大量的数据库管理系统(DBMSs)中进行地理)中进行地理数据管理的界面。数据管理的界面。2.1 ArcGIS 整体架构整体架构u所有产品共享所有产品共享ArcObjectsuEngine包括核心包括核心 ArcObjects的功能的功能ArcGIS DesktopArcGIS EngineArcGIS Server2.2 ArcObjects与与ArcEngine的联系与区别的联系与区别联系:联系:uArcEngine包括核心包括核心 ArcObjects的功能,其是对的功能,其是对AO中的大部分接口、类、库进行中的大部分接口、类、库进行封装所构成嵌入式组件。封装所构成嵌入式组件。uAe中的组件接口、方法、属性与中的组件接口、方法、属性与Ao是相同的。是相同的。区别:区别:开发环境:开发环境:u ArcObjects必须依赖与必须依赖与ArcGIS Desktop桌面平台,即购买安装了桌面平台,即购买安装了ArcGIS Desktop的同时,安装的同时,安装ArcObjects,才能利用,才能利用AO进行开发。进行开发。uArcEngine是独立的嵌入式组件,不依赖是独立的嵌入式组件,不依赖ArcGIS Desktop桌面平台,直接安装桌面平台,直接安装ArcEngine runtime 和和Developer Kit后,即可利用其在不同开发语言环境下开发后,即可利用其在不同开发语言环境下开发 功能功能:Ao的功能更强大,的功能更强大,Ae的功能相对弱些,的功能相对弱些,Ae 不具备不具备Ao的少部分功能的少部分功能 可以理解为可以理解为ArcEngine为嵌入式的为嵌入式的ArcObjects,其具有简洁,灵活,易用,可移,其具有简洁,灵活,易用,可移植性强的特点。植性强的特点。2.3 ArcGIS Engine 体系结构体系结构P1619ArcEngine 具有哪些功能具有哪些功能?u基础服务基础服务u核心函数核心函数,几何操作几何操作u数据存取数据存取u可以访问栅格数据和矢量数据可以访问栅格数据和矢量数据u地图分析地图分析u高级空间分析和高级空间分析和SQL 访问访问u地图表达地图表达u标注标注,符号化符号化,专题图专题图u开发组件开发组件uDeveloper kit,mapping 和和 3D 控件控件,toolbar,TOCArcGIS EngineArcGIS Engine功能功能u显示具有多个地图图层(如公路,河流和边界)的地图。显示具有多个地图图层(如公路,河流和边界)的地图。u漫游与缩放地图。漫游与缩放地图。u通过单击来识别地图上的要素。通过单击来识别地图上的要素。u搜索地图上的要素。搜索地图上的要素。u显示字段值的文本标注。显示字段值的文本标注。u绘制来自于航空照片或卫星影像的图像。绘制来自于航空照片或卫星影像的图像。u绘制图形要素(如点、线、圆以及多边形)。绘制图形要素(如点、线、圆以及多边形)。u绘制描述性文本。绘制描述性文本。u沿线或在方框、区域、多边形及圆内选择要素。沿线或在方框、区域、多边形及圆内选择要素。u在其它元素的特定距离内选择要素。在其它元素的特定距离内选择要素。u使用使用SQL表达式查找并选择要素。表达式查找并选择要素。u使用主题方法为要素着色(如值映射图、分类图和点密度图)。使用主题方法为要素着色(如值映射图、分类图和点密度图)。u动态显示即时或时间序列数据。动态显示即时或时间序列数据。u根据提供的街道地址或交点在地图上查找位置。根据提供的街道地址或交点在地图上查找位置。u转换地图数据的坐标系统。转换地图数据的坐标系统。u执行形状的几何操作,来创建缓冲区;计算差值;或查找形状的交集,联合或反转交集。执行形状的几何操作,来创建缓冲区;计算差值;或查找形状的交集,联合或反转交集。u操作形状或旋转地图。操作形状或旋转地图。u创建和更新几何特征及其属性。创建和更新几何特征及其属性。u交互操作个人地理数据库与主地理数据库。交互操作个人地理数据库与主地理数据库。uArcGIS Engine非常适合于构建高级非常适合于构建高级GIS应用软件的基础制图。应用软件的基础制图。ArcGIS Engine 产品和扩展产品和扩展uArcGIS Engine Runtime u运行所有的运行所有的ArcEngine应用程序都必需的应用程序都必需的u安装在客户机的终端安装在客户机的终端 u不同的不同的 runtime 许可是可选择的许可是可选择的uArcGIS Engine Developer Kitu为开发者而设计为开发者而设计u包括所有库和开发资源包括所有库和开发资源u所有选项都是已经激活所有选项都是已经激活 u许可通过软件授权许可通过软件授权ArcGIS Engine Developer Kit是什么是什么?u一个可嵌入式的一个可嵌入式的 GIS 组件用来创建客户应用程序组件用来创建客户应用程序u容易设计、配置、开发容易设计、配置、开发 u可扩展可扩展u可展开可展开u可分发可分发u是面向开发者的产品,而不是最终用户是面向开发者的产品,而不是最终用户ArcEngine能创建哪种类型的应用程序能创建哪种类型的应用程序?u可以创建任何类型的独立的可以创建任何类型的独立的GIS应用程序应用程序u例如:独立,嵌入式的以及交叉平台的。例如:独立,嵌入式的以及交叉平台的。u可视可视 uMapping,drawing,selecting,editing,u不可视不可视 uUtility,updating,2.4 COMu连接一个软件模型和另一个软件模型的一种协议连接一个软件模型和另一个软件模型的一种协议u独立的一种语言独立的一种语言 u二进制规范二进制规范u运用界面或组件来开发、配置程序模型运用界面或组件来开发、配置程序模型u客户端调用服务器并且服务给予响应客户端调用服务器并且服务给予响应u所有通讯是通过接口进行的所有通讯是通过接口进行的2.4 COM 类类uCOM类执行接口类执行接口u所有类执行所有类执行 IUnknownu管理所有对象的产生、终结管理所有对象的产生、终结u成员成员:QueryInterface,AddRef 和和 ReleaseuCoclasses 是可创建的是可创建的Public Sub mapName()Dim pMap As IMap 你能通过一个接口来创建一个实例你能通过一个接口来创建一个实例 Set pMap=New MapEnd SubIUnknownCOM 类与接口类与接口u类对象拥有一个或多个接口类对象拥有一个或多个接口 u接口是定义了一组方法和属性的逻辑关系接口是定义了一组方法和属性的逻辑关系u与对象的通信是通过接口来进行的与对象的通信是通过接口来进行的 RaceCarAccelerateBrakeFuel停靠站停靠站圈速度圈速度IRaceIDrive垃圾车垃圾车加速加速刹车刹车燃料燃料拾起拾起倾倒倾倒IGarbageIDrive2.4 COM 接口接口u定义一组逻辑的方法和属性定义一组逻辑的方法和属性u从从 IUnknown(default)继承继承uArcObjects 支持支持u客户化接口客户化接口u通过通过 QueryInterface(QI)访问接口访问接口Public Sub mapName()Dim pMap As IMap Set pMap=New Map 通过定义的通过定义的pMap你可以有权使用其的你可以有权使用其的properties and methods MsgBox pMap.NameEnd Sub2.4 COM 外部连接的一些接口外部连接的一些接口u提供跟客户端来进行交换的一些事件的途径提供跟客户端来进行交换的一些事件的途径u通过连接对象并接收它外部接口通过连接对象并接收它外部接口u许多不同的事件在许多不同的事件在ArcEngine都可用都可用u例如例如: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 Function2.4 ArcEngine和和COM API(应用编程接口)应用编程接口)u所有所有ArcEngine COM 类型都已在类型库里定义好类型都已在类型库里定义好u并且类型库是通过二进制文件来进行描述并且类型库是通过二进制文件来进行描述u类类:CLSIDs 和和ProgIDsu接口:接口:IIDsu常量和列举常量和列举u执行执行DLL和和 EXE文件文件u开发工具开发工具uArcGIS Developer Help(VB6 or VC+)uLibraryLocator,EOBrowser and OleView*ArcObjects C+*.dll files*COM Type Libraries*.olb files2.4 学习学习ArcEngine需要了解的需要了解的COM内容(内容(1)1.COM不是接口,也不是类,它是一种二进制级别的组件通信不是接口,也不是类,它是一种二进制级别的组件通信标准标准2.符合符合COM标准的对象称为标准的对象称为COM对象,对象,COM对象是实现了很对象是实现了很多接口的对象,它可以多接口的对象,它可以DLL或者或者EXE文件形式存在文件形式存在3.COM对象必须实现对象必须实现IUnknown,它负责管理对象的生命周期它负责管理对象的生命周期4.QI,即所谓的查询接口。它是一个,即所谓的查询接口。它是一个COM对象的多个接口之间对象的多个接口之间相互转换的方法。相互转换的方法。5.缺省接口,每个缺省接口,每个COM对象一个缺省接口,通常为对象一个缺省接口,通常为IUnknown2.4 学习学习ArcEngine需要了解的需要了解的COM内容(内容(2)6.每个组件都有一个独一无二的表示每个组件都有一个独一无二的表示:GUID,组件的身份证。接,组件的身份证。接口的口的GUID称为称为IID,而组件类的,而组件类的GUID为为CLSID7.一个一个COM对象可以分为多个接口,一个接口可被多个对象可以分为多个接口,一个接口可被多个COM对对象实现象实现8.接口分为两种:内向接口(属性、方法)和外向接口(事件)接口分为两种:内向接口(属性、方法)和外向接口(事件)9.COM组件必须被注册后才能使用组件必须被注册后才能使用10.COM对象可在开发过程中不断扩充、添加新的接口。如:对象可在开发过程中不断扩充、添加新的接口。如:ILayer211.COM对象编译为对象编译为DLL和和EXE进行传播进行传播2.4 其他其他u类型库中包含了所有类型库中包含了所有COM类类u每个类型都有全球唯一标识每个类型都有全球唯一标识(GUID)u比如:比如:CLSID,IID,Progid,u使用使用esriSystem.UID就可以代表一个对象就可以代表一个对象GUIDu详细描述详细描述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 ControlsMapRotateToolDim command As ICommandcommand=AxToolbarControl1.CommandPool.FindByUID(u)If Not command Is Nothing Then MsgBox(command.Name)End If2.4 COM的优越性的优越性u使得编程技术难度和工作量降低,降低开发周期和成本使得编程技术难度和工作量降低,降低开发周期和成本u使得软件的复用性得到提高使得软件的复用性得到提高u语言独立,可以使用任何一种语言编写语言独立,可以使用任何一种语言编写COM组件组件2.5 如何阅读如何阅读OMDuOMD(Object Model Diagram 对象模型图)对象模型图)u阅读一个对象的模型图阅读一个对象的模型图u类的类型类的类型u类的相互关系类的相互关系u接口、属性、方法的图标接口、属性、方法的图标 uOMD帮助编写代码帮助编写代码uOMD 中展示每个类的接口,方法,属性中展示每个类的接口,方法,属性uOMD中展示各类之间的相互关联关系中展示各类之间的相互关联关系uAO在几个图表中拥有超过在几个图表中拥有超过 1,500 个类个类u超过超过 1,600 个接口个接口 ArcObject 的的OMD在哪里可以找到在哪里可以找到ArcGIS OMD图表图表uStart Programs ArcGIS Developer Helpu简单的、详细的类图简单的、详细的类图uPDF filesu电子书籍光盘中电子书籍光盘中u软件安装的目录中软件安装的目录中关系符号的含义关系符号的含义u继承继承u组成组成u用来创建用来创建u对应关系对应关系 1:Nu关联关联*_蛋蛋鸟鸟翅膀翅膀羽毛羽毛2AbstractClassClassClass燕子燕子CoClass巢巢CoClass*u类和他们相应的对象类和他们相应的对象AO 对象中关系符号的实例应用对象中关系符号的实例应用MxDocumentMapLayer*FeatureLayerApplicationOMD 中的类与对象中的类与对象u抽象类(抽象类(Abstract Class)u普通类(普通类(Class)u组件类(组件类(CoClass)u接口接口u方法和属性方法和属性u不能创建一个新的对象实例不能创建一个新的对象实例u也不能可能从其他对象中获取实例对象也不能可能从其他对象中获取实例对象u只能定义接口,被子类继承只能定义接口,被子类继承uOMD 中中:2D 的灰色矩形的灰色矩形表示抽象类表示抽象类抽象类(没有阴影)抽象类(没有阴影)普通类普通类(Class)u不能用于创建一个新的对象,即不能用不能用于创建一个新的对象,即不能用new关键字来产生对象关键字来产生对象u可以从其他对象中获取对象实例可以从其他对象中获取对象实例uOMD 中中:没有阴影的没有阴影的3D矩形矩形Dim pNewRow As IRowSet pNewRow=pTable.CreateRow生生 成成u可以直接创建,用可以直接创建,用new关键字关键字Dim pMap As IMapSet pMap=New Mapu也可以从其他对象中获取也可以从其他对象中获取Dim pMap As IMapSet pMap=pMxDocument.FocusMapuOMD 中中:有阴影的有阴影的3D矩形矩形组件类组件类(CoClass)u棒棒糖类型的图标棒棒糖类型的图标()类的接口类的接口这些接口也是有效的。但是详细的这些接口也是有效的。但是详细的属性和方法必须在其它地方浏览。属性和方法必须在其它地方浏览。(e.g.,Object Browser).该接口被本类使用该接口被本类使用.所有的属性和放都列表在类图中所有的属性和放都列表在类图中.继承接口是有效的继承接口是有效的接口中属性与方法接口中属性与方法uProperty(属性)(属性)u哑铃形状的图标哑铃形状的图标(表示属性是否可获取,是否可写入表示属性是否可获取,是否可写入)uMethod(方法)(方法)Property Get(read)Property Set(write)1)属性值的直接写入)属性值的直接写入:(Ao中大多数属性的写入方式)中大多数属性的写入方式)u属性直接获取值或者是对象的一个属性直接获取值或者是对象的一个copy u不需要使用不需要使用 Set关键字关键字 2)属性值的引用写入)属性值的引用写入:(Ao中部分属性的写入方式)中部分属性的写入方式)u属性值是为对象的引用值属性值是为对象的引用值u需要使用需要使用 Set关键字关键字u如果引用对象发生了变化,对象的属性将同步受到影像如果引用对象发生了变化,对象的属性将同步受到影像属性写入方式属性写入方式pLayer.Name=Port Moresby No Set keywordSet pLayer.FeatureClass=pMoresbyData Must use Set!1)返回属性值)返回属性值uName:String 2)返回属性值的引用)返回属性值的引用uDocument:IDocumentuStatusBar: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.TitleFeatureLayer on Map Layer OMDu概念上概念上,这是一个对象模型这是一个对象模型u事实上事实上,被分别在几张图表里存放被分别在几张图表里存放u虫洞表现了图表与图表间的连接关系虫洞表现了图表与图表间的连接关系虫洞(虫洞(Wormholes)Element on ArcMap OMD虫洞虫洞2.6 ArcEngine软件安装说明软件安装说明u安装安装 argengine9.2 Runtime,Developer Kit uLience的许可文件:的许可文件:ArcEngineDKit.ecpu无时间限制无时间限制udesigner,92,ecp.arcgis.engine,none,WEJ7LNA3D187XH46C097 ustandardengine,92,ecp.arcgis.engine,none,WELDC7PPE00LTJT46220 uu到到31-jan-2010过期过期u3dengine,92,ecp388002580,31-jan-2010,JFB450NHRHELCZM6D168 udesigner,92,ecp280035361,31-jan-2010,XXMA0RD7G9EL8PJ28188 u2.7 ArcEngine在在VB 或或.net环境中的应用实例环境中的应用实例u在在VB环境下环境下1、打开、打开VB运行程序,创建一个项目运行程序,创建一个项目 2、引用、引用ArcEngine中的库中的库3、添加、添加ArcEngine中的组件中的组件MapControl,ToolBarControlTocControl其以图标方式增加到工具栏,其以图标方式增加到工具栏,4、将、将MapControl控件控件,ToolBarControl,TocControl拖到拖到Form窗体,修窗体,修改属性,加载数据改属性,加载数据 5.添加代码,应用添加代码,应用ArcEngine中库的对象,直接调用方法、属性。中库的对象,直接调用方法、属性。6、点击运行,即可、点击运行,即可 2.7 ArcEngine在在VB 或或.net环境中的应用实例环境中的应用实例u在在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语法差异语法差异uSet关键字关键字 VB.net :pFeatureLayer=pMap.Layer(0)VB:Set pFeatureLayer=pMap.Layer(0)C#:pFeatureLayer=pMap.get_Layer(0);u函数返回语句函数返回语句 Function CreateTable()as ITablereturn pTable /VB.net 的返回方式的返回方式 CreateTable=pTable/VB中中 的返回方式的返回方式 End functionu New 语句,取消引用对象语句,取消引用对象 外部语法的表示方式一样,但内部外部语法的表示方式一样,但内部VB 与与VB.net 的实现机制不一样的实现机制不一样 2.8 ArcGIS的二次开发的二次开发VBAuVBA(VisualBasic for Application),是嵌在是嵌在arcGIS程序中程序中的一种工业化开发工具。的一种工业化开发工具。uApplication 和和ThisDocument是是VBA环境中的两个全局变量环境中的两个全局变量u利用利用VBA可以快速定制和扩展可以快速定制和扩展ArcGIS,向,向ArcGIS中添加工具中添加工具栏、按钮等,扩展其功能。栏、按钮等,扩展其功能。实例实例:MxDocument Map layerDim 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 IfMxDocumentMapFeatureLayerLayer*Others总结uArcGIS整体架构整体架构uArcEngine与与ArcObject的关系与区别的关系与区别uArcEngine的体系结构的体系结构u对象组件模型对象组件模型COMu如何阅读如何阅读OMDuArcEngine软件安装说明软件安装说明uArcEngine在在VB 或或.net环境中的应用实例环境中的应用实例uArcGIS的二次开发的二次开发VBA课后要求u预习预习P25-30,VBA开发环境,进行上机操作开发环境,进行上机操作u预习课本预习课本 第二章第二章 用户界面定制用户界面定制VBA开发开发