GIS二次开发:第二部分 ArcEngine的基本原理—— 对象组件模型(COM)_第1页
GIS二次开发:第二部分 ArcEngine的基本原理—— 对象组件模型(COM)_第2页
GIS二次开发:第二部分 ArcEngine的基本原理—— 对象组件模型(COM)_第3页
GIS二次开发:第二部分 ArcEngine的基本原理—— 对象组件模型(COM)_第4页
GIS二次开发:第二部分 ArcEngine的基本原理—— 对象组件模型(COM)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、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 如何阅读OMD ArcEngine软件安装说明 ArcEngine在VB 或.net环境中的应用实例 ArcGIS的二次开发VBA,2.1 ArcGIS 整体架构,ArcGIS D

2、esktop,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,.NET ADF,Java ADF,C+,ArcObjects,Cust

3、omization,XML+,VBScript,ArcPad Application Builder,JavaScript HTML/DHTML,XML .NET,Services,JSP Java,ActiveX (ASP) ColdFusion,2.1 ArcGIS 整体架构,ArcGIS Desktop:一套集成的高级GIS产品(ArcReader,ArcView,ArcEditor,ArcInfo,ArcGIS扩展模块等); ArcGIS Engine:嵌入式GIS组件库,可使用C+, COM,.NET和Java来构建自定义的、面向行业的应用软件; ArcGIS Server:GIS软

4、件对象的共享库,用于构建企业和网络计算框架内的应用软件。它使用.NET/ASP和Java/JSP来构建基于SOAP的网络服务和网络应用程序; ArcIMS:GIS网络服务,通过开放的因特网协议发布地图、数据和元数据; ArcSDE:在大量的数据库管理系统(DBMSs)中进行地理数据管理的界面。,2.1 ArcGIS 整体架构,所有产品共享ArcObjects Engine包括核心 ArcObjects的功能,ArcGIS Desktop,ArcGIS Engine,ArcGIS Server,2.2 ArcObjects与ArcEngine的联系与区别,联系: ArcEngine包括核心 Ar

5、cObjects的功能,其是对AO中的大部分接口、类、库进行封装所构成嵌入式组件。 Ae中的组件接口、方法、属性与Ao是相同的。 区别: 开发环境: ArcObjects必须依赖与ArcGIS Desktop桌面平台,即购买安装了ArcGIS Desktop的同时,安装ArcObjects,才能利用AO进行开发。 ArcEngine是独立的嵌入式组件,不依赖ArcGIS Desktop桌面平台,直接安装ArcEngine runtime 和Developer Kit后,即可利用其在不同开发语言环境下开发 功能: Ao的功能更强大,Ae的功能相对弱些,Ae 不具备Ao的少部分功能 可以理解为Ar

6、cEngine为嵌入式的ArcObjects,其具有简洁,灵活,易用,可移植性强的特点。,2.3 ArcGIS Engine 体系结构,P16-19 ( AO书) P3-4 (AE书),ArcEngine 具有哪些功能?,基础服务 核心函数, 几何操作 数据存取 可以访问栅格数据和矢量数据 地图分析 高级空间分析和SQL 访问 地图表达 标注, 符号化, 专题图 开发组件 Developer kit, mapping 和 3D 控件, toolbar, TOC,ArcGIS Engine,ArcGIS Engine功能,显示具有多个地图图层(如公路,河流和边界)的地图。 漫游与缩放地图。 通过

7、单击来识别地图上的要素。 搜索地图上的要素。 显示字段值的文本标注。 绘制来自于航空照片或卫星影像的图像。 绘制图形要素(如点、线、圆以及多边形)。 绘制描述性文本。 沿线或在方框、区域、多边形及圆内选择要素。 在其它元素的特定距离内选择要素。 使用SQL表达式查找并选择要素。 使用主题方法为要素着色(如值映射图、分类图和点密度图)。 动态显示即时或时间序列数据。 根据提供的街道地址或交点在地图上查找位置。 转换地图数据的坐标系统。 执行形状的几何操作,来创建缓冲区;计算差值;或查找形状的交集,联合或反转交集。 操作形状或旋转地图。 创建和更新几何特征及其属性。 交互操作个人地理数据库与主地理

8、数据库。 ArcGIS Engine非常适合于构建高级GIS应用软件的基础制图。,ArcGIS Engine 产品和扩展,ArcGIS Engine Runtime 运行所有的ArcEngine应用程序都必需的 安装在客户机的终端 不同的 runtime 许可是可选择的 ArcGIS Engine Developer Kit 为开发者而设计 包括所有库和开发资源 所有选项都是已经激活 许可通过软件授权,ArcGIS Engine Developer Kit是什么?,一个可嵌入式的 GIS 组件用来创建客户应用程序 容易设计、配置、开发 可扩展 可展开 可分发 是面向开发者的产品,而不是最终用户

9、,ArcEngine能创建哪种类型的应用程序?,可以创建任何类型的独立的GIS应用程序 例如:独立,嵌入式的以及交叉平台的。 可视 Mapping, drawing, selecting, editing, 不可视 Utility, updating, ,Component (Map.dll),Client ArcMap,2.4 COM,连接一个软件模型和另一个软件模型的一种协议 独立的一种语言 二进制规范 运用界面或组件来开发、配置程序模型 客户端调用服务器并且服务给予响应 所有通讯是通过接口进行的,2.4 COM 类,COM类执行接口 所有类执行 IUnknown 管理所有对象的产生、终结

10、 成员: QueryInterface, AddRef 和 Release Coclasses 是可创建的,Public Sub mapName() Dim pMap As IMap 你能通过一个接口来创建一个实例 Set pMap = New Map End Sub,IUnknown,COM 类与接口,类对象拥有一个或多个接口 接口是定义了一组方法和属性的逻辑关系 与对象的通信是通过接口来进行的,2.4 COM 接口,定义一组逻辑的方法和属性 从 IUnknown (default)继承 ArcObjects 支持 客户化接口 通过 QueryInterface (QI)访问接口,Publi

11、c Sub mapName() Dim pMap As IMap Set pMap = New Map 通过定义的pMap你可以有权使用其的properties and methods MsgBox pMap.Name End Sub,2.4 COM 外部连接的一些接口,提供跟客户端来进行交换的一些事件的途径 通过连接对象并接收它外部接口 许多不同的事件在ArcEngine都可用 例如: document load events, map drawing events, editing events, ,Private WithEvents MxDocEvents As MxDocument

12、Private Sub setNewValues() . . . Set MxDocEvents = pMxDoc.FocusMap Now can access events End Sub Private Function MxDocument_NewDocument() As Boolean MsgBox New ArcMap document End Function,2.4 ArcEngine和COM API(应用编程接口),所有ArcEngine COM 类型都已在类型库里定义好 并且类型库是通过二进制文件来进行描述 类: CLSIDs 和ProgIDs 接口: IIDs 常量和列

13、举 执行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,即所

14、谓的查询接口。它是一个COM对象的多个接口之间相互转换的方法。 缺省接口,每个COM对象一个缺省接口,通常为IUnknown,2.4 学习ArcEngine需要了解的COM内容(2),每个组件都有一个独一无二的表示: GUID,组件的身份证。接口的GUID称为IID,而组件类的GUID为CLSID 一个COM对象可以分为多个接口,一个接口可被多个COM对象实现 接口分为两种:内向接口(属性、方法)和外向接口(事件) COM组件必须被注册后才能使用 COM对象可在开发过程中不断扩充、添加新的接口。如:ILayer2 COM对象编译为DLL和EXE进行传播,2.4 其他,类型库中包含了所有COM类

15、 每个类型都有全球唯一标识 (GUID) 比如: CLSID, IID, Progid, 使用esriSystem.UID就可以代表一个对象GUID 详细描述CLSID或ProgID (ProjectName.ClassName),Dim u As New UID u.Value = 4FDD8858-DF31-4D6B-8679-1FED633262DA CLSID of ControlsMapRotateTool Dim u As New UID u.Value = esriControlCommands.ControlsMapRotateTool“ ProgID of ControlsM

16、apRotateTool,Dim command As ICommand command = 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 对象模型图) 阅读一个对象的模型图 类的类型 类的相互关系 接口、属性、方法的图标

17、,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,*,类和他们相应的对象,

18、AO 对象中关系符号的实例应用,MxDocument,Map,Layer,*,*,FeatureLayer,Application,OMD 中的类与对象,抽象类(Abstract Class) 普通类(Class) 组件类(CoClass) 接口 方法和属性,不能创建一个新的对象实例 也不能可能从其他对象中获取实例对象 只能定义接口,被子类继承 OMD 中: 2D 的灰色矩形表示抽象类,抽象类(没有阴影),普通类 (Class),不能用于创建一个新的对象,即不能用new关键字来产生对象 可以从其他对象中获取对象实例 OMD 中: 没有阴影的3D矩形,Dim pNewRow As IRow Se

19、t pNewRow = pTable.CreateRow,生 成,可以直接创建,用new关键字 Dim pMap As IMap Set pMap = New Map 也可以从其他对象中获取 Dim pMap As IMap Set pMap = pMxDocument.FocusMap OMD 中:有阴影的3D矩形,组件类 (CoClass),棒棒糖类型的图标 ( ),类的接口,这些接口也是有效的。但是详细的 属性和方法必须在其它地方浏览。 (e.g., Object Browser).,该接口被本类使用. 所有的属性和放都列表在类图中.,继承接口是有效的,接口中属性与方法,Property

20、(属性) 哑铃形状的图标(表示属性是否可获取,是否可写入) 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

21、 2)返回属性值的引用 Document: IDocument StatusBar: IStatusBar,属性获取方式,返回一个值 Dim strName As String Dim pDoc As IDocument Dim pBar As IStatusBar strName = Application.Name MsgBox strName 返回一个引用 Set pDoc = Application.Document Set pBar = Application.StatusBar pBar.Message(0) pDoc.Title,FeatureLayer on Map Layer

22、 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,WELDC7PPE00LTJT4

23、6220 到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,ToolBarControl TocControl其以图标方式增加到工具栏, 4、将MapControl控件, ToolBa

24、rControl, TocControl拖到Form窗体,修改属性,加载数据 5. 添加代码,应用ArcEngine中库的对象,直接调用方法、属性。 6、点击运行,即可,2.7 ArcEngine在VB 或.net环境中的应用实例,在VB.net环境下 1、打开.net 运行程序,创建一个项目 2、引用ArcEngine中的库 3、添加ArcEngine中的组件MapControl,ToolBarControl TocControl其以图标方式增加到工具栏, 4、将MapControl控件, ToolBarControl, TocControl拖到Form窗体,修改属性,加载数据 5. 添加代码,应用ArcEngine中库的对象,调用方法、属性。 需要在代码头添加“ Imports 库名”,如:Imports esriCarto Using ESRI.ArcGIS.Carto; 6、点击运行,即可,2.7 VB 与VB.net语法差异,Set关键字 VB.net : pFeatureLayer =pMap.Layer(0) VB: Set pFeatureLayer =pMap.Layer(0) C#: pFeatureLayer = pMap.get_Layer(0);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论