




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成 绩 中 国 矿 业 大 学 2012级 1 班课程实验报告考试科目 GIS设计与开发 考试时间 2015年7月1日 学生姓名 梁 莹 学 号 07122868 任课教师 张海荣 中国矿业大学环境与测绘学院2015年6月目 录【上机目的】1【上机内容】1【上机要求】1【详细步骤】11 使用控件创建第一个桌面应用程序12 地图打开与保存33 缩放与漫游94 属性查询135 空间查询166 建立地理空间数据库197 添加shape数据,栅格数据238 鹰眼图26【实习总结】28基于ArcObjects组件的常用GIS功能实现【上机目的】熟悉Visual Studio开发环境,掌握ArcGIS Engine的组件式开发方式,掌握GIS基本功能的开发方法。【上机内容】以ArcObjects for .NET为开发包,用C#高级程序设计语言二次开发一个包含GIS基本操作的应用程序,实现地图文档的打开、保存、地图缩放/漫游,属性查询,空间查询,建立并访问地理空间数据库,TOC控件的右键菜单,添加shape数据,栅格数据等。【上机要求】1完成代码的编写工作,通过对示例代码的学习,把这些分散的代码相互粘合起来,形成一个能实现常用GIS功能的应用程序。学会Visual Studio 2010代码常用调试方法,学会Query Interface。2了解利用ComGIS进行应用型地理信息系统建设工作的基本思路。3独立实验,认真、按时完成实验报告。 代码编写过程中,同时思考以下问题: (1)数据源如何被加载访问的?ArcGIS数据组织方式是怎样的? (2)ArcGIS Engine开发中所涉及的面向对象知识中诸如类,继承,对象,接口等如何表达的?【详细步骤】1 使用控件创建第一个桌面应用程序 1.1 新建项目在开始菜单中找到 Microsoft Visual Studio 2010(简称 VS),打开新建一个 Windows 窗体应用程序(文件-新建-项目-Windows 窗体应用程序) ,见图1.1.1图 1.1.1 新建工程1.2 添加容器和控件拖动工具箱容器里的Panel控件至窗体(默认Name为panel1),右键属性调整Dock为Top;拖动分栏控件SplitContainer至panel1下面,调整Dock属性为Fill,并添加TOC,Map,Toolbar 控件,见图1.2.1图 1.2.1 构建模块1.3 添加地图文档在Map处右击,修改其属性,添加地图文档,见图1.3.1图 1.3.1 添加地图文档1.4 运行结果经过调试,查看运行结果,见图1.4.1图 1.4.1 运行结果2 地图打开与保存2.1 添加控件(1) 在 Microsoft Visual Studio 2010(以下简称VS)中新建工程,设计窗体布局,添加控件:AxMapControl 即Map 地图控件,AxTOCControl 目录控件, AxToolbarControl GIS 工具栏控件,见图2.1.1图2.1.1 添加控件(2) 关联控件,使窗体中添加的三个控件保持行为一致,即当地图发生变化的时候,其他控件相应发生改变,同时可以利用其他控件对地图进行操作,设置方法见图2.1.2图 2.1.2 控件关联2.2 添加事件(1) 从工具箱中的菜单和工具栏把 MenuStrip 工具条拖到 panel1 里,新建文件 菜单,在子菜单里新建“打开mxd文档”项,修改属性 Name 为 OpenMxd,并建立OpenMxd 的 Click 事件的委托处理函数,见图1.2.1 图 2.2.1 添加打开地图文档事件(2) 在文件菜单的子菜单里新建“保存mxd文档”项,修改Name为SaveMxd,并建立其Click时间的委托处理函数,见图2.2.2 图 2.2.2 添加保存地图文档事件2.3 设计代码(1) 打开代码窗口,为OpenMxd_Click函数添加代码,实现其打开地图文档的功能,代码如下: private void OpenMxd_Click(object sender, EventArgs e) OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = 打开mxd文档; openFileDialog.Multiselect = false; openFileDialog.Filter = *.mxd|*.mxd; openFileDialog.RestoreDirectory = true; if (openFileDialog.ShowDialog() = DialogResult.OK) try IMapDocument mapDocument = new MapDocumentClass(); bool isPasswordProtected = mapDocument.get_IsPasswordProtected(openFileDialog.FileName); if (!isPasswordProtected) axMapControl2.LoadMxFile(openFileDialog.FileName, 0, string.Empty); catch MessageBox.Show(打开地图文档失败 + openFileDialog.FileName); (2) 为SaveMxd_Click函数添加代码,实现其打开地图文档的功能,代码如下: private void SaveMxd_Click(object sender, EventArgs e) if (axMapControl2.Map.LayerCount = 0) else IMxdContents mxdContents = axMapControl2.Map as IMxdContents; IMapDocument mapDocument = new MapDocumentClass(); mapDocument.Open(axMapControl2.DocumentFilename, ); IActiveView activeView = axMapControl2.Map as IActiveView; mapDocument.ReplaceContents(mxdContents); if (mapDocument.get_IsReadOnly(mapDocument.DocumentFilename) = true) MessageBox.Show(本地图文档是只读的,不能保存!); else try mapDocument.Save(true, true); MessageBox.Show(地图文档保存成功!); catch 1.4 运行结果(1) 点击运行,修改错误列表中的各项问题,添加引用,并设置引用的嵌入互操作类型为False,得到运行初始界面,见图1.4.1图 2.4.1 初始界面(2) 点击文件菜单,选择打开mxd文档就,选择需要打开的地图文档(见图2.4.2),尝试用工具栏中的工具对地图进行操作,见图2.4.3图 2.4.2 文档打开窗口图 2.4.3 打开地图文档(3) 将地图调整到想要的视图界面,单击保存mxd文档选项,见图1.4.4,则当下次打开地图文档时,显示的就是本次保存的地图视图。图 2.4.4 保存地图文档3 缩放与漫游3.1 添加控件在菜单栏添加常用功能菜单,在其子菜单中添加放大菜单,双击添加鼠标单击处理委托。同理,添加缩小,漫游,全图菜单,见图2.1.1图 3.1.1 添加菜单选项3.2 创建事件添加 axMapControl1的OnMouseDown 事件处理函数,并在属性中分别为菜单选项创建Click委托事件函数,见图2.2.2图 3.2.2 创建事件3.3 设计代码(1) 放大,其中Flag为地图On Mouse函数中调用参数 int flag; private void 放大ToolStripMenuItem_Click(object sender, EventArgs e) flag = 1; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomIn; (2) 缩小 private void 缩小ToolStripMenuItem_Click(object sender, EventArgs e) flag = 2; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomOut; (3) 全局 private void 全局ToolStripMenuItem_Click(object sender, EventArgs e) axMapControl1.Extent = axMapControl1.FullExtent; (4) 漫游 private void 漫游ToolStripMenuItem_Click(object sender, EventArgs e) flag = 3; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan; (5) 添加axMapControl1的OnMouseDown事件处理函数代码 private void axMapControl1_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvent e) IEnvelope envelope = null; switch (flag) case 2: envelope = axMapControl1.Extent; envelope.Expand(2, 2, true); axMapControl1.Extent = envelope; flag = 0;axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; break; case 1: /*envelope = axMapControl2.TrackRectangle();*/ envelope = axMapControl1.Extent; envelope.Expand(0.5, 0.5, true); axMapControl1.Extent = envelope; flag = 0;axMapControl1.MousePointer =esriControlsMousePointer.esriPointerDefault; break; case 3: envelope = axMapControl1.Extent; axMapControl1.Pan(); flag = 0;axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; break; 3.4运行结果运行程序,打开地图图层(图3.4.1),对地图进行常规功能的操作,如放大(见图3.4.2),缩小(图3.4.3),漫游(图3.4.4),全局(图3.4.5)图 3.4.1 打开地图图 3.4.2 放大图 3.4.3 缩小图 3.4.4 漫游图 3.4.5 全局4 属性查询4.1 添加控件(1)在菜单栏添加属性查询菜单,见图4.1.1图 4.1.1(2) 在工程中新添加窗口,用来显示属性列表,并在窗口中插入工具箱的Data项添加datagridview,设置duck属性为fill,见图4.1.2图 4.1.2 新增属性查询结果窗口4.2 添加事件右击属性查询,打开属性窗口,为属性查询添加Click事件,见图4.2.1图 设计代码(1) 在新增属性查询结果窗口的代码中新建类,并设置数据加载函数: public partial class Form2 : Form private DataTable dataTable; public Form2(DataTable dataTable) this.dataTable = dataTable; InitializeComponent(); private void Form2_Load(object sender, EventArgs e) if (dataTable != null) dataGridView1.DataSource = dataTable; (2)在FORM1窗体中,为属性查询的Click委托事件添加函数,使其实现单击属性查询,即能打开属性查询结果,并能显示地图中指定图层的属性表。 private void 属性查询ToolStripMenuItem_Click(object sender, EventArgs e) try ILayer layer = axMapControl1.get_Layer(0); IFeatureLayer featureLayer = layer as FeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; ILayerFields layerFields = featureLayer as ILayerFields; DataSet dataSet = new DataSet(dsTest); DataTable dataTable = new DataTable(featureLayer.Name); /创洹?建列 DataColumn dataColumn = null; for (int i = 0; i layerFields.FieldCount; i+) dataColumn = new DataColumn(layerFields.get_Field(i).Name); dataTable.Columns.Add(dataColumn); dataColumn = null; IFeature feature = null; IQueryFilter queryFilter = new QueryFilterClass(); IFeatureCursor featureCursor; queryFilter.WhereClause = POP_CLASS = + 5,000,000 and greater; featureCursor = featureClass.Search(queryFilter, true); feature = featureCursor.NextFeature(); while (feature != null) DataRow dataRow = dataTable.NewRow(); for (int j = 0; j 0) Form2 attributeQueryResult = new Form2(dataTable); attributeQueryResult.ShowDialog(); catch 4.4 运行结果点击调试运行,打开地图,点击属性查询,得到属性查询结果,见图4.4.1图 4.4.1 属性查询结果5 空间查询5.1 添加菜单添加菜单“空间查询”,并下设子菜单“点选”、“矩形选择”,见图5.1.1图 5.1.1 添加菜单5.2 添加事件(1) 右击点选,修改Name,并为其添加Click事件,见图5.2.1 图 5.2.1(2) 用与1同样的方法为“矩形选择”修改属性,添加事件。5.3 设计代码(1) 点选,为点选添加flag值,并在axMapControl1的OnMouseDown事件处理函数中添加事件触发代码。(2) 矩形选择 5.4 运行结果(1) 运行工程,加载地图,选择点选选项,选中需要选择的地图区域,见图5.4.1图 5.4.1 点选(2) 单击矩形选择,选中区域,见图5.4.2图 5.4.2 矩形选择6 建立地理空间数据库6.1 创建个人数据库(1) 打开ArcCatalog 新建文件夹连接到要创建Personal Geodatabase的文件夹下面,新建Personal Geodatabase,并重命名。件图6.1.1图6.1.1 新建个人数据库(2) 在个人数据库中导入 shape 数据,建立好个人数据库,见图6.1.2图 添加事件在文件菜单下添加“打开个人数据库”子菜单,并打开其属性,添加Click事件,见图6.2.1和图6.2.2图 6.2.1 新建子菜单图6.2.2 创建Click事件6.3 设计代码打开“打开个人数据库”的Click函数所在位置,添加代码,实现在文档中添加个人数据库的功能。图 6.3.1 添加个人数据库6.4 运行结果点击运行程序,打开地图,单击“添加个人数据库”选择个人数据库文件,见图6.4.1图 6.4.1 打开个人空间数据库但是由于不明原因的异常,经调试无果,还是无法成功加载数据库,异常情况见图6.4.2图 6.4.2 加载异常相同代码在同学工程中成功运行,现展示下运行结果,见图6.4.3图 6.4.3 添加个人数据库7 添加shape数据,栅格数据7.1 添加菜单在菜单中添加子菜单“打开shp数据”和“添加影像数据”,见图7.1.1图 7.1.1 添加菜单7.2 设计“添加shp数据”双击“添加shp数据”,为其创建Click触发事件函数,实现添加.shp格式文件的功能,代码见图7.2.1图 7.2.1 添加shp数据7.3 设计“添加影像数据”双击“添加影像数据”,为其创建Click触发事件函数,实现添加影像数据的功能,代码见7.3.1图 7.3.1 添加影像数据7.4 运行结果(1) 运行程序,解决错误列表中关于引用数据集的问题,选择需要添加的文件,见图7.4.1,并查看结果,见图7.4.2图 7.4.1 选择添加文件图 7.4.2 添加文件结果(2) 单击“添加影像数据”,选择想要添加的“CUMT.png”文件,查看添加结果,见图7.4.3图 7.4.3 添加影像数据8 鹰眼图8.1 添加控件在工程中添加用来显示鹰眼图的Map Control控件,见图8.1.1图 8.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无锡美容护肤小知识培训课件
- 2025年网络安全工程师招聘面试模拟题及实战案例分析
- 2025年项目经理面试经验与常见问题解答
- 2025年建筑行业项目经理竞聘笔试题目与答案解析
- 2025年连锁酒店集团运营总监岗位招聘面试题及答案
- 2025年建筑物业管理岗位应聘宝典物业项目经理招聘考试模拟题
- 2025年销售代表高级实战模拟面试题集及解析
- 2025年建筑师面试实战技巧及建筑设计趋势预测题
- 任务一 了解我们居住的社区说课稿-2025-2026学年小学劳动鲁科版六年级上册-鲁科版
- 《纸雕小天鹅》(教学设计)-2023-2024学年五年级上册综合实践活动鲁科版
- DBJ50-T-330-2025-建筑楼地面隔声保温工程应用技术标准
- 人教版2024-2025学年九年级英语下册教学计划(及进度表)
- T-NAHIEM 121-2024 创伤中心建设与设备配置规范
- 《磁感应强度-磁通量》课件
- 人教版九年级下册数学教学计划(及进度表)
- 业务协同与合并抵销报表方案汇报v1.9
- 标准预防及安全注射
- 儿童体适能教学 课件 (20期)
- 本质安全的概念和意义
- 2025-2030年中国少儿英语培训市场发展状况及投资前景规划研究报告
- 常用公文写作规范培训
评论
0/150
提交评论