ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:1.72MB ,
资源ID:8970726      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8970726.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(山东建筑大学AE二次开发实习大作业课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

山东建筑大学AE二次开发实习大作业课程设计.docx

1、山东建筑大学AE二次开发实习大作业课程设计GIS设计与实现实验报告课 程: ArcGIS二次开发院 (部): 土木工程学院专 业: 地理信息系统 班 级: 地理XXX学生姓名: XXXX学 号: XXXXX指导教师: XXX 教研室主任:XXX 院长(主任): XXX 一、实验目的1、掌握ArcGIS二次开发的流程。2、熟悉ArcEngine平台进行二次开发。3、掌握GIS专题图开发操作。二、实验要求1、使用ArcGIS Engine平台,利用C#或者Java语言,开发专题图程序2、结合编程环境和ArcGIS Engine提供的控件,按照实验指导书要求,设计程序的界面3、工具条的功能分别为:放

2、大视图、缩小视图、平移视图、前一视图、后一视图、完全视图和增加图层。这些功能可以利用ArcGIS Engine提供的内置工具实现。4、专题图菜单中包含单值专题图、等级专题图和点密度专题图三项子菜单三、实验步骤1、新建项目 启动VS2010软件,新建一个Windows Forms Application工程并命名为“XXXX”2、设计程序界面(1)、按照指导书的实验要求布置窗体,设计程序界面,向窗体中添加一个SplitContainer容器,设置其属性中的Dock值为Fill;添加一个ToolbarControl控件,设置属性值Dock为Top;添加TOCControl和MapControl设置

3、属性Dock值都为Fill.(2)、向窗体中添加menuStrip菜单并命名为“专题图”,然后设置三个子菜单分别为“单值专题图”、“等级专题图”、“点密度专题图”(3)、按照指导书要求,在工具条添加放大视图、缩小视图、平移视图、前一视图、后一视图、完全视图和增加图层。(4)、为了实现专题图功能,需要加载一副具有数值型字段的多边形图,可以使用ArcGIS Engine自带的实例地图,在安装目录途径下寻找需要的实例地图“DeveloperKit10.0javasamplesdatausausa.gdb”下的图层states。(5)、程序界面设计完成后的效果为:3、专题图功能实现3.1、单值专题图功

4、能实现(1)、鼠标双击“专题图”的子菜单“单值专题图”,编写代码如下:namespace XXXX public partial class xxxxxx : Form public XXXX InitializeComponent(); private void Form1_Load(object sender, EventArgs e) private void 单值专题图ToolStripMenuItem_Click(object sender, EventArgs e) /获取当前图层 ,并把它设置成IGeoFeatureLayer的实例 IMap pMap = axMapContro

5、l1.Map; ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer; IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; /获取图层上的feature IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Se

6、arch(null, false); /定义单值图渲染组件 IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRenderer(); /设置渲染字段对象 pUniqueValueRenderer.FieldCount = 1; pUniqueValueRenderer.set_Field(0, STATE_NAME); /创建填充符号 ISimpleFillSymbol PFillSymbol = new SimpleFillSymbol(); pUniqueValueRenderer.DefaultSymbol = (ISy

7、mbol)PFillSymbol; pUniqueValueRenderer.UseDefaultSymbol = false; /QI the table from the geoFeatureLayer and get the field number of ITable pTable; int fieldNumber; pTable = pGeoFeatureLayer as ITable; fieldNumber = pTable.FindField(STATE_NAME); if (fieldNumber = -1) MessageBox.Show(Cant find field c

8、alled , Message, MessageBoxButtons.OK, MessageBoxIcon.Information); /创建并设置随机色谱 IRandomColorRamp pColorRamp = new RandomColorRamp(); pColorRamp.StartHue = 0; pColorRamp.MinValue = 99; pColorRamp.MinSaturation = 15; pColorRamp.EndHue = 360; pColorRamp.MaxValue = 100; pColorRamp.MaxSaturation = 30; pCo

9、lorRamp.Size = 100; /pColorRamp.Size = pUniqueValueRenderer.ValueCount; bool ok = true; pColorRamp.CreateRamp(out ok); IEnumColors pEnumRamp; pEnumRamp = pColorRamp.Colors; /为每个值设置一个符号 int n = pFeatureClass.FeatureCount(null); for (int i = 0; i n; i+) IFeature pFeature = pFeatureCursor.NextFeature()

10、; IClone pSourceClone = PFillSymbol as IClone; ISimpleFillSymbol pSimpleFillSymbol = pSourceClone.Clone() as ISimpleFillSymbol; string pFeatureValue = pFeature.get_Value(pFeature.Fields.FindField(STATE_NAME).ToString(); pUniqueValueRenderer.AddValue(pFeatureValue, 美国州名, (ISymbol)pSimpleFillSymbol);

11、/为每个符号设置颜色 for (int i = 0; i = pUniqueValueRenderer.ValueCount - 1; i+) string xv = pUniqueValueRenderer.get_Value(i); if (xv != ) ISimpleFillSymbol pNextSymbol = (ISimpleFillSymbol)pUniqueValueRenderer.get_Symbol(xv); pNextSymbol.Color = pEnumRamp.Next(); pUniqueValueRenderer.set_Symbol(xv, (ISymbo

12、l)pNextSymbol); /将单值图渲染对象与渲染图层挂钩 pGeoFeatureLayer.Renderer = (IFeatureRenderer)pUniqueValueRenderer; pGeoFeatureLayer.DisplayField = STATE_NAME; /刷新地图和TOOCotrol IActiveView pActiveView = axMapControl1.Map as IActiveView; pActiveView.Refresh(); axTOCControl1.Update();(2)、编写完成后,按F5编译代码,会出现错误,然后根据提示添加相

13、应的引用项,操作如下:然后在全部代码开头输入如下命令:3.2、等级专题图实现(1)、鼠标双击“专题图”菜单的“等级专题图”,编写代码如下: private void 等级专题图 ToolStripMenuItem_Click(object sender, EventArgs e) IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer; IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; IGeoFeatureLayer pGeo

14、FeatureLayer = pLayer as IGeoFeatureLayer; /获取图层上的feature IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); / /定义所需的接口对象和相关变量 IClassBreaksUIProperties pUIProperties; object da

15、taValues; object dataFrequency; /double cb; int breakIndex; long ClassesCount; int numClass; numClass = 10; double Classes; / /* Were going to retrieve frequency data from a population field and then classify this data*/ ITable pTable; pTable = pFeatureClass as ITable; IBasicHistogram pBasicHist = n

16、ew BasicTableHistogram(); ITableHistogram pTableHist; pTableHist = (ITableHistogram)pBasicHist; /Get values and frequencies for the population field into a table histogram object pTableHist.Field = POP2000; pTableHist.Table = pTable; pBasicHist.GetHistogram(out dataValues, out dataFrequency); IClass

17、ifyGEN pClassifyGEN = new Quantile(); pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass); Classes = (double)pClassifyGEN.ClassBreaks; ClassesCount = long.Parse(Classes.GetUpperBound(0).ToString(); /Initialise a new class breaks renderer and supply the number of class breaks and the field

18、 to perform the class breaks on. IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRenderer(); pClassBreaksRenderer.Field = POP2000; /pClassBreaksRenderer.BreakCount = ClassesCount; pClassBreaksRenderer.MinimumBreak = Classes0; pClassBreaksRenderer.SortClassesAscending = true; /设置着色对象的分级数目

19、pClassBreaksRenderer.BreakCount = int.Parse(ClassesCount.ToString(); /创建并设置随机色谱 IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRamp(); pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm; IEnumColors pEnumColors; IRgbColor pColor1 = new RgbColor(); IRgbColor pColor2 = new RgbCo

20、lor(); pColor1.Red = 100; pColor1.Green = 150; pColor1.Blue = 0; pColor2.Red = 100; pColor2.Green = 0; pColor2.Blue = 0; pColorRamp.FromColor = pColor1; pColorRamp.ToColor = pColor2; pColorRamp.Size = numClass; bool ok = true; pColorRamp.CreateRamp(out ok); pEnumColors = pColorRamp.Colors; pEnumColo

21、rs.Reset();/ use this interface to set dialog properties pUIProperties = pClassBreaksRenderer as IClassBreaksUIProperties; pUIProperties.ColorRamp = Custom; ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbol(); IColor pColor; int colors = new intnumClass; / be careful, indices are differen

22、t for the diff lists for (breakIndex = 0; breakIndex ClassesCount; breakIndex+) pClassBreaksRenderer.set_Label(breakIndex, ClassesbreakIndex + - + ClassesbreakIndex + 1); pUIProperties.set_LowBreak(breakIndex, ClassesbreakIndex); pSimpleMarkerSymbol = new SimpleFillSymbol(); pColor = pEnumColors.Nex

23、t(); pSimpleMarkerSymbol.Color = pColor; colorsbreakIndex = pColor.RGB; pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol); pClassBreaksRenderer.set_Break(breakIndex, ClassesbreakIndex + 1); /将等级图渲染对象与渲染图层挂钩 pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; /

24、刷新地图和TOOCotrol IActiveView pActiveView = axMapControl1.Map as IActiveView; pActiveView.Refresh(); axTOCControl1.Update(); (2)、按F5进行编译,出现问题如下解决该问题方法为,在Progrom.cs中添加如下一句代码:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);然后重新编译错误解决。3.3、点密度专题图(1)、鼠标双击“专题图”菜单的“点密度专题图”,编写实现该功能代码如下

25、:private void 点密度专题图ToolStripMenuItem_Click_1(object sender, EventArgs e) /获取当前图层 ,并把它设置成IGeoFeatureLayer的实例 IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer; IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFea

26、tureLayer; /获取图层上的feature IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); /定义点密度图渲染组件 IDotDensityRenderer DotDensityRenderer = new DotDensityRendererClass(); /定义点密度图渲染组件对象的渲

27、染字段对象 IRendererFields flds = (IRendererFields)DotDensityRenderer; flds.AddField(POP2000, POP2000); /flds.AddField(Shape, Shape); /定义点密度图渲染得符号对象 IDotDensityFillSymbol ddSym = new DotDensityFillSymbol(); IRgbColor BackColor = new RgbColor(); BackColor.Red = 255; BackColor.Blue = 0; BackColor.Green = 2

28、55; IRgbColor SymbolColor = new RgbColor(); SymbolColor.Red = 255; SymbolColor.Blue = 0; SymbolColor.Green = 0; /点密度图渲染背景颜色 ddSym.BackgroundColor = BackColor; ddSym.DotSize = 3; ddSym.FixedPlacement = true; /ddSym.Color = SymbolColor; ILineSymbol pLineSymbol = new CartographicLineSymbol(); ddSym.Out

29、line = pLineSymbol; /定义符号数组 ISymbolArray symArray = (ISymbolArray)ddSym; /添加点密度图渲染的点符号到符号数组中去 ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol(); pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle; pMarkerSymbol.Size = 0.3; pMarkerSymbol.Color = SymbolColor; ; symArray.AddSymbol(pMa

30、rkerSymbol as ISymbol); /设置点密度图渲染的点符号 /DotDensityRenderer.DotDensitySymbol =symArray; /获取所有记录中该字段的最大值和最小值 DataStatistics ds = new DataStatistics(); ICursor cursor = (ICursor)pFeatureLayer.FeatureClass.Search(null, false); IDataStatistics dataStatistics = new DataStatisticsClass(); dataStatistics.Field = POP2000; dataStatistics.Cursor = cursor; ESRI.ArcGIS.esriSystem.IStatisticsResults statisticsResults = dataStatistics.St

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1