arcgisAE.docx

上传人:b****5 文档编号:6337087 上传时间:2023-01-05 格式:DOCX 页数:16 大小:1.27MB
下载 相关 举报
arcgisAE.docx_第1页
第1页 / 共16页
arcgisAE.docx_第2页
第2页 / 共16页
arcgisAE.docx_第3页
第3页 / 共16页
arcgisAE.docx_第4页
第4页 / 共16页
arcgisAE.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

arcgisAE.docx

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

arcgisAE.docx

arcgisAE

实验3利用ArcEngine进行二次开发

Arcengine的类库

下面根据依赖关系的顺序对类库进行讨论。

模型图中在每个类库框的右上角显示了其序列号。

例如,作为ArcGIS体系结构基础的System类库,其编号为1,而编号为7的GeoDatabase类库依赖于模型图中其前面的6个类库—SyStem、SystemUI、Geometry、Display、Server和Output。

System类库

System类库是ArcGIS体系结构中最底层的类库。

System类库包含给构成ArcGIS的其他类库提供服务的组件。

System类库中定义了大量开发者可以实现的接口。

AoInitializer对象就是在System类库中定义的,所有的开发者必须使用这个对象来初始化ArcGISEngine和解除ArcGISEngine的初始化。

开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。

SystemUI类库

SystemUI类库包含用户界面组件接口定义,这些用户界面组件可以在ArcGISEngine中进行扩展。

包含ICommand、ITool和IToolControl接口。

开发者用这些接口来扩展UI组件,ArcGISEngine开发人员自己的组件将使用这些UI组件。

这个类库中包含的对象是一些实用工具对象,开发人员可以通过使用这些对象简化用户界面的开发。

开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。

Geometry类库

Geometry类库处理存储在要素类中的要素几何图形或形状或其他图形元素。

大多数用户会遇到的基本几何图形对象为Point、MultiPoint、Polyline和Polygon。

除了这些顶级实体外,就是作为多义线和多边形的组成部分的几何图形,是组成几何图形的子要素。

它们是Segement、Path和Ring。

Polyline和Polygon由一系相连接的、构成列Path的片段组成.一个片段由两个不同的点,即起始点和结束点,以及一个定义这两点之间弯曲度的元素类型组成。

片段的类型有CircularArc、Line、EllipticArc和BezierCurve。

所有几何图形对象都可以有与其顶点相关联的Z、M和IDs。

所有的基本几何图形对象都支持诸如Buffer,Clip等几何操作。

几何子要素不可以由开发者扩展。

GIS中的实体指的是现实世界中的要素;现实世界中要素的位置由一个带有空间参考的几何图形来定义。

空间参考对象,包括投影坐标和地理坐标系统,都包括在Geometry类库中。

开发者可以通过添加新的空间参考和投影来扩展空间参考系统。

Display类库

Display类库包含用于显示GIS数据的对象。

除了负责实际输出图像的主要显示对象外,这个类库还包含表示符号和颜色的对象,它们用来控制在显示上绘制时实体的属性。

Display类库还包含在与显示交互时提供给用户可视化反馈的对象。

开发者与Display最常用的交互方式就是类似于Map对象或PageLayout对象提供的视图。

Display类库的所有部分都能进行扩展;通常扩展的对象包括符号、颜色和显示反馈。

Server类库

Server类库包含允许用户连接并操作ArcGISServer的对象。

开发人员用GISServerConnection对象来访问ArcGISServer。

通过GISServerConnection可以访问ServerObjectsMananger对象。

用这个对象,开发人员可以操作ServerContext对象,以处理运行于服务器上的ArcObjects。

开发人员还可以用GISClient类库与ArcGISServer进行交互。

Output类库

Output类库用于创建图形输出到诸如打印机和绘图仪等设备及诸如增强型元文件和栅格图像格式(JPG、BMP等)等硬拷贝格式。

开发人员用这个类库中的对象及ArcGIS系统的其他部分创建图形输出。

通常是Display和Carto类库中的对象。

开发者可以为自定义设备和输出格式扩展Output类库。

GeoDatabase类库

Geodatabase类库为地理数据库提供了编程API。

地理数据库是建立在标准工业关系型和对象关系数据库技术之上的地理数据仓库。

Geodatabase类库中的对象为ArcGIS支持的所有数据源提供了一个统一编程模型。

GeoDatabase类库定义了许多由ArcObjects架构中更高级的数据源提供者实现的接口。

开发者可以扩展地理数据库,以支持特定类型的数据对象(要素、类等);此外,Geodatabase类库还有用PlugInDataSource对象添加的自定义矢量数据源。

地理数据库支持的本地数据类型不能扩展。

GISClient类库

GISClient类库允许开发者使用Web服务;这些Web服务可以由ArcIMS和ArcGISServer提供。

GISClient类库中包含用于连接GIS服务器以使用Web服务的对象。

该类库支持ArcIMS的图像和要素服务。

GISClient类库提供以无态方式直接或通过Web服务目录操作ArcGISServer对象的通用编程模型。

在ArcGISServer上运行的ArcObjects组件不能通过GISClient接口来访问。

要直接获得访问在服务器上运行的ArcObjects,开发人员应使用Server类库中的功能。

DataSourcesFile类库DataSourcesFile类库包含用于基于文件数据源的GeoDatabaseAPI实现。

这些基于文件的数据源包括shapefile、coverage、TIN、CAD、SDC、StreetMap和VPF。

开发者不能扩展DtaSourcesFile类库。

DataSourcesGDB类库DataSourcesGDB类库包含用于数据库数据源的GeoDatabaseAPI实现。

这些数据源包括MicrosoftAccess和ArcSDE支持的关系型数据库管理系统—IBM、DB2、Informix、MicrosoftSQLServer和Oracle。

开发者不能扩展DataSourcesGDB类库。

DataSourcesOleDB类库DataSourcesOleDB类库包含用于MicrosoftOLEDB数据源的GeoDatabaseAPI实现。

此类库只能用在MicrosoftWindows操作系统上。

这些数据源包括支持数据提供者和文本文件工作空间的所有OLEDB。

开发者不能扩展DataSourcesOleDB类库。

DataSourcesRaster类库DataSourcesRaste类库包含用于栅格数据源的GeoDatabaseAPI实现。

这些数据源包括ArcSDE支持的关系型数据库管理系统—IBM、DB2、Informix、MicrosoftSQLServer和Oracle,以及其支持的RDO栅格文件格式。

当需要支持新的栅格格式时,开发者不扩展这个类库,而是扩展RDO。

开发者不能扩展DataSourcesRaster类库。

GeoDatabaseDistributed类库GeoDatabaseDistributed类库通过提供地理数据库数据导入和导出工具,可以支持对企业级地理数据库的分布式访问。

开发者不能扩展GeoDatabaseDistribute类库。

Carto类库Carto类库支持地图的创建和显示;这些地图可以在一幅地图或由许多地图及其地图元素组成的页面中包含数据。

PageLayout对象是驻留一幅或多幅地图及其底土元素的容器。

地图元素包括指北针、图例、比例尺等。

Map对象包括地图上所有图层都有的属性—空间参考、地图比例尺等,以及操作地图图层的方法。

可以将许多不同类型的图层加载到地图中。

ArcGIS控件:

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控件的属性页集合。

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

●ArcObjects

每个ArcGIS控件都封装了粗粒度ArcObjects,同时又提供对细粒度ArcObjects的访问,这样简化了开发过程。

例如,PageLayoutControl封装了布局(PageLayout)对象。

布局(PageLayout)对象至少包含一个MapFrame元素,该MapFrame元素包含一个地图(Map)对象,而地图(Map)对象又可以包含多个栅格、矢量或自定义图层(Layer)对象。

每个ArcGIS控件为其封装的ArcObjects上频繁使用的属性和方法提供了快捷方式。

例如,MapControl有一个SpatialReference属性,该属性就是地图(Map)对象的SpatialReference属性的一个快捷方式。

每个ArcGIS控件还有一些执行公共任务的帮助方法。

例如,MapControl有一个AddShapeFile方法。

ArcGIS控件一般都是开发应用程序的起始点,不仅因为这些控件提供了用户界面,而且还因为通过它们可以直接进入对象模型。

●事件

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

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

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

●伙伴控件

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

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

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

●控件命令

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

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

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

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

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

开发人员也可以通过创建他们自己的自定义命令、工具和菜单来扩展ArcGISEngine提供的命令集。

HookHelper、GlobeHookHelper和SceneHookHelper对象可用于简化这种开发。

要了解有关如何使用HookHelper对象建立自定义命令方面的信息,请参考第六章“开发情景”中的“建立应用程序”情景。

●地图制作

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

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

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

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

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

*ArcReaderControl只能用ArcGISPublisher扩展模块获得。

然而,这里列出来是由于其与ReaderControl的类似性。

**ArcGIS控件上没有可用的属性直接装载图层文件(*.lyr)。

但是它们可以间接地通过MapDocument对象装载。

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

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

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

地图文档可以在设计时通过MapControl和PageLayoutControl的属性页(在支持属性页功能的开发环境中可以这样做)设置,控件可以被设置为“链接”或“包含”地图文档。

若为“链接”控件,则每当“链接”控件被创建时都会读取地图文档并显示该地图文档的最新更新。

而如果为“包含”控件,则“包含”控件会将地图文档的内容复制到控件中,但不会显示该地图文档后来所作的任何更新。

另外,地图文档页可以使用LoadMxFile方法通过编程装载到控件中。

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

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

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

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

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

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

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

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

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

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

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

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桌面应用程序的任何机器上。

TOCControl

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

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

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

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

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

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

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

ToolbarControl

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

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

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

ToolbarControl可以驻留操作其“伙伴控件”显示的命令、工具和菜单。

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

这个接口用于设置“伙伴控件”的CurrentTool属性。

例如,设想驻留了一个“页面放大”工具并有一个PageLayoutControl作为其“伙伴控件”的ToolbarControl。

当终端用户单击该ToolbarControl上的“页面放大”工具时,该“页面放大”工具就会成为PageLayoutControl的CurrentTool。

“页面放大”工具的实现会查询ToolbarControl以访问其“伙伴控件”(PageLayoutControl)并取回该PageLayoutControl。

然后该PageLayoutControl提供实现显示终端用户拉动鼠标所画的框并改变布局的范围。

ToolbarControl一般要与一个“伙伴控件”协同工作,并有一个控件命令选择集,以便快速提供功能强大的GIS应用程序。

ToolbarControl不仅提供了部分用户界面,而且还提供了部分应用程序框架。

ArcGISDesktop应用程序,如ArcMap、ArcGlobe和ArcScene等具有强大而灵活的框架,包括诸如工具条、命令、菜单、泊靠窗口和状态条等用户界面组件。

这种框架使终端用户可以通过改变位置、添加和删除这些用户界面组件来定制应用程序。

许多开发环境提供简单对话框、窗体和多泊靠界面(MDI)应用程序形式的框架。

它们也提供普通的用户界面组件,如按钮、状态条和列表框。

然而,仍需要为驻留命令的工具条和菜单提供大量的代码,特别是如果这些命令需要由终端用户定制的话。

ToolbarControl及其类库中的对象可以提供类似于ArcGISDesktop应用程序框架那样的框架组件。

用ToolbarControl建立应用程序时,开发人员可以使用这些框架组件的一部分或全部。

命令

ArcGISEngine提供了几套使用ArcGIS控件的控件命令,以便执行某种特定动作。

开发人员可以通过创建他们自己的执行特定任务的定制命令来扩展这套控件命令。

所有的命令对象都实现了ICommand接口,ToolbarControl在适当的时候要使用该接口来调用方法和访问属性。

在命令对象被驻留到ToolbarControl后就会立即调用ICommand:

:

OnCreate方法。

这个方法将一个句柄(handle)或“钩子(hook)”传递给该命令操作的应用程序。

命令的实现一般都要测试以查看该“钩子(hook)”对象是否被支持(也就是说,命令要测试以查看该“钩子(hook)”是不是该命令可以操作的一个对象)。

如果不支持该“钩子(hook)”,命令自动失效。

如果支持该“钩子(hook)”,则命令存储该“钩子(hook)”以便以后使用。

例如,如果“打开地图文档”命令要操作MapControl或PageLayoutControl,而且它们作为“钩子(hook)”被传递给OnCreate方法,则该命令会存储该“钩子(hook)”以便以后使用。

如果ToolbarControl作为钩子(hook)”被传递给OnCreate事件,则命令一般会通过Buddy属性检查与该工具条协同使用的“伙伴控件”的类型。

例如,如果驻留在ToolbarControl上的一个命令只能操作ReaderControl,而该ToolbarControl的“伙伴”是一个MapControl,则该命令应自动失效。

HookHelper、GlobeHookHelper和SceneHookHelper可以帮助开发人员创建自定义命令以操作ArcGIS控件和ArcGISDesktop应用程序。

●HookHelper

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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