




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 号1221030205实习报告GIS程序设计实习起止日期: 2015 年 7 月13 日 至 2015 年 7 月 19 日学生姓名吴馁班级12级地信2 班成绩指导教师(签字)地质与测绘学院2015年 7 月 20 日GIS程序设计实习一、实习目的通过GIS程序设计实习,使学生了解需求分析、项目管理方案设计、系统总体设计以及系统详细设计、系统实施、运行和维护等阶段要完成的具体工作;掌握在C#和ArcEngine环境下构建应用型地理信息系统的方法。二、实习内容l 熟悉开发环境:Visual Studio 2010; C#; Arc Engine 10.1l 功能需求分析l 基于组件技术开发应用型地理信息系统组件式技术已成为当今软件技术的潮流之一。组件式GIS软件的基本思想是把GIS各大功能模块划分为几个控件。各个GIS控件之间,以及GIS控件与其他非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。重点完成的工作包括:1) 建立ArcGIS Engine 应用程序框架;2) 实现对矢量数据(Shape File格式)的访问;3) 实现采用简单、唯一值、分类等多种方式对面状矢量数据进行渲染(Render)。三、实习步骤:实习一: 初识ArcGIS Engine 开发环境1、新建一个Windows窗体应用程序2、在新建窗体中添加控件在工具箱中选择添加toolbarcontrol,TOCControl,MapControl控件在解决方案资源管理器中双击program.cs在主函数中添加ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);使得文件可以加载到MapControl中。右击toolbarcontrol选择属性,如图选择Items选项,添加如图控件右击MapControl属性,在General的map document中添加要加载的地图文件通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1。试运行一下如图可以看出基本框架已经搭建好了,但是还得调整一下布局在工具箱的所有Windows窗体下选择控件,放在窗体里,如图分别选择窗体里TOCControl,MapControl的属性,将其Dock值设置为fill,如图调整窗体布局如图实习二:建立ArcGIS Engine 应用程序框架2.1 地图浏览1、新建项目,添加控件新建windows窗体应用程序,选择工具箱中StatusStrip(状态栏),将其拖入到窗体,再选择工具箱中的ToolbarControl控件拖入窗体,修改dock值为TOP,再将SplitContainer控件拖入窗体,Dock设置为Fill,将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为“Layer”,Text设置为“图层”;将tabPage2的Name设置为“Property”,Text设置为“属性”。选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill,选择“属性”选项卡,拖入所有Windows窗体|PropertyGrid控件,设置Dock属性为Fill。 拖入TabControl控件到Panel2,设置Dock属性为Fill。结果如图所示:2、加shp 数据在工具箱中选择MenuStrip控件,添加到左上角,命名为文件,下拉选项为打开矢量数据和打开栅格数据,如图:同样添加地图渲染,及其下拉选项简单渲染、唯一值渲染、分级渲染,如图:3、代码处理选中文件控件下的加入矢量数据控件,双击事件并写入代码,在开始使用ArcGIS Engine进行编码前,首先需要添加ArcGIS的引用,在解决方案管理器中右键点击“添加引用”,如图:using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.DataSourcesRaster; /为SHP数据功能 增加的类库 using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.Geodatabase; using System.IO;键入的代码如图:实习三:矢量要素符号化1、 简单渲染选中“简单渲染”菜单,在属性框中点击事件按钮,在事件列表中双击Click事件;或者双击“简单渲染”菜单,在方法内输入处理代码。部分代码如下:private void 简单渲染ToolStripMenuItem_Click(object sender, EventArgs e) IFeatureLayer pFLForRender = axMapControl1.get_Layer(0) as IFeatureLayer; SimpleRender(pFLForRender, ); private void SimpleRender(IFeatureLayer pFeatureLayer, string sFieldName) /设置用于渲染的颜色 IRgbColor pColor = new RgbColor(); pColor.Red = 255; pColor.Blue = 0; pColor.Green = 0; /设置用于渲染的符号的基本属性(面状符号) ISimpleFillSymbol pSFSBase = new SimpleFillSymbol(); pSFSBase.Style = esriSimpleFillStyle.esriSFSSolid; /设置填充方式 pSFSBase.Outline.Width = 0.4; /设置边框的宽度 pSFSBase.Color = pColor as IColor; /设置简单渲染的相关属性 ISimpleRenderer pSR = new SimpleRenderer(); pSR.Symbol = pSFSBase as ISymbol; /接口转换,对渲染方式进行设置 IGeoFeatureLayer pGFL = pFeatureLayer as IGeoFeatureLayer; pGFL.Renderer = pSR as IFeatureRenderer; /地图刷新 axMapControl1.Refresh(); 2、 唯一值渲染private void 唯一值渲染ToolStripMenuItem_Click(object sender, EventArgs e) IFeatureLayer pFLForRender = axMapControl1.get_Layer(0) as IFeatureLayer; DefineUniqueValueRender(pFLForRender, CONTINENT); private void DefineUniqueValueRender(IFeatureLayer pFeatureLayer, string sFieldName) /变量声明 bool bValFound; /判断要素值是否存在 int iFieldIndex; /用于存储字段所在的索引值 /设置颜色列表,用于随机生成颜色(用于填充面状要素) /设置颜色的基本属性,包括色调(H)、饱和度(S)以及亮度(V) IRandomColorRamp pRCR = new RandomColorRamp(); pRCR.StartHue = 76; pRCR.EndHue = 188; pRCR.MinSaturation = 20; pRCR.MaxSaturation = 40; pRCR.MaxValue = 85; pRCR.MaxValue = 100; pRCR.UseSeed = true; pRCR.Seed = 43; /设置唯一值渲染的相关属性 IUniqueValueRenderer pUVR = new UniqueValueRenderer(); pUVR.FieldCount = 1; pUVR.set_Field(0, sFieldName); /遍历要素类的所有要素,并为每个要素设置基本的渲染形式 /遍历要素类中的所有要素 IFeatureClass pFC = pFeatureLayer.FeatureClass; IFeatureCursor pFCursor = pFC.Search(null, false); /通过遍历,返回要素指针(FeatureCursor) IFeature pFeature = pFCursor.NextFeature(); /获取当前第一个要素 /获得指定字段的索引值 IFields pFields = pFCursor.Fields; iFieldIndex = pFields.FindField(sFieldName); /为不同的要素,设置不同的填充颜色 pRCR.Size = pFC.FeatureCount(null); /获得应产生的颜色的数目 bool bOK; pRCR.CreateRamp(out bOK); /判断随机颜色生产是否成功? /获得随机生成的颜色列表 IEnumColors pEnumColors = pRCR.Colors; pEnumColors.Reset(); IColor pColorForFeature = pEnumColors.Next(); /开始遍历,为每个要素设置基本的渲染信息 while (pFeature != null) /为每个要素设置基本的渲染符号 ISimpleFillSymbol pSFSForFeature = new SimpleFillSymbol(); pSFSForFeature.Style = esriSimpleFillStyle.esriSFSSolid; pSFSForFeature.Outline.Width = 0.4; pSFSForFeature.Color = pColorForFeature; /获得当前要素中指定字段的名称 string sFeatureName; sFeatureName = pFeature.get_Value(iFieldIndex) as string; /设置唯一值渲染的相关属性 pUVR.AddValue(sFeatureName, sFieldName, pSFSForFeature as ISymbol); pUVR.set_Label(sFeatureName, sFeatureName); pUVR.set_Symbol(sFeatureName, pSFSForFeature as ISymbol); /设置该值渲染信息 /获得下一组要素和颜色 pFeature = pFCursor.NextFeature(); pColorForFeature = pEnumColors.Next(); /接口转换,对渲染方式进行设置 IGeoFeatureLayer pGFL = pFeatureLayer as IGeoFeatureLayer; pGFL.Renderer = pUVR as IFeatureRenderer; /地图刷新 axMapControl1.Refresh(); 3、分级渲染先打开ArcMap讲要导入数据的属性表打开添加一个字段命名为X,并进行计算几何处理,分级渲染便以这个字段里的值分级,分为两级,最小值到90,和90到最大值。代码如下:private void 分类渲染ToolStripMenuItem_Click(object sender, EventArgs e) IFeatureLayer pFLForRender = axMapControl1.get_Layer(0) as IFeatureLayer; ClassBreakRender(pFLForRender, x); private void ClassBreakRender(IFeatureLayer pFL, string sFieldName) IRandomColorRamp pRCR = new RandomColorRamp(); IClassBreaksRenderer pCBR = new ClassBreaksRenderer(); pRCR.StartHue = 76; pRCR.EndHue = 188; pRCR.MinSaturation = 20; pRCR.MaxSaturation = 40; pRCR.MinValue = 85; pRCR.MaxValue = 100; pRCR.UseSeed = true; pRCR.Seed = 43; pCBR.Field = sFieldName; pCBR.BreakCount = 2; IFeatureClass pFC = pFL.FeatureClass; pRCR.Size = 3; bool bOK; pRCR.CreateRamp(out bOK); if (bOK = true) IEnumColors pEC = pRCR.Colors; pEC.Reset(); IColor pColorForFeature = pEC.Next(); for (int i = 0; i pCBR.BreakCount; i+) ISimpleFillSymbol pSFSForFeature = new SimpleFillSymbol(); ISimpleFillSymbol pSFSForFeature1 = new SimpleFillSymbol(); pSFSForFeature.Style = esriSimpleFillStyle.esriSFSSolid; pSFSForFeature.Outline.Width = 0.4; pSFSForFeature.Color = pColorForFeature; switch (i) case 0: pCBR.set_Break(i, 90); pCBR.set_Label(i, -92 - 90); pCBR.set_D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商场安全员培训课件
- 2025年汽车行业智能网联技术发展前景研究报告
- 2025年可再生能源行业可再生能源发电技术及市场前景研究报告
- 2025年风电行业风能利用技术发展前景研究报告
- 2025年电信通讯行业5G技术应用前景研究报告
- 2025年区块链行业区块链数字资产交易市场前景研究报告
- 定海区2025年浙江舟山市定海区环境卫生管理中心编外招聘2人笔试历年参考题库附带答案详解
- 大足区2025重庆大足区某机关事业单位招聘2人笔试历年参考题库附带答案详解
- 商品食品安全培训资料课件
- 国家事业单位招聘2025中国农科院蔬菜所李宝聚团队招聘植物生理学方向博士后笔试历年参考题库附带答案详解
- 人工智能深度学习概念与应用测试卷
- 离子检验-教案-
- GB/T 12643-2025机器人词汇
- Unit 5 Lesson 20 The Spring Festival Is Coming!(说课稿)-2024-2025学年冀教版(三起)英语五年级上册
- 智能悬架系统集成开发关键技术与实践-2024-12-技术资料
- 应用PDCA降低药占比
- 分包商安全管理规定(4篇)
- 超重与失重+说课高一上学期物理人教版(2019)必修第一册
- 公司收取管理费协议书范本
- JTS-165-6-2008滚装码头设计规范-PDF解密
- 设备维修与保养(课件)
评论
0/150
提交评论