山东建筑大学AE二次开发实习大作业课程设计.docx
- 文档编号:8970726
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:1.72MB
山东建筑大学AE二次开发实习大作业课程设计.docx
《山东建筑大学AE二次开发实习大作业课程设计.docx》由会员分享,可在线阅读,更多相关《山东建筑大学AE二次开发实习大作业课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
山东建筑大学AE二次开发实习大作业课程设计
GIS设计与实现
实验报告
课程:
ArcGIS二次开发
院(部):
土木工程学院
专业:
地理信息系统
班级:
地理XXX
学生姓名:
XXXX
学号:
XXXXX
指导教师:
XXX
教研室主任:
XXX
院长(主任):
XXX
一、实验目的
1、掌握ArcGIS二次开发的流程。
2、熟悉ArcEngine平台进行二次开发。
3、掌握GIS专题图开发操作。
二、实验要求
1、使用ArcGISEngine平台,利用C#或者Java语言,开发专题图程序
2、结合编程环境和ArcGISEngine提供的控件,按照实验指导书要求,设计程序的界面
3、工具条的功能分别为:
放大视图、缩小视图、平移视图、前一视图、后一视图、完全视图和增加图层。
这些功能可以利用ArcGISEngine提供的内置工具实现。
4、专题图菜单中包含单值专题图、等级专题图和点密度专题图三项子菜单
三、实验步骤
1、新建项目
启动VS2010软件,新建一个WindowsFormsApplication工程并命名为“XXXX”
2、设计程序界面
(1)、按照指导书的实验要求布置窗体,设计程序界面,向窗体中添加一个SplitContainer容器,设置其属性中的Dock值为Fill;添加一个ToolbarControl控件,设置属性值Dock为Top;添加TOCControl和MapControl设置属性Dock值都为Fill.
(2)、向窗体中添加menuStrip菜单并命名为“专题图”,然后设置三个子菜单分别为“单值专题图”、“等级专题图”、“点密度专题图”
(3)、按照指导书要求,在工具条添加放大视图、缩小视图、平移视图、前一视图、后一视图、完全视图和增加图层。
(4)、为了实现专题图功能,需要加载一副具有数值型字段的多边形图,可以使用ArcGISEngine自带的实例地图,在安装目录途径下寻找需要的实例地图
“\DeveloperKit10.0\java\samples\data\usa\usa.gdb”下的图层states。
(5)、程序界面设计完成后的效果为:
3、专题图功能实现
3.1、单值专题图功能实现
(1)、鼠标双击“专题图”的子菜单“单值专题图”,编写代码如下:
namespaceXXXX
{
publicpartialclassxxxxxx:
Form
{
publicXXXX
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
}
privatevoid单值专题图ToolStripMenuItem_Click(objectsender,EventArgse)
{//获取当前图层,并把它设置成IGeoFeatureLayer的实例
IMappMap=axMapControl1.Map;
ILayerpLayer=pMap.get_Layer(0)asIFeatureLayer;
IFeatureLayerpFeatureLayer=pLayerasIFeatureLayer;
IGeoFeatureLayerpGeoFeatureLayer=pLayerasIGeoFeatureLayer;
//获取图层上的feature
IFeatureClasspFeatureClass=pFeatureLayer.FeatureClass;
IFeatureCursorpFeatureCursor=pFeatureClass.Search(null,false);
//定义单值图渲染组件
IUniqueValueRendererpUniqueValueRenderer=newUniqueValueRenderer();
//设置渲染字段对象
pUniqueValueRenderer.FieldCount=1;
pUniqueValueRenderer.set_Field(0,"STATE_NAME");
//创建填充符号
ISimpleFillSymbolPFillSymbol=newSimpleFillSymbol();
pUniqueValueRenderer.DefaultSymbol=(ISymbol)PFillSymbol;
pUniqueValueRenderer.UseDefaultSymbol=false;
//QIthetablefromthegeoFeatureLayerandgetthefieldnumberof
ITablepTable;
intfieldNumber;
pTable=pGeoFeatureLayerasITable;
fieldNumber=pTable.FindField("STATE_NAME");
if(fieldNumber==-1)
{
MessageBox.Show("Can'tfindfieldcalled","Message",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
//创建并设置随机色谱
IRandomColorRamppColorRamp=newRandomColorRamp();
pColorRamp.StartHue=0;
pColorRamp.MinValue=99;
pColorRamp.MinSaturation=15;
pColorRamp.EndHue=360;
pColorRamp.MaxValue=100;
pColorRamp.MaxSaturation=30;
pColorRamp.Size=100;
//pColorRamp.Size=pUniqueValueRenderer.ValueCount;
boolok=true;
pColorRamp.CreateRamp(outok);
IEnumColorspEnumRamp;
pEnumRamp=pColorRamp.Colors;
//为每个值设置一个符号
intn=pFeatureClass.FeatureCount(null);
for(inti=0;i { IFeaturepFeature=pFeatureCursor.NextFeature(); IClonepSourceClone=PFillSymbolasIClone; ISimpleFillSymbolpSimpleFillSymbol=pSourceClone.Clone()asISimpleFillSymbol; stringpFeatureValue=pFeature.get_Value(pFeature.Fields.FindField("STATE_NAME")).ToString(); pUniqueValueRenderer.AddValue(pFeatureValue,"美国州名",(ISymbol)pSimpleFillSymbol); } //为每个符号设置颜色 for(inti=0;i<=pUniqueValueRenderer.ValueCount-1;i++) { stringxv=pUniqueValueRenderer.get_Value(i); if(xv! ="") { ISimpleFillSymbolpNextSymbol=(ISimpleFillSymbol)pUniqueValueRenderer.get_Symbol(xv); pNextSymbol.Color=pEnumRamp.Next(); pUniqueValueRenderer.set_Symbol(xv,(ISymbol)pNextSymbol); } } //将单值图渲染对象与渲染图层挂钩 pGeoFeatureLayer.Renderer=(IFeatureRenderer)pUniqueValueRenderer; pGeoFeatureLayer.DisplayField="STATE_NAME"; //刷新地图和TOOCotrol IActiveViewpActiveView=axMapControl1.MapasIActiveView; pActiveView.Refresh(); axTOCControl1.Update(); } (2)、编写完成后,按F5编译代码,会出现错误,然后根据提示添加相应的引用项,操作如下: 然后在全部代码开头输入如下命令: 3.2、等级专题图实现 (1)、鼠标双击“专题图”菜单的“等级专题图”,编写代码如下: privatevoid等级专题图ToolStripMenuItem_Click(objectsender,EventArgse) { IMappMap=axMapControl1.Map; ILayerpLayer=pMap.get_Layer(0)asIFeatureLayer; IFeatureLayerpFeatureLayer=pLayerasIFeatureLayer; IGeoFeatureLayerpGeoFeatureLayer=pLayerasIGeoFeatureLayer; //获取图层上的feature IFeatureClasspFeatureClass=pFeatureLayer.FeatureClass; IFeatureCursorpFeatureCursor=pFeatureClass.Search(null,false); IFeaturepFeature=pFeatureCursor.NextFeature(); ////////////////////////////////////////////////////////////////////// //定义所需的接口对象和相关变量 IClassBreaksUIPropertiespUIProperties; objectdataValues; objectdataFrequency; //double[]cb; intbreakIndex; longClassesCount; intnumClass; numClass=10; double[]Classes; ////////////////////////////////////////////////////////////////////// /*We'regoingtoretrievefrequencydatafromapopulation fieldandthenclassifythisdata*/ ITablepTable; pTable=pFeatureClassasITable; IBasicHistogrampBasicHist=newBasicTableHistogram(); ITableHistogrampTableHist; pTableHist=(ITableHistogram)pBasicHist; //Getvaluesandfrequenciesforthepopulationfieldintoatablehistogramobject pTableHist.Field="POP2000"; pTableHist.Table=pTable; pBasicHist.GetHistogram(outdataValues,outdataFrequency); IClassifyGENpClassifyGEN=newQuantile(); pClassifyGEN.Classify(dataValues,dataFrequency,refnumClass); Classes=(double[])pClassifyGEN.ClassBreaks; ClassesCount=long.Parse(Classes.GetUpperBound(0).ToString()); //Initialiseanewclassbreaksrendererandsupplythenumberofclassbreaksandthefieldtoperformtheclassbreakson. IClassBreaksRendererpClassBreaksRenderer=newClassBreaksRenderer(); pClassBreaksRenderer.Field="POP2000"; //pClassBreaksRenderer.BreakCount=ClassesCount; pClassBreaksRenderer.MinimumBreak=Classes[0]; pClassBreaksRenderer.SortClassesAscending=true; //设置着色对象的分级数目 pClassBreaksRenderer.BreakCount=int.Parse(ClassesCount.ToString()); //创建并设置随机色谱 IAlgorithmicColorRamppColorRamp=newAlgorithmicColorRamp(); pColorRamp.Algorithm=esriColorRampAlgorithm.esriCIELabAlgorithm; IEnumColorspEnumColors; IRgbColorpColor1=newRgbColor(); IRgbColorpColor2=newRgbColor(); 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; boolok=true; pColorRamp.CreateRamp(outok); pEnumColors=pColorRamp.Colors; pEnumColors.Reset();//usethisinterfacetosetdialogproperties pUIProperties=pClassBreaksRendererasIClassBreaksUIProperties; pUIProperties.ColorRamp="Custom"; ISimpleFillSymbolpSimpleMarkerSymbol=newSimpleFillSymbol(); IColorpColor; int[]colors=newint[numClass]; //becareful,indicesaredifferentforthedifflists for(breakIndex=0;breakIndex { pClassBreaksRenderer.set_Label(breakIndex,Classes[breakIndex]+"-"+Classes[breakIndex+1]); pUIProperties.set_LowBreak(breakIndex,Classes[breakIndex]); pSimpleMarkerSymbol=newSimpleFillSymbol(); pColor=pEnumColors.Next(); pSimpleMarkerSymbol.Color=pColor; colors[breakIndex]=pColor.RGB; pClassBreaksRenderer.set_Symbol(breakIndex,(ISymbol)pSimpleMarkerSymbol); pClassBreaksRenderer.set_Break(breakIndex,Classes[breakIndex+1]); } //将等级图渲染对象与渲染图层挂钩 pGeoFeatureLayer.Renderer=(IFeatureRenderer)pClassBreaksRenderer; //刷新地图和TOOCotrol IActiveViewpActiveView=axMapControl1.MapasIActiveView; pActiveView.Refresh(); axTOCControl1.Update(); } (2)、按F5进行编译,出现问题如下 解决该问题方法为,在Progrom.cs中添加如下一句代码: ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);然后重新编译错误解决。 3.3、点密度专题图 (1)、鼠标双击“专题图”菜单的“点密度专题图”,编写实现该功能代码如下: privatevoid点密度专题图ToolStripMenuItem_Click_1(objectsender,EventArgse) { //获取当前图层,并把它设置成IGeoFeatureLayer的实例 IMappMap=axMapControl1.Map; ILayerpLayer=pMap.get_Layer(0)asIFeatureLayer; IFeatureLayerpFeatureLayer=pLayerasIFeatureLayer; IGeoFeatureLayerpGeoFeatureLayer=pLayerasIGeoFeatureLayer; //获取图层上的feature IFeatureClasspFeatureClass=pFeatureLayer.FeatureClass; IFeatureCursorpFeatureCursor=pFeatureClass.Search(null,false); IFeaturepFeature=pFeatureCursor.NextFeature(); //定义点密度图渲染组件 IDotDensityRendererDotDensityRenderer=newDotDensityRendererClass(); //定义点密度图渲染组件对象的渲染字段对象 IRendererFieldsflds=(IRendererFields)DotDensityRenderer; flds.AddField("POP2000","POP2000"); //flds.AddField("Shape","Shape"); //定义点密度图渲染得符号对象 IDotDensityFillSymbolddSym=newDotDensityFillSymbol(); IRgbColorBackColor=newRgbColor(); BackColor.Red=255; BackColor.Blue=0; BackColor.Green=255; IRgbColorSymbolColor=newRgbColor(); SymbolColor.Red=255; SymbolColor.Blue=0; SymbolColor.Green=0; ////点密度图渲染背景颜色 ddSym.BackgroundColor=BackColor; ddSym.DotSize=3; ddSym.FixedPlacement=true; //ddSym.Color=SymbolColor; ILineSymbolpLineSymbol=newCartographicLineSymbol(); ddSym.Outline=pLineSymbol; //定义符号数组 ISymbolArraysymArray=(ISymbolArray)ddSym; //添加点密度图渲染的点符号到符号数组中去 ISimpleMarkerSymbolpMarkerSymbol=newSimpleMarkerSymbol(); pMarkerSymbol.Style=esriSimpleMarkerStyle.esriSMSCircle; pMarkerSymbol.Size=0.3; pMarkerSymbol.Color=SymbolColor;; symArray.AddSymbol(pMarkerSymbolasISymbol); //设置点密度图渲染的点符号 //DotDensityRenderer.DotDensitySymbol=symArray; //获取所有记录中该字段的最大值和最小值 DataStatisticsds=newDataStatistics(); ICursorcursor=(ICursor)pFeatureLayer.FeatureClass.Search(null,false); IDataStatisticsdataStatistics=newDataStatisticsClass(); dataStatistics.Field="POP2000"; dataStatistics.Cursor=cursor; ESRI.ArcGIS.esriSystem.IStatisticsResultsstatisticsResults=dataStatistics.St
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东 建筑 大学 AE 二次开发 实习 作业 课程设计