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

上传人:b****7 文档编号:8970726 上传时间:2023-02-02 格式:DOCX 页数:18 大小:1.72MB
下载 相关 举报
山东建筑大学AE二次开发实习大作业课程设计.docx_第1页
第1页 / 共18页
山东建筑大学AE二次开发实习大作业课程设计.docx_第2页
第2页 / 共18页
山东建筑大学AE二次开发实习大作业课程设计.docx_第3页
第3页 / 共18页
山东建筑大学AE二次开发实习大作业课程设计.docx_第4页
第4页 / 共18页
山东建筑大学AE二次开发实习大作业课程设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

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

《山东建筑大学AE二次开发实习大作业课程设计.docx》由会员分享,可在线阅读,更多相关《山东建筑大学AE二次开发实习大作业课程设计.docx(18页珍藏版)》请在冰豆网上搜索。

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

山东建筑大学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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

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

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