ArcEngine 二次开发实习初级讲义
出的ArcGIS 控件,或者说可视化控件,用来辅助应用程序开发(下文将针对控件进行更加详细的介绍)。
? MapControl
? PageLayoutControl ? SceneControl ? GlobeControl ? ToolbarControl ? TOCControl ? ReaderControl
? ToolbarControl中所用到的commands(命令)、tools(工具)和menus(菜单) 1.3.2 ArcGIS Engine Runtime
ArcGIS Engine的最后一部分是运行许可。所有用ArcGIS Engine SDK构建出的应用程序都需要不同级别的ArcGIS Engine运行许可才能够正常运行。ArcGIS Engine Runtime是ArcGIS Desktop(ArcGIS 桌面版)构建的平台,如果得到ArcGIS Engine应用开发许可,ArcGIS Desktop的用户就能够执行基本的基于Engine的应用。ArcGIS Engine Runtime从标准功能到企业级功能之间有许多不同的选择。 1.3.3 ArcGIS Engine的功能
ArcGIS Engine的功能十分强大。作为ArcGIS Engine开发者,您可以实现以下列出的和其他更多的功能,这包括:
? 用多个图层来显示地图,例如道路、水系、边界等 ? 地图的漫游和缩放 ? 地图上要素的确认
? 地图上要素的查询和定位 ? 根据属性值显示注记
? 根据航片或者卫片显示图像
? 绘制几何图形,例如点、线、弧、多边形 ? 添加描述性的文字
? 沿着线选择或者选择矩形、某一范围内、多边形等内部的要素 ? 选择距离在某一范围内的要素 ? 利用SQL语言来寻找和选择要素
? 利用专题地图来渲染要素,如唯一值法、分级法和点状密度法 ? 动态显示实时地图或者时序数据 ? 根据地理编码来寻找位置 ? 转换您地图的坐标系
? 根据几何操作来生成缓冲区、计算差值,或者进行求交、求并等运算 ? 编辑要素形状或者旋转地图
? 创建并更新要素的几何形状及其属性
编辑要素(Editing Features)
ArcGIS Engine开发包让您构建出能创建、修改和删除geodatabase中矢量要素或者shapefile文件的应用程序。标准的ArcGIS Engine Runtime能够让编辑shapefile文件或者personal geodatabase中简单要素的程序运行。然而,要构建企业级geodatabase的全部
- 6 -
ArcEngine 二次开发实习初级讲义
功能,就需要ArcGIS Engine Runtime中的Geodatabase Update选项。
空间建模和分析
通过增加ArcGIS Engine Runtime中的Spatial选项,您能够扩展ArcGIS Engine的功能。这个选项(Spatial选项)能提供一系列强劲的空间建模和分析功能。您能够创建、查询、表达和分析基于象元的栅格数据,能够集成栅格和矢量数据进行分析,能够从已有数据挖掘出新的信息,能够从多层数据中查询信息,能够在ArcGIS Engine应用程序中完美集成基于象元的栅格数据和矢量数据。
例如,您能够:
? 将要素(如点、线或者面)转化成栅格图
? 基于距离或者要素、栅格间的关系来创建栅格缓冲区 ? 根据点状要素生成密度图
? 生成等高线、坡度、可视化区域、方向和山体阴影 ? 栅格图的分类及显示
? 兼容TIFF,BIL,IMG,USGS DEM,SDTS,DTED等标准格式及多种其他格式
数据
? 三维可视化等
ArcGIS Engine Runtime中的3D选项让您通过使用Scene和Globe控件来有效的表达和分析区域及全球数据。您能够从多个不同的视点查看表面;您能够查询表面,决定从某个选中的位置看,哪些要素是可见的;您能够将栅格和矢量数据贴在表面以构建真实的透视影像。
例如,您能够:
? 显示Scene和Globe文档
? 展示交互性的透视图,包括漫游、缩放、旋转、倾斜、模拟飞行以便于表达和分
析
? 显示真实世界的表面要素,例如楼房
? 展示视域和可见范围分析、场景高度内插、剖面分析和最短距离分析
2 ArcGIS控件介绍
在ArcGIS Engine的二次开发中,ArcGIS控件给我们提供了具体的开发环境和方法。在ArcGIS Engine中共有7个控件,另外在部署过程中还有一个LicenceControl。下面将首先介绍ArcGIS控件,再详细介绍实习中可能用到的MapControl,TOCControl以及ToolbarControl。
2.1 ArcGIS控件简介
ArcGIS的控件是高度集成化的,首先能够让开发者构建和扩展ArcGIS的功能,其次能够提供图形用户界面(graphical user interface,GUI)。
下列展示出的每一个ArcGIS控件都可以被作为ActiveX控件,.NET控件或者可视化的JavaBean:
? MapControl——类似于“数据” ? PageLayoutControl
- 7 -
ArcEngine 二次开发实习初级讲义
? ToolbarControl
? TOCControl(Tablet of Contents Control) ? SceneControl ? GlobeControl ? ReaderControl
使用ArcGIS控件,可以用两种方式来构建应用程序,首先,ArcGIS控件可以被嵌入到已有的应用程序中,将地图相关的功能作为辅助添加进去,或者其次,ArcGIS控件可以用来创建一个独立的应用程序。不管使用哪种方式,一个独立的ArcGIS控件能够被嵌入到已有程序中或者TOCControl和ToolbarControl能够和其他ArcGIS控件联合使用,提供应用程序的部分框架。
对于所有的ArcGIS控件来说,有一些共同的主题、概念和应用方法等,在有效的使用这些控件来构建应用程序之前,有必要先有一定的理解。
2.1.1 嵌入式控件(Embeddable Components)
每个ArcGIS控件都是一个可嵌入的控件,能被放置到提供可视化编程环境的窗体或者对话框内。被放置之后,这些ArcGIS控件能够连同别的嵌入式控件(例如命令按钮,下拉列表框等)一样重新定义尺寸和位置以构建应用程序中的用户界面。 2.1.2 属性页(Property Pages)
当每一个ArcGIS控件被放置到窗体或者对话框中之后,鼠标右键点击控件,从弹出菜单中选择“Properties”(属性),都会分别弹出一系列的属性页。这些属性页提供了控件的部分属性和方法,并且允许开发者不使用或使用极少的代码来完成应用开发。 2.1.3 ArcObjects
每一个ArcGIS控件都封装了一些粗粒度(coarse grained)的ArcObjects以简化用户的开发工作,但同时也提供了访问高粒度(finer grained)ArcObjects的方法。例如,PageLayoutControl控件封装了PageLayout对象(PageLayout Object)。PageLayout对象包含了至少一个MapFrame元素,其中有一个包含有多层矢量图、要素或者通常所说的Layer对象的Map对象。每一个ArcGIS控件提供了封装在ArcObjects中最频繁使用的属性和方法的访问方法。例如,MapControl中的SpatialReference(空间参考)属性项,提供了设置地图对象中空间参考属性的方法。每一个ArcGIS控件同时也有一些实现简单任务的方法。例如,MapControl有AddShapeFile(用来添加ShapeFile文件)方法。ArcGIS控件是典型应用开发的起点,不仅因为它们提供用户界面,同时也提供对象模型的直接方法。 2.1.4 事件(Events)
每一个ArcGIS控件都能相应终端用户的键盘和鼠标操作。其他的事件用于相应控件内部的操作。例如,当一个地图文件被载入到MapControl中时,会触发OnMapReplaced事件,或者说当一个对象被拖拽到MapControl上时,会触发OnOleDrop事件。 2.1.5 伙伴控件(Buddy Controls)
ToolbarControl和TOCControl需要和其他“伙伴控件”协同工作。通常说来,“伙伴控件”指的是MapControl,PageLayoutControl,ReaderControl,SceneControl或者GlobeControl。“伙伴控件”可以在设计时通过控件的属性页来设置(在支持属性页的编译
- 8 -
ArcEngine 二次开发实习初级讲义
环境中设置)或者在程序中用SetBuddyControl方法来设置。 2.1.6 控件命令(Control Commands)
ArcGIS Engine提供了与ArcGIS控件一起工作的一系列命令(commands),工具(tools)和菜单(menus)。例如,MapControl和PageLayoutControl可以使用地图浏览,要素选择和图形元素命令等。类似的,也有许多可供SceneControl,GlobeControl和ReaderControl使用。对于使用独立控件的程序来说,在程序中新建一个命令的实例,并将这个实例通过OnCreate事件传递给控件就可以直接使用。对于连同“伙伴控件”一起使用ToolbarControl的应用程序来说,这些命令可以被直接添加到ToolbarControl中,既可以在设计时通过属性页加入,也可以在程序运行过程中书写代码加入,如果在运行过程中,ToolbarControl处于客户定制状态,还可以由终端用户添加。
开发者可以使用ArcGIS Engine创建自己的命令、工具和菜单来扩展ArcGIS控件。HookHelper,GlobeHookHelper和SceneHookHelper对象能够用来简化开发。具体的开发方法将在第五章详细列出。 2.1.7 地图组织(Map Authoring)
ArcGIS Desktop应用程序能够创建预定义好的地图文件,之后载入到ArcGIS控件中以快速获得高质量的地图。例如,ArcMap能创建可被载入到MapControl和PageLayoutControl中的地图文件。预定义地图文件能够在组织地图数据和地图符号方面节省大量的时间。当地图文件被载入到ArcGIS控件中之后,在需要改变地图外观的时候,对象模型仍然提供了通过程序来访问图层、元素和符号的方法。
下表小结了能够被载入到ArcGIS控件中的文件格式:
表1 ArcGIS控件对应的文件格式
*ArcReaderControl只有选择ArcGIS Publisher扩展之后才能获得。然而,这里将其列出来是因为与ReaderControl相似。
**ArcGIS控件还不提供直接载入图层文件(*.lyr)的方法。然而,它们可以通过MapDocument对象间接载入。
2.2重要控件简介
本次实习可能用到MapControl,PageLayoutControl,TOCControl和ToolbarControl,下面分别介绍这四种控件。
- 9 -
ArcEngine 二次开发实习初级讲义
2.2.1 MapControl和PageLayoutControl
MapControl和PageLayoutControl分别对应ArcMap Desktop应用中的“数据”和“发布”视图。MapControl中封装了Map对象,PageLayoutControl中封装了PageLayout对象。ArcMap应用程序中组织的地图文件能够直接载入到MapControl和PageLayoutControl中,以省去程序配置地图的时间。
地图文件能够在设计时通过MapControl和PageLayoutControl的属性页(在支持属性页的开发环境中)设置,控件可以被设置为“链接”(link)或者“包含”(contain)地图文件。当选择“链接”时,控件将在生成的时候将地图载入并显示出地图文件的最新更新;而选择“包含”时,控件将会将地图文件中的内容复制到控件中,并且不再显示至此之后发生的文件更新。同时,您也可以选择使用LoadMxFile方法在程序运行过程中载入地图文件(这种方法在之后的章节中会有详细介绍)。下面详细介绍MapControl和PageLayoutControl的属性页。
1. MapControl
在MapControl控件上点击鼠标右键,选择属性,打开MapControl的属性页。
属性页中包含General、Map、Color、picture四个选项卡。 General选择卡: Border Style:用于设置MapControl控件边界的样式 Appearance:用于设置MapControl控件的表现方式。 Mouse Pointer:用于设置鼠标在MapControl上的样式。 - 10 -