ArcGIS二次开发.docx

上传人:b****8 文档编号:11408657 上传时间:2023-02-28 格式:DOCX 页数:27 大小:1.40MB
下载 相关 举报
ArcGIS二次开发.docx_第1页
第1页 / 共27页
ArcGIS二次开发.docx_第2页
第2页 / 共27页
ArcGIS二次开发.docx_第3页
第3页 / 共27页
ArcGIS二次开发.docx_第4页
第4页 / 共27页
ArcGIS二次开发.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

ArcGIS二次开发.docx

《ArcGIS二次开发.docx》由会员分享,可在线阅读,更多相关《ArcGIS二次开发.docx(27页珍藏版)》请在冰豆网上搜索。

ArcGIS二次开发.docx

ArcGIS二次开发

第一章z开发基础

1.1组件对象模型

在明确讨论COM之前,有必要先一般性地思考一下软件组件使用的广泛性。

在软件组件背后有许多的驱使因素,但最基本的就是软件开发是个昂贵和耗时的风险行为。

在理想的世界里,假如曾经写了一段代码,然后通过不同的开发工具一次一次的反复使用它,这种情况是可能的,即便是在最初的开发者不能预见的环境下也能使用。

理想情况下,对最初开发者生成的函数功能的改变能在不需要目前用户改变和重编译他们的代码情况下实现。

早期重用代码块的尝试就是创建类库的进展,这些类库通常用C++开发。

早期的尝试有很多的限制,较为明显的是:

共享系统组件的困难(共享二进制C++组件是非常困难的——大部分的尝试是共享源代码);不重新编译就很难保存和更新C++组件的问题;缺乏好的建模语言和工具以及属性接口和定制工具。

为了解决这样那样的一些问题,许多软件工程师开始采用基于组件的方法进行系统开发。

一个软件组件就是一个可重用代码的二进制单元。

已经出现了几个不同但相互重叠的开发和共享组件标准。

微软的COM已成为建立交互式桌面应用程序事实上的标准。

在互联网上,JavaBean是可行的技术。

对象管理组(OMG)制定了粗粒度层次上适用于应用程序互操作的公用对象请求代理架构(CORBA)。

为了理解COM(以及所有基于COM的技术),认识到其不是一种面向对象语言而是一个协议或标准是非常重要的。

COM不仅仅是一种技术,还是软件开发的一种方法论。

COM定义了一种连接软件组件或模型的协议。

通过使用这种协议,可以建立能在分布式系统中动态交互的可重用软件组件。

COM还定义了一种称作基于接口的编程模式。

对象封装了能体现定义良好的接口后每个实例化对象特征的操作方法和数据。

这增强了系统开发的结构化和安全性,因为一个对象的客户并不知道某个特定方法如何实现的任何细节。

COM不规定应如何构建一个应用程序。

语言、结构和实现细节都由使用COM的应用程序开发人员决定。

COM的确规定了一个对象模型和使COM对象能与其他COM对象交互的编程需求。

这些对象可以位于单个过程中,在不同的过程中,或者甚至在远程机器上。

它们可以用其他语言编写,也可以用完全不同的方式开发。

这就是COM被认为是二进制规范或标准的原因—它是一个在程序被编译为二进制机器代码后才应用的标准。

COM允许对象在二进制水平上重用,意味着第三方开发者即使从最底层扩展系统也不需要访问这些对象的源代码、头文件或对象库。

组件、对象、客户和服务器

不同的文件中组件(components)、对象(objects)、客户(clients)和服务器(servers)表示不同的意思(各种文件用这些术语指代相同的事物,使得术语使用更加混乱)。

因此,定义这本书所要使用的术语是非常有必要的。

COM是一种客户/服务器(C/S)架构。

服务器(或对象)提供某种功能,而客户使用这种功能。

COM使客户和对象之间的交流变得简单。

一个对象可以同时是一个客户的服务器和其他对象服务的客户。

客户及其服务器可以存在于同一个进程中或不同的进程中。

入进程服务被打包成动态链接库(DLL)格式,当客户第一次访问这些服务时会加载这些DLL到客户的地址空间中。

出进程服务被编译为可执行文件并在它们自己的地址空间中运行。

COM这种差异对客户透明。

在创建COM对象时,开发者必须了解对象驻留在什么类型的服务器中,但如果对象的创建者正确地实现了它们,打包并不会影响客户对对象的使用。

这两种对称相反的打包方法各有优缺点。

DLLs能更快速的装载到内存中,且调用一个DLL函数速度较快。

另一方面,EXEs(可执行文件)能够提供更健壮的解决方案(如果服务器失败,客户端不会崩溃),同时安全性能更好,因为服务器有其自己的安全保障。

在一个分布式系统中,EXEs更灵活,即使服务器与客户端有不同的字节顺序也不会有什么问题。

大多数ArcObjects服务被打包为入进程服务(DLLs)。

稍后,用户将看到使用入进程服务的性能优势。

在一个COM系统中,客户端或功能的使用者与功能的提供者,对象完全相分离。

客户端需要知道所有知识就是可用的功能;有了这些知识,客户端就可以调用对象中的方法并期望对象作出响应。

这样,COM可以认为是客户端和服务器之间的一种协议。

如果对象违反了这种协议,那么系统的行为就不能预知。

这样,COM开发是基于功能实现者和功能使用者间相互信任基础上的。

在ArcGIS应用程序中,许多对象通过其接口提供了几千个属性和方法。

当使用ESRI对象库时,可以假定所有这些属性和方法是完全实现了的,如果它们列在对象图中,就可以使用它们。

COM类和接口(COMCLASSESANDINTERFACES)

使用COM开发就意味着用接口开发,即所谓的基于接口的编程模式。

对象间的所有通信都是通过其接口实现的。

COM接口是抽象的,意味着没有与接口相关联的实现;与接口关联的代码都来自类的实现。

接口规定了对选择用于实现接口的对象可以作什么请求。

接口的实现方法随对象不同而不同。

这样对象继承了接口类型而不是接口的实现,这称为类型继承。

功能用接口来抽象模拟并在类的实现中实现。

类和接口通常被称为COM的“什么”和“怎么”。

接口定义对象能做什么,而类定义怎么做。

COM类提供了一个或多个接口的代码,从而在类中完全封装了其功能。

两个类可以具有相同的接口,但它们实现这些接口的方法可能完全不同。

通过这种方式实现接口,COM展示了经典的面向对象的多态行为。

COM不支持多重继承概念,但由于单个类能实现多个接口,所以这不是一个缺陷。

关于多态行为可以看左边的模型图。

ArcObjects中开发者必须理解的类有三种类型:

抽象类(abstractClasses)、组件对象类(coclasses)和类(classes)。

抽象类不能创建对象,只是对其子类的实例化进行了规定(通过类型继承)。

ArcObjects的Dataset或Geometry类就是抽象类的例子。

不能创建Geometry类型的对象,但可以创建Polyline类型的对象。

Polyline对象实现了在Geometry基类中定义的接口,因此在基于对象类中定义的任何接口都可以从组件对象类访问。

组件对象类是公开可创建类。

换言之,COM可以创建组件对象类的实例并把实例对象提供给客户端,从而使客户端能使用这个类接口定义的服务。

类不能公开创建,但类的对象可以用ArcObjects中其它对象来创建并提供给客户端使用。

1.1ArcGISEngine介绍

ArcGIS9概览

ArcGIS9是建立完整GIS的一个GIS软件产品集成体系。

该体系建立在ArcObjects这个共享的GIS软件组件公用库基础之上。

ArcGIS9由四个关键部分组成:

􀁺ArcGISDesktop—高级GIS应用程序的一个集成套件。

􀁺ArcGISEngine—通过多种应用程序接口建立自定义应用程序的嵌入式GIS组件库。

􀁺ArcGISServer—为企业和Web计算框架建立服务器端GIS应用程序的一个平台,可用于建立Web服务和Web应用程序。

􀁺ArcIMS—通过开放Internet协议发布地图、数据和元数据的GISWeb服务器。

ArcGIS的开发途径多种多样,开发人员可以通过以下几种方法进行开发:

􀁺配置/定制诸如ArcMap和ArcCatalog等ArcGIS应用程序。

􀁺扩展ArcGIS的结构和数据模型。

􀁺用ArcGISEngine将地图和GIS功能嵌入到其他应用程序中。

􀁺用ArcGISEngine建立和部署自定义桌面应用程序。

􀁺用ArcGISServer建立Web服务和Web应用程序。

ArcGISEngine是开发人员用于建立自定义应用程序的嵌入式GIS组件的一个完整类库。

开发人员可以使用ArcGISEngine将GIS功能嵌入到现有的应用程序中,包括MicrosoftOffice的Word和Excel等产品,也可以建立能分发给众多用户的自定义高级GIS系统应用程序。

ArcGISEngine由一个软件开发工具包和一个可以重新分发的、为所有ArcGIS应用程序提供平台的运行时(runtime)组成。

ArcGISEngine的五个组成部分概括如下:

1.基本服务—由GIS核心ArcObjects构成,几乎所有GIS应用程序都需要,如要素几何体和显示。

2.数据存取—ArcGISEngine可以对许多栅格和矢量格式进行存取,包括强大而灵活的地理数据库。

3.地图表达—包括用于创建和显示带有符号体系和标注功能的地图的ArcObjects,及包括创建自定义应用程序的专题制图功能的ArcObjects。

4.开发组件—用于快速应用程序开发的高级用户接口控件和用于高效开发的一个综合帮助系统。

5.运行时选项—ArcGISEngine运行时可以与标准功能或其他高级功能一起

部署。

除运行时选项外,这些部分都可以通过ArcGISEngine的软件开发工具包获得。

ArcGISEngine运行时及其选项虽然也是自定义GIS应用程序开发不可或缺的一部分,但涉及到特定的应用程序部署,因此被认为是一个独立的组成部分。

ArcGISEngine软件开发工具包

ArcGISEngine开发工具包是一个基于组件的软件开发产品,用于建立和部署自定义GIS和制图应用程序。

ArcGISEngine开发工具包不是一个终端用户产品,而是一个应用程序开发人员的工具包。

可以用ArcGISEngine开发工具包建立基本的地图浏览器或综合、动态的GIS编辑工具。

使用ArcGISEngine开发工具包,开发人员在建立定制的地图接口方面具有前所未有的灵活性。

开发人员可以使用几个API中的任何一个来建立独一无二的应用程序,或者将ArcGISEngine组件与其他软件组件组合起来实现地图与用户管理信息之间的协同关系。

使用ArcGISEngine,地图本身可以是应用程序的一个次要元素或核心部分。

例如,如果应用程序的重点是有关商业信息的数据库,当应用程序的用户执行一个数据库查询时,ArcGISEngine可以使该应用程序显示一幅高亮显示感兴趣商业区位置的地图。

ArcGISEngine开发工具包可以访问GIS组件或ArcObjects的大型集合,这些GIS组件或ArcObjects分别属于前面讨论过的类目—基本服务、数据存取和地图表达。

ArcGISEngine的第四个部分—开发组件也包含在ArcGISEngine开发工具包中。

这些都是用于建立高质量地图用户接口的增值开发控件。

ArcGISEngine为辅助应用程序开发提供了下列ArcGIS控件或可视化组件:

􀁺MapControl

􀁺PageLayoutControl

􀁺SceneControl

􀁺GlobeControl

􀁺ToolbarControl

􀁺TOCControl

􀁺ReaderControl

􀁺ToolbarControl中使用的命令、工具和菜单集合

ArcGISEngine运行时(Runtime)

ArcGISEngine的最后一个组件就是其运行时选件。

用ArcGISEngine软件开发工具包建立的所有应用程序为成功执行都需要合适级别许可的ArcGISEngine运行时。

ArcGISEngine运行时是建立ArcGISDesktop的平台,因此,在ArcGISEngine应用程序开发人员允许的情况下,ArcGISDesktop应用程序的用户可以执行基于Engine的自定义应用程序。

ArcGISEngine运行时有多种选项,从标准版本一直到企业版本。

标准ArcGISEngine功能

标准Engine运行时提供所有ArcGIS应用程序的核心功能。

这个级别的ArcGISEngine运行时可以操作几种不同的栅格和矢量格式、进行地图表达和创建以及通过执行各种空间或属性查询查找要素。

这个级别的ArcGISEngine运行时还可以进行基本数据创建、编辑Shapefile和简单的个人地理数据库及GIS分析。

地理数据库更新选项

ArcGISEngine运行时地理数据库更新选项增加了创建和更新多用户企业地理数据库的功能,包括操作程式(schema)和版本地理数据库。

地理数据库更新选项开放了ArcGISEngine运行时运行自定义方案所需的几个必要的ArcObjects。

这些方案包括GIS数据自动化和编译及地理数据库要素的创建和维护。

地理数据库更新选项提供了建立诸如拓扑、子类和几何网络等地理数据库行为的程序实现。

通过ArcSDE访问RDBMS的ArcGISEngine开发人员可以为安装和配置了ArcGISEngine运行时地理数据库更新选项的终端用户建立和部署多用户编辑应用程序。

ArcGISEngine的其他选项

ArcGISEngine运行时还有其他三个运行时选项:

1.空间分析选项—ArcGISEngine运行时空间分析选项提供了强大的功能集,允许应用程序创建、查询和分析基于像元的栅格数据。

这种分析允许用户生成其数据方面的信息、确定空间关系、查找合适地址及计算从一个点到另一个点的旅行累积成本。

这个运行时选项支持的其他高级应用程序还包括坡度、坡向计算和用数字高程模型生成等高线等功能。

2.3D分析选项—ArcGISEngine运行时3D分析选项实现了数据的三维可视化。

与标准ArcGISEngine相比,这个选项补充了从多个视点观察表面和确定一个选择位置的可视区的组件。

SceneControl和GlobeControl提供接口浏览用于可视化数据、创建表面和分析表面的多层3D数据和全球数据。

3.StreetMapUSA选项—StreetMapUSA选项提供了美国街道制图、地址匹配和基本路径选择功能。

StreetMap图层自动管理、标注和绘制要素,如地方里程碑、街道、公园、水体及其他要素,生成了美国丰富的街道网络地图。

所有数据都存储在CD-ROM上的压缩格式文件中。

第二章ArcGISEngine中的控件

ArcGIS控件是高级开发组件,首先它们允许开发人员建立和扩展GIS应用程序,其次它们提供了图形用户界面(GUI)。

下列所有ArcGIS控件都可以作为ActiveX控件、.NETWindows控件和VisualJavaBean获得:

􀁺MapControl—类似于“数据(data)视图”

􀁺PageLayoutControl

􀁺ToolbarControl

􀁺TOCControl(内容表控件)

􀁺SceneControl

􀁺GlobeControl

􀁺ReaderControl

ArcGIS控件可以通过两种方式建立应用程序:

首先,ArcGIS控件可以嵌入到现有的应用程序中以增加制图功能;其次,ArcGIS控件可用于创建新的独立应用程序。

在前一种情况中,单个的ArcGIS控件可以嵌入到应用程序中,在后一种情况中,TOCControl和ToolbarControl可以与其他ArcGIS控件结合起来组成应用程序框架的组成部分。

为了使用ArcGIS控件有效地建立应用程序,应该理解所有ArcGIS控件共同的一些主题和概念。

嵌入式组件

每个ArcGIS控件都是一个嵌入式组件,可以拖放到可视化设计环境提供的容器窗体或对话框中。

一旦放在容器内,就可以改变ArcGIS控件的大小和位置,以便与其他嵌入式组件,如命令按钮和组合框等一起为应用程序提供用户界面。

属性页

一旦ArcGIS控件嵌入到容器中,通过右键点击该控件并选择弹出式菜单中的“属性”菜单项,就可以在大多数可视化设计环境中访问各个ArcGIS控件的属性页集合。

这些属性页提供了选择控件属性和方法的快捷方式,使开发人员只需写很少代码甚至不用写代码就可以建立应用程序。

事件

每个ArcGIS控件都会响应终端用户的键盘和鼠标交互而触发事件。

响应发生在控件内的行为会触发一些其他事件。

例如,当装载一个地图文档到MapControl时,就会触发OnMapReplaced事件;或者当通过拖放将一个对象在MapControl上拖动时,就会触发OnOleDrop事件。

伙伴控件

ToolbarControl和TOCControl都要与另一个“伙伴控件”协同工作。

“伙伴控件”一般是MapControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl。

“伙伴控件”可以在设计时通过控件的属性页设置(在支持属性页功能的开发环境中可以这样设置),或者用SetBuddyControl方法编程设置。

控件命令

ArcGISEngine提供了一系列命令、工具和菜单与ArcGIS控件协同工作。

例如,MapControl和PageLayoutControl有一套地图导航、要素选择和图形元素命令与其协同工作。

类似的,SceneControl、GlobeControl和ReaderControl也有一套命令与其协同工作。

对于使用单个控件的应用程序,这些命令可以通过编程创建命令的一个新例程并将该控件传递给命令的OnCreate事件而直接操作控件。

对于使用ToolbarControl及其“伙伴控件”的应用程序,这些命令可以通过设计阶段设置属性页或通过编程设置,或者如果ToolbarControl处于定制模式可以在运行时由终端用户设置。

地图制作

ArcGISDesktop应用程序可用于预制作能被装载到ArcGIS控件中的文档,以便快速生产高质量的地图。

例如,可以用ArcMap制作能被装载到MapControl和PageLayoutControl中的地图文档。

预先制作文档可以节省大量时间,因为它不必从零开始编程建立地图及其符号体系。

一旦文档被装载到ArcGIS控件中,如果随后需要改变其外观,就可以通过对象模型编程访问任何图层、元素和符号。

下表总结了可以被装载到各个ArcGIS控件中的文档类型

2.1MapControl和PageLayoutControl控件

MapControl和PageLayoutControl对应于ArcMap桌面应用程序的“数据”和“布局”视图。

MapControl封装了Map对象,而PageLayoutControl封装了PageLayout对象。

用ArcMap创作的地图文档可以装载到MapControl和PageLayoutControl中,以节省开发人员编程创作地图的时间。

MapControl和PageLayoutControl不仅可以读取地图文档,它们还可以写入地图文档(*.mxd)。

这两个控件都实现了IMxContents接口,使地图文档(MapDocument)对象可以将MapControl和PageLayoutControl的内容写到一个新的地图文档中。

MapControl上存在诸如TrackRectangle、TrackPolygon、TrackLine和TrackCircle等帮助方法,用于追踪或“橡皮圈住(rubberbanding)”显示上的几何图形(Shape)。

VisibleRegion属性可用于更改MapControl显示区内的几何图形。

PageLayoutControl上存在诸如FindElementByName和LocateFrontElement等帮助方法,以帮助开发人员管理元素,而Printer和PrinterPageCount属性与PrintPageLayout方法则共同完成打印任务。

2.2GlobeControl和SceneControl控件

GlobeControl和SceneControl对应于ArcGlobe和ArcScene桌面应用程序的三维视图。

GlobeControl封装了GlobeViewer对象,而SceneControl封装了SceneViewer对象。

用ArcGlobe和ArcScene应用程序创作的Globe和Scene文档可以分别装载到GlobeControl和SceneControl中,以节省开发人员编程创作这两种地图的时间。

GlobeControl和SceneControl都具有内置的导航功能,允许终端用户移动三维视图和可视化三维数据,而不必使用控件命令或自定义命令。

要使用内置的导航工具,必须通过属性页或者编程设置Navigate属性。

终端用户可以用鼠标左键对显示进行前后左右的移动,使用鼠标右键放大和缩小显示。

2.3ReaderControl控件

ReaderControl对应于ArcReader桌面应用程序的“数据”和“布局”视图及其内容表(TOC)。

ReaderControl还包含ArcReader桌面应用程序使用的内部窗口和工具,如Find窗口和Identify工具等。

用ArcMap桌面应用程序创作并用ArcGISPublisher扩展模块发布的发布地图文件(PMF)如果在发布时设置为允许装载到定制的ArcReader应用程序中,则可以装载到ReaderControl中。

ReaderControl中有一个简单的自包含对象模型,提供ArcReader桌面应用程序的所有功能而不需要访问ArcObjects。

这样,用ReaderControl开发应用程序就不需要有任何使用ArcObjects开发程序的经验。

但是,如果发布地图文件在发布时设置为不受限制地访问其内容,开发人员就可以访问底层的ArcObjects,并以与MapControl和PageLayoutControl相似的方式使用ReaderControl进行开发。

但ArcReaderControl并不能通过ArcGISEngine获得,在这里提出来是因为该控件与ReaderControl很相似;ArcReaderControl也有与ReaderControl相同的简单自包含对象模型。

但是,ArcReaderControl不能用作“伙伴控件”以便与TOCControl或ToolbarControl协同工作,而且开发人员也不能访问其底层的ArcObjects。

使用ArcReaderControl进行开发需要ArcGISPublisher扩展模块,而且ArcReaderControl可以部署到有ArcReader桌面应用程序的任何机器上。

2.4TOCControl与ToolbarControl控件

TOCControl

TOCControl要与一个“伙伴控件”协同工作。

“伙伴控件”可以是MapControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl。

“伙伴控件”可以在设计时通过TOCControl属性页设置(在支持属性页功能的开发环境中可以这样做)或在驻留TOCControl的容器被显示时用SetBuddyControl方法通过编程设置。

TOCControl的每个“伙伴控件”都实现了ITOCBuddy接口。

TOCControl用“伙伴控件”来显示其地图、图层和符号体系内容的一个交互树视图并保持其内容与“伙伴控件”同步。

例如,如果TOCControl的“伙伴控件”是一个MapControl,而且从该MapControl中删除了一个图层,则该图层也会从TOCControl中删除。

同样地,如果终端用户与TOCControl交互并取消了某个图层的Visibility复选框,则该图层在MapControl中不再可见。

ToolbarC

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1