地理信息系统工程实验报告.doc_第1页
地理信息系统工程实验报告.doc_第2页
地理信息系统工程实验报告.doc_第3页
地理信息系统工程实验报告.doc_第4页
地理信息系统工程实验报告.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

地理信息系统工程实验报告(二)一、实验内容 本次实验在上次实验所创建项目的基础上进行,围绕鹰眼窗口的地图同步功能的实现过程展开,通过学习 MapControl 控件的事件处理过程,了解事件处理的基本概念和调用结构;通过学习 Map 组件的事件处理过程,了解利用程序代码处理组件事件;了解“事件驱动”模式的基本概念,了解事件处理的控制流程及其涉及的主要部分,了解事件处理函数的定义规则和作用,学会利用时序图表达事件处理过程,学会通过编写代码的方式自定义事件委托和事件处理函数的基本方法。二、实验原理方案“事件驱动”“事件驱动”是一种常用的交互式程序控制模式,“事件”通常代表程序对象的某些特殊状态,这些状态是其他交互对象或者外界交互设备所关注的,它们可以根据这些状态做出特定的响应,那么程序对象就需要一种机制能够在这些特殊状态发生时通知其他交互方,而其他交互方也需要能自由选择对应的响应行为,这种机制就是“事件处理”机制。如果将主窗口看作被控制方,将鹰眼窗口看作控制方,则同步过程可以看作一种典型的事件处理过程,由控制方监听被控制方的“加载地图”事件,然后在事件响应中加载与被控制方相同的地图数据。“触发”“事件监听”“事件处理函数”“事件响应”三、实验器材计算机 vs2010 AE10.1四、实验步骤1、打开上次的工程文件MyGISProgress;2、在工具栏中找到属性按钮标签,单击,再在窗体体设计窗口中单击Form1窗口,查看相应的属性找到“”事件标签并单击,然后双击Load;3、按照2中的类似方式打开MapControl1的OnMapReplaced事件并双击打开代码编辑。五、实验结果分析 能进行交互操作 问题:鹰眼窗口和主地图窗口都是不可修改的内置事件,所以要交互必须要有一个中间过渡 get_Layer的问题 既然 ItemAdded 表示添加一个新图层的事件,为什么没有命名为更直接的LayerAdded?通常地图都需要加上一个鹰眼,要实现鹰眼功能,不可避免的就需要实现主地图和鹰眼的同步。令人失望的是ArcGIS的帮助文档和范例中都采用同时在主地图和鹰眼中加载mxd文档的方式来实现同步的,确切的说,这样只是加载了地图,并没有实现同步。如果程序启动后并没有加载任何地图文档,而只是添加图层,那么这种处理方式就暴露马脚了。其实会出问题的不仅仅是这种情况,当我们修改主地图的符号、样式等时,也会有问题,因此我们必须使用同步加载图层的方式来才能实现主图和鹰眼的同步。所谓同步加载图层,就是指直接在鹰眼中加载主图的图层,同步就是指主地图中的图层发生变化时这些变化也都要反映到鹰眼中去。 加载mxd文档好办,根据AE的帮助说明,当加载mxd文档后,MapControl会触发OnMapReplaced事件,我们可以在这个事件中添加相应的处理。但是当添加图层时,MapControl并没有并没有LayerAdded之类的事件,这种情况下,如果要同步鹰眼和主地图,就需要捕获类似于LayerAdded之类的事件。如何实现呢,答案就是IActiveViewEvents,具体如下: 添加事件对InitializeComponent 方法的影响,“+=”操作符 The operation was attempted on an empty geometry.六、实验小结地理信息工程实验报告(三)一、实验内容本实验是在上一实验的鹰眼窗口中进行对图形元素的操作,实现在鹰眼窗口中实时显示地图主窗口显示范围标志,并能在鹰眼中利用鼠标控制矩形框来控制主窗口地图显示范围,主要利用到IEnvelope 接口类型的组件对象,进行矩形框的代码编写(在上一实验中其实已经实现);了解 Map 组件在数据管理上的图层化结构,掌握AO 组件显示空间数据的基本模式:几何图形+显示符号,了解并熟练掌握IGraphicsContainer,IRectangleElement,IElement,ILineSymbol,IFillSymbol等一些与图形元素绘制相关接口的应用。二、实验原理1、在 AO 组件库中只有一个组件实现了 IEnvelope接口,即 Envelope 组件,它表示了一种特殊的矩形,这种矩形的边框与显示窗口的边框是平行的,常常用来表达其他空间图形的最小外包矩形(MER),在本实验中我们可以获取地图主窗口的 Extent 属性并将其矩形绘制在鹰眼窗口中,这样就实现了在鹰眼中标志地图显示范围的效果。2、Element元素对象是一个非常庞杂的对象集合,主要分为两大部分:图形元素(Graphic Element)和框架元素(Frame Element),本实验我们主要讨论应用图形元素。其中IElement是所有图形元素都实现的接口,它可以确定元素的Geometry属性,Element是一个抽象类。把图形元素添加到视图并显示,主要步骤如下:a、IGraphicsContainer创建一个容器并清除原来元素;b、创建矩形,定义矩形,获取新建矩形;c、创建相应地理要素,定义线性,线色,填充等符号特性d、在容器IGraphicsContainer中加载元素,刷新视图,让添加的元素可以显示出来。三、实验仪器四、实验步骤1、打开MyGISProgress工程文件2、在设计窗口单击MapControl1,找到OnExtenUpDated事件并双击打开,进行相应的代码编写3、进行矩形框的具体代码设计,主要涉及的接口类型和方法有,IGraphicsContainer,IActiveView,IRectangleElement,IElement,IEnvelope,IRgbColor,ILineSymbol,IFillSymbol,DeleteAllElement(),AddElement()等等。4、打开MapControl2中的OnMouseDown事件,并进行相应代码的编写,判断当点击鼠标左右键的区别,本实验中设定的是:点击左键移动当前矩形框的几何中心,点击右键并拖动可以改变矩形框大小,并在MapControl1中进行响应。主要用到两个if()判断,和IPoint,CenterAt(),和Extent等接口和属性。5、同样的道理我们可以在MapControl1的OnMouseDown事件中点击右键拖动,也可以显示相应的图层大小,并在鹰眼中显示同步并且可以改变矩形框的大小。6、进行程序调试直至完成。五、实验结果本实验的结果为,调试后未添加图层之前,在MapControl2鹰眼窗口初始化一个红色的矩形框,表示MapControl1地图主窗口的显示范围,加载图层后单击左键可以移动矩形框,改变地图主窗口的显示区域,拖曳鼠标右键可以改变矩形框大小,扩大图层显示比例。在实验过程中,我们要在Form_Load()事件中,加入矩形框的初始化语句才能使得没有加载图层之前,就已经出现矩形框; 当加载图层后,在IExtendsUpdated()事件中定义矩形框、图形元素和显示范围等,然后在OnMouseDown()事件中判断对矩形框的相应操作,六、实验小结实验四利用 Geodatabase API 读取 shapefiles 数据一、实验内容本实验继续之前的MyGISProgress工程实验,即主要完成属性表的显示和shapefiles文件的添加两个右键菜单功能的实现。实验通过 shapefiles 数据的读取操作,认识 Geodatabase 数据模型下矢量数据的基本管理结构和应用特征,理解 Geodatabase 数据模型的基本框架,掌握 AO 组件中的 Geodatabase API 基本调用规则,初步了解ESRI.ArcGIS.Geodatabase 库和ESRI.ArcGIS.DataSourceFile 库及其与本实验相关的接口如IWorkspaceFactory,IWorkspace,esriDatasetType,IDatasetIEnumDataset,IFeatureClass,ShapefileWorkspaceFactory。实验通过添加窗体、DataGridView控件进行相应shapefile图层属性表的显示和添加ContextMenuStrip控件进行右键菜单的实现。二、实验原理1、Geodatabase 的概念框架完全植根于关系型DBMS 的相关理论,在关系型 DBMS数据存储的基本结构是:数据库-数据集的集合-数据集-数据记录,其中的“-”表达包含关系。在 AO 的 Geodatabase API中都有对照的接口,数据库对应于 IWorkspace,数据集的集合对应于 IDatasets,数据集对应于 IDataset,而字段对应于 IField,在矢量要素环境下数据记录对应于IFeature,有不同的组件实现了上述接口,也有的组件同时实现了上述接口中的多个接口。本实验将通过 Shapefiles 数据的读取操作,分别介绍相关组件和接口的调用方法。2、由于 Shapefile 文件的数据库是以文件形式存储在本地磁盘中的,因此可以利用 IWorkspaceFactory 接口定义的OpenFromFile 方法来创建一个连接了指定 Shapefile 数据库的 Workspace 组件对象;要连接 Shapefile 文件的数据库,必须通过利用 ShapefileWorkspaceFactory 组件对象创建 Workspace 组件对象的方式来实现。Workspace 被定义为“数据集的集合的集合”,数据库中的数据集先按照类型被组合为多种“数据集的集合”(Datasets),然后这些个 Datasets 再组合为 Workspace,从而一个 Workspace 中能包含多种类型的数据集。因此,在这一模型下,要获取一个指定的数据集组件对象,需要先获取指定类型的“数据集的集合”(Datasets),这是一个实现了 IEnumDataset 接口的组件对象,然后在这个对象中查找指定的数据集组件对象。三、实验仪器四、实验步骤1、打开MyGISProgress工程项目;2、新建一个窗体,将窗体的 Name 属性修改为“LayerAttrib”,将窗体的 Text 属性修改为“图层属性表”。 然后向窗体中拖入一个 DataGridView 、MapControl、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论