实习指导书第五章ArcGIS Engine二次开发入门.docx
- 文档编号:24596465
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:110
- 大小:1.13MB
实习指导书第五章ArcGIS Engine二次开发入门.docx
《实习指导书第五章ArcGIS Engine二次开发入门.docx》由会员分享,可在线阅读,更多相关《实习指导书第五章ArcGIS Engine二次开发入门.docx(110页珍藏版)》请在冰豆网上搜索。
实习指导书第五章ArcGISEngine二次开发入门
第五章ArcGISEngine二次开发入门
5.1ArcGIS、ArcObjects和ArcGISEngine简介
5.1.1ArcGIS简介
ArcGIS提供了一个可伸缩的框架,可以为独立用户或者多用户,既可以在桌面端也可以在服务器端提供GIS。
ArcGIS9是用来构建一个完整GIS应用的GIS软件产品集成。
它是基于共享的GIS软件组件——ArcObjects。
ArcGIS9由以下四部分组成:
●ArcGISDesktop——高级GIS应用的集成
●ArcGISEngine——根据应用程序接口来构建基本应用的嵌入式GIS组件库
●ArcGISServer——在企业级或者网络框架下构建服务器端GIS应用的平台,用来构建Web服务和Web应用
●ArcIMS——通过公开的因特网协议来发布地图、数据和元数据的GISWeb服务器
图1ArcGIS产品结构图
每一个GIS框架同样包含ArcSDE网关,这是在关系数据库(RDBMS)上组织地理数据的接口。
ArcGIS是构建地理信息系统的平台。
ArcGIS9在地理数据处理、3D可视化表达和开发工具方面做了新的扩展。
两个新的产品——ArcGISEngine和ArcGISServer在这个版本中发布,是ArcGIS成为一个应用程序及服务端开发的完整产品。
●使用ArcGIS能够开发出一系列的产品,开发者可以:
●配置/定制ArcGIS的应用,例如ArcMap和ArcCatalog
●扩展ArcGIS的结构和数据模型
●利用ArcGISEngine在其他应用程序中嵌入地图和GIS功能
●使用ArcGISEngine构建并部署桌面版应用程序
●使用ArcGISServer构建Web服务和应用
ArcGIS系列产品是通过称之为ArcObjects的软件组件加以构建和扩展的。
ArcObjects包括一系列不同的程序组件,从高度封装的组件(例如独立的geometryobjects)到低级组件(例如能够同已有的ArcMap文档集成的地图组件)。
这些组件为开发者集成了大量的GIS功能。
ArcGIS9的全线产品都具备开发功能(Engine,Server和Desktop)。
作为一个开发者,您能够使用标准程序框架结合ArcObjects来扩张ArcGISDesktop;能够用ArcGISEngine定制应用;能够使用ArcGISServer构建企业级的GIS应用。
图2ArcGIS开发结构图
ArcGISDesktop包含了一些列的Windows桌面应用程序(例如,地图、目录、工具箱、地球方面的应用)。
ArcGISDesktop包含了三种功能级别(ArcView,ArcEditor和ArcInfo),使用ArcGISDesktop开发包能够进行客户化和扩展。
ArcGISDesktop的软件开发包(softwaredeveloperkit,SDK)包含在ArcView,ArcEditor和ArcInfo内,支持COM(ComponentObjectsModel,组件对象模型)和.NET程序框架。
许多开发者利用DesktopSDK扩展功能,创建新的GIS工具,定制用户界面,完善ArcGISDesktop应用中专业GIS产品的扩展功能。
ArcGISServer不仅定义和实现了一系列标准的GISWeb服务(例如,地图、数据访问、地理编码等),同时还支持利用ArcObjects进行企业级的服务端应用开发。
ArcGISServer开发包让开发者能构建GIS服务器用来向多用户提供可供访问的GIS功能,能通过客户端对大型GIS中央服务器进行处理,能构建和分发GISWeb应用,能进行分布式GIS运算。
1.1ArcObjects简介
ArcObjects是ArcGISDesktop的开发平台。
ArcGISDesktop是一系列GIS软件系统:
ArcInfo,ArcEditor和ArcView。
这些系统服务于GIS,例如地理数据组织、控件编辑、分级可视化等功能。
ArcGISDesktop系统包含一系列的应用,例如ArcCatalog、ArcMap、ArcToolBox和ArcScene,并且能够集成大量不同的扩展产品,例如ArcGISSpatialAnalyst(空间分析模块),ArcGISGeostatisticalAnalyst(地理统计分析模块),ArcGIS3DAnalyst(三维分析模块)等。
ArcObjects是使用微软的组件对象模型(ComponentObjectsModel,COM)书写。
因此,凡是支持COM标准的开发语言都能使用ArcObjects。
您能向ESRI(EnvironmentSystemResearchInstitute,环境系统研究所)的开发者一样,使用同样的方式来扩展ArcObjects中的任何一部分。
1.2ArcGISEngine简介
ArcGISEngine是开发者用来构建应用程序的一整套嵌入式GIS组件。
使用ArcGISEngine,您可以将一些GIS功能嵌入到已有的应用程序中,这包括MicrosoftOffice产品,例如Word和Excel,建造有针对性的客户应用程序用来将高级GIS系统与他人分享。
ArcGISEngine由一个软件开发包(softwaredevelopmentkit,SDK)和一个给所有ArcGIS应用提供平台的运行许可(runtime)构成。
构成ArcGISEngine的五部分分别如下:
1)基本服务——几乎任何GIS应用都需要的核心GISArcObjects,例如几何(geometry),显示(display)等。
2)数据访问——ArcGISEngine提供许多栅格和矢量数据的访问方式,包括与geodatabase相当的能力和灵活性。
3)地图表达——ArcObjects使用符号、注记和专题地图来生成和表达地图。
4)开发组件——用来快速定制应用开发程序的高度封装用户接口以及开发过程中全面的帮助系统。
5)运行许可——ArcGISEngine运行许可可以部署标准功能或者加入一些附加的高级功能。
这中间除了运行许可之外的任何一部分,都打包集成到ArcGISEngine开发包(SDK)中。
ArcGISEngine运行许可及其选项,尽管是开发完整的GIS应用程序中的一部分,但包含了应用部署,所以被单独打包。
1.2.1ArcGISEngineSoftwareDeveloperKit
ArcGISEngineSDK是用来开发和部署GIS及地图方面应用程序的组件化软件开发产品。
ArcGISEngineSDK不是终端产品而是供应用开发者使用的软件包。
它能构建基本的地图浏览或者全面的、动态的GIS编辑工具。
使用ArcGISEngineSDK,作为开发者,您在定制地图功能接口方面有空前的自由。
您可以使用许多API中的一些来构建独一无二的应用程序或者将ArcGISEngine组建与其他软件组建整合,来实现地图和用户需要的其他信息之间的完美结合。
使用ArcGISEngine,地图既能够作为应用程序的核心,也可以作为一个可选项。
例如,如果您的应用主要是数据库中的商务信息,当您查询数据库的时候,ArcGISEngine能够将您感兴趣的商业信息在地图上高亮显示定位出来。
ArcGISEngineSDK提供了大量的GIS组件,或者称为ArcObjects,按照之前的介绍,包括基本服务、数据访问和地图表达。
之前提到的ArcGISEngine的第四部分,也就是开发组件,也包含在SDK中间。
这些都是用来构建一个高质量地图接口的开发控件。
下面列出的ArcGIS控件,或者说可视化控件,用来辅助应用程序开发(下文将针对控件进行更加详细的介绍)。
●MapControl
●PageLayoutControl
●SceneControl
●GlobeControl
●ToolbarControl
●TOCControl
●ReaderControl
●ToolbarControl中所用到的commands(命令)、tools(工具)和menus(菜单)
1.2.2ArcGISEngineRuntime
ArcGISEngine的最后一部分是运行许可。
所有用ArcGISEngineSDK构建出的应用程序都需要不同级别的ArcGISEngine运行许可才能够正常运行。
ArcGISEngineRuntime是ArcGISDesktop(ArcGIS桌面版)构建的平台,如果得到ArcGISEngine应用开发许可,ArcGISDesktop的用户就能够执行基本的基于Engine的应用。
ArcGISEngineRuntime从标准功能到企业级功能之间有许多不同的选择。
1.2.3ArcGISEngine的功能
ArcGISEngine的功能十分强大。
作为ArcGISEngine开发者,您可以实现以下列出的和其他更多的功能,这包括:
●用多个图层来显示地图,例如道路、水系、边界等
●地图的漫游和缩放
●地图上要素的确认
●地图上要素的查询和定位
●根据属性值显示注记
●根据航片或者卫片显示图像
●绘制几何图形,例如点、线、弧、多边形
●添加描述性的文字
●沿着线选择或者选择矩形、某一范围内、多边形等内部的要素
●选择距离在某一范围内的要素
●利用SQL语言来寻找和选择要素
●利用专题地图来渲染要素,如唯一值法、分级法和点状密度法
●动态显示实时地图或者时序数据
●根据地理编码来寻找位置
●转换您地图的坐标系
●根据几何操作来生成缓冲区、计算差值,或者进行求交、求并等运算
●编辑要素形状或者旋转地图
●创建并更新要素的几何形状及其属性
编辑要素(EditingFeatures)
ArcGISEngine开发包让您构建出能创建、修改和删除geodatabase中矢量要素或者shapefile文件的应用程序。
标准的ArcGISEngineRuntime能够让编辑shapefile文件或者personalgeodatabase中简单要素的程序运行。
然而,要构建企业级geodatabase的全部功能,就需要ArcGISEngineRuntime中的GeodatabaseUpdate选项。
空间建模和分析
通过增加ArcGISEngineRuntime中的Spatial选项,您能够扩展ArcGISEngine的功能。
这个选项(Spatial选项)能提供一系列强劲的空间建模和分析功能。
您能够创建、查询、表达和分析基于象元的栅格数据,能够集成栅格和矢量数据进行分析,能够从已有数据挖掘出新的信息,能够从多层数据中查询信息,能够在ArcGISEngine应用程序中完美集成基于象元的栅格数据和矢量数据。
例如,您能够:
●将要素(如点、线或者面)转化成栅格图
●基于距离或者要素、栅格间的关系来创建栅格缓冲区
●根据点状要素生成密度图
●生成等高线、坡度、可视化区域、方向和山体阴影
●栅格图的分类及显示
●兼容TIFF,BIL,IMG,USGSDEM,SDTS,DTED等标准格式及多种其他格式数据
●三维可视化等
ArcGISEngineRuntime中的3D选项让您通过使用Scene和Globe控件来有效的表达和分析区域及全球数据。
您能够从多个不同的视点查看表面;您能够查询表面,决定从某个选中的位置看,哪些要素是可见的;您能够将栅格和矢量数据贴在表面以构建真实的透视影像。
例如,您能够:
●显示Scene和Globe文档
●展示交互性的透视图,包括漫游、缩放、旋转、倾斜、模拟飞行以便于表达和分析
●显示真实世界的表面要素,例如楼房
●展示视域和可见范围分析、场景高度内插、剖面分析和最短距离分析
ArcGIS控件介绍
在ArcGISEngine的二次开发中,ArcGIS控件给我们提供了具体的开发环境和方法。
在ArcGISEngine中共有7个控件,另外在部署过程中还有一个LicenceControl。
下面将首先介绍ArcGIS控件,再详细介绍实习中可能用到的MapControl,TOCControl以及ToolbarControl。
1.3ArcGIS控件简介
ArcGIS的控件是高度集成化的,首先能够让开发者构建和扩展ArcGIS的功能,其次能够提供图形用户界面(graphicaluserinterface,GUI)。
下列展示出的每一个ArcGIS控件都可以被作为ActiveX控件,.NET控件或者可视化的JavaBean:
●MapControl——类似于“数据”
●PageLayoutControl
●ToolbarControl
●TOCControl(TabletofContentsControl)
●SceneControl
●GlobeControl
●ReaderControl
使用ArcGIS控件,可以用两种方式来构建应用程序,首先,ArcGIS控件可以被嵌入到已有的应用程序中,将地图相关的功能作为辅助添加进去,或者其次,ArcGIS控件可以用来创建一个独立的应用程序。
不管使用哪种方式,一个独立的ArcGIS控件能够被嵌入到已有程序中或者TOCControl和ToolbarControl能够和其他ArcGIS控件联合使用,提供应用程序的部分框架。
对于所有的ArcGIS控件来说,有一些共同的主题、概念和应用方法等,在有效的使用这些控件来构建应用程序之前,有必要先有一定的理解。
1.3.1嵌入式控件(EmbeddableComponents)
每个ArcGIS控件都是一个可嵌入的控件,能被放置到提供可视化编程环境的窗体或者对话框内。
被放置之后,这些ArcGIS控件能够连同别的嵌入式控件(例如命令按钮,下拉列表框等)一样重新定义尺寸和位置以构建应用程序中的用户界面。
1.3.2属性页(PropertyPages)
当每一个ArcGIS控件被放置到窗体或者对话框中之后,鼠标右键点击控件,从弹出菜单中选择“Properties”(属性),都会分别弹出一系列的属性页。
这些属性页提供了控件的部分属性和方法,并且允许开发者不使用或使用极少的代码来完成应用开发。
1.3.3ArcObjects
每一个ArcGIS控件都封装了一些粗粒度(coarsegrained)的ArcObjects以简化用户的开发工作,但同时也提供了访问高粒度(finergrained)ArcObjects的方法。
例如,PageLayoutControl控件封装了PageLayout对象(PageLayoutObject)。
PageLayout对象包含了至少一个MapFrame元素,其中有一个包含有多层矢量图、要素或者通常所说的Layer对象的Map对象。
每一个ArcGIS控件提供了封装在ArcObjects中最频繁使用的属性和方法的访问方法。
例如,MapControl中的SpatialReference(空间参考)属性项,提供了设置地图对象中空间参考属性的方法。
每一个ArcGIS控件同时也有一些实现简单任务的方法。
例如,MapControl有AddShapeFile(用来添加ShapeFile文件)方法。
ArcGIS控件是典型应用开发的起点,不仅因为它们提供用户界面,同时也提供对象模型的直接方法。
1.3.4事件(Events)
每一个ArcGIS控件都能相应终端用户的键盘和鼠标操作。
其他的事件用于相应控件内部的操作。
例如,当一个地图文件被载入到MapControl中时,会触发OnMapReplaced事件,或者说当一个对象被拖拽到MapControl上时,会触发OnOleDrop事件。
1.3.5伙伴控件(BuddyControls)
ToolbarControl和TOCControl需要和其他“伙伴控件”协同工作。
通常说来,“伙伴控件”指的是MapControl,PageLayoutControl,ReaderControl,SceneControl或者GlobeControl。
“伙伴控件”可以在设计时通过控件的属性页来设置(在支持属性页的编译环境中设置)或者在程序中用SetBuddyControl方法来设置。
1.3.6控件命令(ControlCommands)
ArcGISEngine提供了与ArcGIS控件一起工作的一系列命令(commands),工具(tools)和菜单(menus)。
例如,MapControl和PageLayoutControl可以使用地图浏览,要素选择和图形元素命令等。
类似的,也有许多可供SceneControl,GlobeControl和ReaderControl使用。
对于使用独立控件的程序来说,在程序中新建一个命令的实例,并将这个实例通过OnCreate事件传递给控件就可以直接使用。
对于连同“伙伴控件”一起使用ToolbarControl的应用程序来说,这些命令可以被直接添加到ToolbarControl中,既可以在设计时通过属性页加入,也可以在程序运行过程中书写代码加入,如果在运行过程中,ToolbarControl处于客户定制状态,还可以由终端用户添加。
开发者可以使用ArcGISEngine创建自己的命令、工具和菜单来扩展ArcGIS控件。
HookHelper,GlobeHookHelper和SceneHookHelper对象能够用来简化开发。
具体的开发方法将在第五章详细列出。
1.3.7地图组织(MapAuthoring)
ArcGISDesktop应用程序能够创建预定义好的地图文件,之后载入到ArcGIS控件中以快速获得高质量的地图。
例如,ArcMap能创建可被载入到MapControl和PageLayoutControl中的地图文件。
预定义地图文件能够在组织地图数据和地图符号方面节省大量的时间。
当地图文件被载入到ArcGIS控件中之后,在需要改变地图外观的时候,对象模型仍然提供了通过程序来访问图层、元素和符号的方法。
下表小结了能够被载入到ArcGIS控件中的文件格式:
表1ArcGIS控件对应的文件格式
*ArcReaderControl只有选择ArcGISPublisher扩展之后才能获得。
然而,这里将其列出来是因为与ReaderControl相似。
**ArcGIS控件还不提供直接载入图层文件(*.lyr)的方法。
然而,它们可以通过MapDocument对象间接载入。
1.4重要控件简介
本次实习可能用到MapControl,PageLayoutControl,TOCControl和ToolbarControl,下面分别介绍这四种控件。
1.4.1MapControl和PageLayoutControl
MapControl和PageLayoutControl分别对应ArcMapDesktop应用中的“数据”和“发布”视图。
MapControl中封装了Map对象,PageLayoutControl中封装了PageLayout对象。
ArcMap应用程序中组织的地图文件能够直接载入到MapControl和PageLayoutControl中,以省去程序配置地图的时间。
地图文件能够在设计时通过MapControl和PageLayoutControl的属性页(在支持属性页的开发环境中)设置,控件可以被设置为“链接”(link)或者“包含”(contain)地图文件。
当选择“链接”时,控件将在生成的时候将地图载入并显示出地图文件的最新更新;而选择“包含”时,控件将会将地图文件中的内容复制到控件中,并且不再显示至此之后发生的文件更新。
同时,您也可以选择使用LoadMxFile方法在程序运行过程中载入地图文件(这种方法在之后的章节中会有详细介绍)。
下面详细介绍MapControl和PageLayoutControl的属性页。
1.MapControl
在MapControl控件上点击鼠标右键,选择属性,打开MapControl的属性页。
图3MapControl的General属性
属性页中包含General、Map、Color、picture四个选项卡。
General选择卡:
表2General的选项卡
BorderStyle:
用于设置MapControl控件边界的样式
Appearance:
用于设置MapControl控件的表现方式。
MousePointer:
用于设置鼠标在MapControl上的样式。
Enabled:
设置控件是否可用,这与属性表中的Enabled属性在功能上是相同的。
EnableOLEDropEvent:
设置控件是否响应拖拽事件,例如:
直接将地图拖入MapControl
PreviewinDesignMode:
设置是否在控件设计模式下显示地图。
ArrowKeyIntercept:
设置是否容许控件响应键盘
TooltipStyle:
设置地图Tooltip的样式(ToolTip是地图上的一种动态标注。
)
MapDocument:
用于载入ArcMap产生的MXD文件,如果您的文件时MXD类型的,可以选择这种方式载入地图,或代码在程序中载入。
关于后一种方法会在《通过代码载入图层》小节中加以介绍。
选择地图载入的方式,有两种方式载入地图,第一种是将地图数据载入到MapControl中,这种方式下,地图数据在生成程序时被载入到内存中,之后所有对地图的操作,在没有保存的前提下对原始的地图文件没有影响。
第二种方式,通过连接方式载入地图,表示对于地图的操作会影响到原始数据。
在MapControl中只是保持着与地图数据的链接。
Map选项卡
图4MapControl的Map选项卡
表3Map选项卡
Scale:
显示地图比例尺
ReferenceScale:
地图参考比例尺
Rotation:
设置地图的旋转角度
Units:
设置单位
SpatialReference:
设置或更改地图的空间参考。
InitialMap:
初始化地图
从左到右按钮的功能依此是:
加载图层(图层可以是单图层文件,可以是GoeDatabase,也可以是Shapefile)
向上移动图层、向下移动图层、删除图层、查看图层属性信息。
Color选项卡主要对地图颜色进行相关的设置,但通常关于地图的配色我们是通过代码来完成的,这个选项卡很少涉及。
Picture选项卡主要是对控件中的相关图片资源进行管理,例如鼠标样式等。
2.PageLayoutControl
图5PageLayoutControl的Page选项
对于PageLayoutControl控件的属性页而言,唯一与MapControl不同的是他存在page选项卡,该选项卡提供了页面大小,页面宽度和高度等修改的窗口。
MapControl和PageLayoutControl不仅可以读地图文件,同时也能写地图文件(*.mxd)。
两个控件都实现了IMxdContents接口,使得MapDocument对象能将MapControl和PageLayoutControl能够将其中的内容写入地图文件。
辅助方法(HelperMethods),例如MapCo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实习指导书第五章ArcGIS Engine二次开发入门 实习 指导书 第五 ArcGIS Engine 二次开发 入门