




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GIS软件开发 3 主讲 王小东2020 3 25 1 第三讲ArcGIS控件开发实例 2工程描述 4编码开发 3加载ActiveX控件 1ArcGIS控件概述 2 1ArcGIS控件概述 ArcGIS控件的概念1 1嵌入式组件1 2属性页1 3对ArcObjects控件的封装粒度1 4事件1 5 伙伴 控件 Buddy控件 1 6控件命令 ControlCommand 1 7配置地图1 8控件简要 3 1 1嵌入式组件 每个ArcGIS控件都是可嵌入组件 在可视化的开发环境中 可以拖放到表单或对话框上 将其作为自己的容器 在这些容器中 它们与其他的ActiveX控件没有什么区别 都可以被重新定位或者改变大小 就如同常用的按钮或者组合框一样 易于使用 它们的作用就是在程序中提供能够所需的用户界面 4 1 2属性页 与其他的ActiveX控件一样 每个ArcGIS控件都有自己的一组属性页 在多数可视化开发环境中都能够访问 一旦控件被放置到容器中 只要在开发环境中选中控件 在控件上单击鼠标右键 然后从背景菜单中选择 属性 Properties 菜单项 就可以进入这些属性设置页 属性页提供了设置控件属性 方法的快捷方式通过设置控件的属性和方法 用户只需要写出有限的代码 就可以快速开发出应用程序 5 1 3对ArcObjects控件的封装粒度 每个ArcGIS控件都使开发过程得到了极大的简化 它们封装了较粗粒度的ArcObjects 同时通过它们 也能够访问更小粒度的ArcObjects 布局控件 PageLayoutcontrol 就封装了布局 PageLayout 对象 从实际功能来讲 该对象的主要作用是用来对地图制图的各种要素进行合理布局 以生成能够出版印刷的电子地图 完成电子制图这一目的 PageLayout包含至少一个地图边框 MapFrame 要素 在地图边框中 含有一副地图 而地图则由多个图层 Layer 对象构成 每个图层对象应有栅格 Raster 矢量数 Featureclass 等作为数据源 6 1 4事件 事件是一个常用的编程术语 它表明用户使用输入设备进行了某些操作 或者在应用程序内部出现了某种情况 需要应用程序对此做出某种响应 它体现了用户和计算机之间 以及程序内部各部件之间的交互 每个ArcGIS控件都会激发各种事件 有些事件用来响应用户键盘输入和鼠标操作 而有些事件则用来响应控件内部发生的操作 例如 当MapControl加载某个地图文档时 就会激发OnMapReplaced事件 或者拖动一个对象到MapControl上时 会激发一个OnOleDrop事件 7 1 5 伙伴 控件 Buddy控件 ArcGIS控件并不是彼此孤立的 它们之间也需要进行相互通信 实现一定的协同 从而引出了 伙伴 控件的概念 在所有ArcIGIS控件中 ToolBarControl和TOCControl两个控件 都需要与一个其他的 伙伴 控件一起协同工作ToolBarControl或TOCControl的 伙伴控件 通常是MapControl ReaderControl SceneControl GlobeControlPageLayoutControl或等控件中某一个 8 1 6控件命令 ControlCommand 为方便开发人员进行开发 ESRI对一些常用功能和常见操作进行了封装 ArcGISEngine提供了丰富的命令 工具和菜单 用于同ArcGIS控件一起协同工作 举例来说 就有一套地图漫游 要素选取和图形命令 可以在使用MapControl和PageLayoutControl开发的应用中使用 同样对SceneControlGlobeControl和ReaderControl来说 也有一组配合使用的命令 当然这些命令 工具和菜单不能满足全部要求 程序开发人员可以自己定制和开发行的命令 工具和菜单 在自定义的命令和工具开发中 最重要的是实现工具和控件之间的通信 9 1 7配置地图 ArcGIS桌面应用可以用来预先对要在ArcGIS控件中展示的地图进行配置 这样可以快捷方便地对其加以展示 由于事先进行了配置 它所具有的地图展示效果也将是出众的 使用ArcMap配置的地图文档 可以被MapControl和PageLayoutControl控件显示 预先配置文档的好处在于 避免了使用程序代码从头开始加载数据 现地配置地图符号的过程 10 1 8控件简要 MapControl和PageLayoutControl与ArcMap应用的 数据视 和 布局视 是一一对应的 Mapcontrol是对Map对象的封装 PageLayoutcontrol是对PageLayout对象的封装 MapControl和PageLayoutControl控件要加载的地图对象可以在设计时加以制定 通过他们各自的属性页来实现 有两种加载方式 连接 link 和 包含 contain 还有一种灵活的加载方式 通过LoadMxFile方法以代码的形式添加 11 控件编程之旅 对于迫切想要使用ArcObjects中ActiveX控件来开发和部署应用程序的开发人员来说 本节提供了很好的引导和借鉴作用 能够帮助大家决定如何下手 何处下手的问题 本节示例展示了生成和部署代码的全过程 同时提供了一个开发更为复杂的应用程序的起点 12 2工程描述 2 1实现过程及功能2 2前提条件 13 2 1实现过程及功能 本示例实现过程及功能如下 1 在MapControl和PageLayoutControl中加载地图文档 2 设置和使用ToolbarControl TOCControl 3 处理表单大小改变事件 4 在ToolbarControl中添加命令 5 创建弹出式菜单 6 创建缩略图 14 2 2前提条件 开发示例中用到的控件 MapcontrolPageLayoutControlToolbarControlTocControl开发示例中用到的类库 CartoObjectLibrarySystemObjectLibraryDisplayObjectLibrarySystemUIObjectLibraryGeometryObjectLibrary 15 3加载ActiveX控件 3 1创建VB工程3 2在工程加载ArcGis控件3 3添加对ArcObjects类库的引用3 4在表单中嵌入ArcGIS控件 16 3 1创建VB工程 步骤如下 1 启动VisualBasic2 在工程创建对话中 选择新建 标准exe 工程3 单击 打开 按钮完成exe工程的创建4 在VB6 0的工程浏览窗口 选中project对象 然后修改工程名称5 单击文件菜单中的 保存 菜单项 保存工程 17 3 2在工程中加载ArcGis控件 在VisualBasic6 0中添加控件的方法如下 1 在VisualBasic6中 单击 工程 选中 组件 菜单项单击 调出组件添加对话框2 在组件添加对话框中 勾选 ESRIMapControl ESRIPageLayoutcontrol ESRITOCControl 和 ESRIToolbarControl 18 3 单击 确定 按钮 此时ArcGIS控件就出现在了VB的工具箱中了 3 3添加对ArcObjects类库的引用 添加对ArcObjects类库的引用的方法如下 1 在VB6中 再次单击 工程 菜单 选用 引用 菜单项2 在引用对话框中勾选如下类库ESRICartoObjectLibraryESRISystemObjectLibraryESRIDisplayObjectLibraryESRISystemUIObjectLibraryESRIGeometryObjectLibrary3 单击 确定 按钮 19 3 4在表单中嵌入ArcGIS控件 打开工程中的表单 在表单中添加ActiveX控件 并调整大小 布局如下 20 4编码开发 4 1加载地图文档4 2设置伙伴控件4 3处理表单Resize事件4 4在ToolbarControl中添加命令4 5创建弹出式菜单4 6在MapControl中绘制图形4 7实现工具条定制 21 4 1加载地图文档 使用ArcMap配置好的的单个地图文件或者地图文档 可以加载到MapControl和PageLayoutControl控件中 步骤如下 1 在表单上双击 以显示编码窗口2 选择Form Load事件 在该事件中添加如下代码 DimsFileNameAsStringsFileName C arcgis ArcTutor Editor CreatingNewFeatures mxd IfPageLayoutControl1 CheckMxFile sFileName ThenPageLayoutControl1 LoadMxFilesFileNameEndIf 22 3 选择PageLayoutControl1 OnPageLayoutReplaced事件 加入如下代码 将同一地图文档同时加载到MapControl中 在地图文档加载到PageLayoutControl中时 OnPageLayoutReplaced事件将被触发 PrivateSubPageLayoutControl1 OnPageLayoutReplaced ByValnewPageLayoutAsVariant MapControl1 LoadMxFilePageLayoutControl1 DocumentFilenameMapControl1 Extent MapControl1 FullExtentEndSub 23 4 2设置伙伴控件 在本应用程序中 TOCControl和ToolBarControl需要与PageLayoutcontrol协同工作 要实现这一点 就需要设置这两个控件为PageLayoutControl的 伙伴控件 在Form Load 事件中添加如下代码实现 伙伴控件 的设定 TOCControl1 SetBuddyControlPageLayoutControl1ToolbarControl1 SetBuddyControlPageLayoutControl1 24 4 3处理表单Resize事件 当表单大小在程序运行过程中变化PageLayoutcontrol和Mapcontrol不能自动改变其自身大小 要改变这些控件的大小 就需要编码来响应Form Resize事件 如果PageLayoutControl和Mapcontrol中包含大量的数据Form Resize事件中对其进行重绘将会花费很大的开销 出于优化程序性能的目的 可以在窗口改变大小的过程中 使用缩放位图的方法来加快显示速度 等到窗口大小完全确定之后 才进行实际的数据重绘工作 这可以通过PageLayoutcontrol和Mapcontrol中SuppressResizeDrawing方法来实现 具体步骤及代码如下 25 1 在Form Resize中添加如下代码 PrivateSubForm Resize DimdWidthAsDouble dHeightAsDouble dMarginAsDoubledMargin TOCControl1 Width TOCControl控件的宽度dHeight Form1 ScaleHeight PageLayoutControl1 TopIfdHeight 0ThenPageLayoutControl1 Height dHeightdWidth Form1 ScaleWidth MapControl1 WidthIfdWidth 0ThenPageLayoutControl1 Width dWidthTOCControl1 Height Form1 ScaleHeight 2515MapControl1 Top TOCControl1 Top TOCControl1 HeightMapControl1 Height PageLayoutControl1 Height TOCControl1 HeightEndSub 26 2 在Form Load事件中添加如下代码 MapControl1 SuppressResizeDrawingFalse Form1 hWndPageLayoutControl1 SuppressResizeDrawingFalse Form1 hWnd3 运行程序 查看此时的运行效果 27 4 4在ToolbarControl中添加命令 ArcGISEngine提供了120多个命令和工具 可以为MapControl PageLayoutControl和ToolBarControl直接使用 这些命令和工具提供了常用的GIS功能 如地图漫游 缩放操作 要素选择等 现在可以有选择地在程序中添加其中的某些命令和工具 具体编码操作如下 1 打开表单编码窗口2 选择Form Load事件 在地图文档加载之前 加入如下代码 28 DimsProgIdAsStringsProgId esriControlTools ControlsOpenDocCommand ToolbarControl1 AddItemsProgId False esriCommandStyleIconOnly 29 4 5创建弹出式菜单 除了向ToolBarControl添加控件命令 使其与 伙伴控件 一起协同工作之外 就如同在上一步中演示的一样 还可以创建生成弹出菜单 然后将控件命令添加到其中 充当应用程序的快捷菜单 下面创建一个可以在程序中 在PageLayoutControl中使用的弹出菜单 当用户在PageLayoutControl的显示区域内单击鼠标右键的时候 将弹出该快捷菜单 具体的代码添加步骤如下 30 1 在表单顶部的声明部分输入如下代码 OptionExplicitPrivatem pToolbarMenuAsIToolbarMenu2 在Form Load事件中添加如下代码 位置在添加命令语句之后 文档加载代码之前 Setm pToolbarMenu NewToolbarControl1 ToolbarMenuSetm pToolbarMenu CommandPool ToolbarControl1 CommandPoolsProgId esriCotrolTools ControlsPageZoomInFixedCommand m pToolbarMenu AddItemsProgId False esriCommandStyleIconAndText m pToolbarMenu SetHookPageLayoutControl1 建立勾连3 在PageLayoutControl1 OnMouseDown事件中添加图下代码 Ifbutton vbRightButtonThenm pToolbarMenu PopupMenux y PageLayoutControl1 hWndEndIf4 编译运行程序 查看运行结果 31 4 6在MapControl中绘制图形 在这一步中 我们将使用MapControl作为一个鸟瞰图的窗口 将PageLayoutControl中的地图的当前显示范围绘制在MapControl的显示区域内 当用户在PageLayoutControl的数据框中对数据进行漫游操作时 MapControl中的鸟瞰图将会同步更新显示在PageLayOutControl窗口内显示数据对应的空间范围 下面是具体的实现代码 32 1 在表单顶部的声明区添加如下代码OptionExplicitPrivatem pToolbarMenuAsIToolbarMenuPrivatem pEnvelopeAsIEnvelopePrivatem pFillSymbolAsISimpleFillSymbolPrivateWithEventsm pTransformEventsAsDisplayTransformation2 创建一个新的Public过程 名CreatOverviewSymbol在该过程中 将创建在MapControl中绘制数据显示区域的符号 并用此符号来代表PageLayoutControl窗口中焦点地图的显示范围 在该过程中添加如下代码 33 PrivateSubCreatOverviewSymbol DimpColorAsIRgbColorSetpColor NewRgbColorpColor RGB RGB 255 0 0 DimpOutlineAsILineSymbolSetpOutline NewSimpleLineSymbolpOutline Width 1 5pOutline Color pColorSetm pFillSymbol NewSimpleFillSymbolm pFillSymbol Outline pOutlinem pFillSymbol Style esriSFSHollow 定义填充类型EndSub 34 3 在Form Load事件中 调CreateOverViewSymbol过程 PrivateSubForm Load CreateOverViewSymbol EndSub 35 4 PageLayoutControl默认的事件接口是IPageLayoutControlEvents 这些事件并不能告诉你地图的PageLayout数据框中的显示范围发生的改变 要获知这些变化 需要使用PageLayoutControl中焦点地图的ITransformEvents接口 在PageLayOutControl OnPageLayoutReplaced事件中 添加如下代码 PrivateSubPageLayoutControl1 OnPageLayoutReplaced ByValnewPageLayoutAsVariant DimpActiveViewAsesricarto IActiveViewSetpActiveView PageLayoutControl1 ActiveView FocusMapSetm pTransformEvents pActiveView ScreenDisplay DisplayTransformation 建立勾连 该事件所响应的是当前视图发生改变时的激发的一系列动作 Setm pEnvelope pActiveView ExtentMapControl1 LoadMxFilePageLayoutControl1 DocumentFilenameMapControl1 Extent MapControl1 FullExtentEnd 36 5 在m pTransformEvents VisibleBoundsUpdated事件中添加下面的代码 这一事件会在地图显示范围发生变化的时候触发 用来设置地图新的显示范围 通过刷新MapControl 可以强制重新绘制位于其显示区域内的图形 PrivateSubm pTransformEvents VisibleBoundsUpdated ByValsenderAsesriDisplay IDisplayTransformation ByValsizeChangedAsBoolean Setm pEnvelope sender VisibleBounds 获取可视范围MapControl1 RefreshesriViewForeground 对Mapcontrol的前景进行刷新显示EndSub 37 6 在MapControl OnAfterDraw事件中添加下面的代码 使用上面在MapControl中创建的面状符号类绘制新显示范围 PrivateSubMapControl1 OnAfterDraw ByValdisplayAsVariant ByValviewDrawPhaseAsLong Ifm pEnvelopeIsNothingThenExitSubDimpViewDrawPhaseAsesriViewDrawPhasepViewDrawPhase viewDrawPhaseIfpViewDrawPhase esriViewForegroundThenMapControl1 DrawShapem pEnvelope m pFillSymbol 在mapcontrol中绘制EnvelopeEndIfEndSub7 编译运行程序 38 4 7实现工具条定制 如同在Form Load事件中象ToolbarControl添加控件命令一样 用户同样可以在程序运行时刻通过ToolbarControl的定制对话框向其添加命令 实现工具条的个性化定制 1 在表单的声明区域加入如下代码 PrivateWithEventsm pCustomizeDialogEventsAsesrit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度轻钢结构建筑节能评估与改造合同
- 2025版砂石料质量检测与认证服务合同范本
- 2025版沙子质量认证与销售代理合同样本
- 2025房地产项目古建筑修复与保护工程承包合同
- 食品购销合同书样本2篇
- 职业会计考试题库及答案
- 会计上岗考试题库及答案
- 未婚孩子协议书8篇
- 《煤矿安全规程(2025)》防治水新旧条文对照
- 传媒大学导演考试题目及答案
- 消除“艾梅乙”医疗歧视-从我做起
- 三级物联网安装调试员技能鉴定考试题及答案
- 体能恢复练习课时3:1、连续单脚跳;2、仰卧两头起;3、俯卧撑 教案
- 三年级上册信息技术教案全册
- 浙教版信息科技四年级上册全册教学设计
- 西师版小学六年级上册数学全册教案(表格式)
- SJ∕T 11614-2016 电动汽车驱动电机系统用金属化薄膜电容器规范
- 小学校本教材《中草药的认识》(中学也可用)
- (高清版)JTGT 3610-2019 公路路基施工技术规范
- 初中英语单词表大全(2182个带音标)
- 第一单元项目一探秘鸟类研究认识数据信息与知识课件沪科版高中信息技术必修1
评论
0/150
提交评论