GIS开发实习报告.doc

上传人:wj 文档编号:2118490 上传时间:2023-05-02 格式:DOC 页数:16 大小:791.50KB
下载 相关 举报
GIS开发实习报告.doc_第1页
第1页 / 共16页
GIS开发实习报告.doc_第2页
第2页 / 共16页
GIS开发实习报告.doc_第3页
第3页 / 共16页
GIS开发实习报告.doc_第4页
第4页 / 共16页
GIS开发实习报告.doc_第5页
第5页 / 共16页
GIS开发实习报告.doc_第6页
第6页 / 共16页
GIS开发实习报告.doc_第7页
第7页 / 共16页
GIS开发实习报告.doc_第8页
第8页 / 共16页
GIS开发实习报告.doc_第9页
第9页 / 共16页
GIS开发实习报告.doc_第10页
第10页 / 共16页
GIS开发实习报告.doc_第11页
第11页 / 共16页
GIS开发实习报告.doc_第12页
第12页 / 共16页
GIS开发实习报告.doc_第13页
第13页 / 共16页
GIS开发实习报告.doc_第14页
第14页 / 共16页
GIS开发实习报告.doc_第15页
第15页 / 共16页
GIS开发实习报告.doc_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

GIS开发实习报告.doc

《GIS开发实习报告.doc》由会员分享,可在线阅读,更多相关《GIS开发实习报告.doc(16页珍藏版)》请在冰点文库上搜索。

GIS开发实习报告.doc

学号 1221030205

实习报告

GIS程序设计实习

起止日期:

2015年7月13日至2015年7月19日

学生姓名

吴馁

班级

12级地信2班

成绩

指导教师(签字)

地质与测绘学院

2015年7月20日

GIS程序设计实习

一、实习目的

通过GIS程序设计实习,使学生了解需求分析、项目管理方案设计、系统总体设计以及系统详细设计、系统实施、运行和维护等阶段要完成的具体工作;掌握在C#和ArcEngine环境下构建应用型地理信息系统的方法。

二、实习内容

l熟悉开发环境:

VisualStudio2010;C#;ArcEngine10.1

l功能需求分析

l基于组件技术开发应用型地理信息系统

组件式技术已成为当今软件技术的潮流之一。

组件式GIS软件的基本思想是把GIS各大功能模块划分为几个控件。

各个GIS控件之间,以及GIS控件与其他非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。

重点完成的工作包括:

1)建立ArcGISEngine应用程序框架;2)实现对矢量数据(ShapeFile格式)的访问;3)实现采用简单、唯一值、分类等多种方式对面状矢量数据进行渲染(Render)。

三、实习步骤:

实习一:

初识ArcGISEngine开发环境

1、新建一个Windows窗体应用程序

2、在新建窗体中添加控件

在工具箱中选择添加toolbarcontrol,TOCControl,MapControl控件

在解决方案资源管理器中双击program.cs在主函数中添加ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);使得文件可以加载到MapControl中。

右击toolbarcontrol选择属性,如图选择Items选项,添加如图控件

右击MapControl属性,在General的mapdocument中添加要加载的地图文件

通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。

分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1。

试运行一下如图

可以看出基本框架已经搭建好了,但是还得调整一下布局

在工具箱的所有Windows窗体下选择控件,放在窗体里,如图

分别选择窗体里TOCControl,MapControl的属性,将其Dock值设置为fill,如图

调整窗体布局如图

实习二:

建立ArcGISEngine应用程序框架

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、代码处理

选中文件控件下的加入矢量数据控件,双击事件并写入代码,在开始使用ArcGISEngine进行编码前,首先需要添加ArcGIS的引用,在解决方案管理器中右键点击“添加引用”,如图:

usingESRI.ArcGIS.Carto;

usingESRI.ArcGIS.Controls;

usingESRI.ArcGIS.esriSystem;

usingESRI.ArcGIS.Display;

usingESRI.ArcGIS.Geometry;

usingESRI.ArcGIS.SystemUI;

usingESRI.ArcGIS.DataSourcesRaster;

///////////////为SHP数据功能增加的类库

usingESRI.ArcGIS.DataSourcesFile;

usingESRI.ArcGIS.Geodatabase;

usingSystem.IO;

键入的代码如图:

实习三:

矢量要素符号化

1、简单渲染

选中“简单渲染”菜单,在属性框中点击事件按钮,在事件列表中双击Click事件;或者双击“简单渲染”菜单,在方法内输入处理代码。

部分代码如下:

privatevoid简单渲染ToolStripMenuItem_Click(objectsender,EventArgse)

{

IFeatureLayerpFLForRender=axMapControl1.get_Layer(0)asIFeatureLayer;

SimpleRender(pFLForRender,@"");

}

privatevoidSimpleRender(IFeatureLayerpFeatureLayer,stringsFieldName)

{

//设置用于渲染的颜色

IRgbColorpColor=newRgbColor();

pColor.Red=255;

pColor.Blue=0;

pColor.Green=0;

//设置用于渲染的符号的基本属性(面状符号)

ISimpleFillSymbolpSFSBase=newSimpleFillSymbol();

pSFSBase.Style=esriSimpleFillStyle.esriSFSSolid;//设置填充方式

pSFSBase.Outline.Width=0.4;//设置边框的宽度

pSFSBase.Color=pColorasIColor;

//设置简单渲染的相关属性

ISimpleRendererpSR=newSimpleRenderer();

pSR.Symbol=pSFSBaseasISymbol;

//接口转换,对渲染方式进行设置

IGeoFeatureLayerpGFL=pFeatureLayerasIGeoFeatureLayer;

pGFL.Renderer=pSRasIFeatureRenderer;

//地图刷新

axMapControl1.Refresh();

}

2、唯一值渲染

privatevoid唯一值渲染ToolStripMenuItem_Click(objectsender,EventArgse)

{

IFeatureLayerpFLForRender=axMapControl1.get_Layer(0)asIFeatureLayer;

DefineUniqueValueRender(pFLForRender,@"CONTINENT");

}

privatevoidDefineUniqueValueRender(IFeatureLayerpFeatureLayer,stringsFieldName)

{

//变量声明

boolbValFound;//判断要素值是否存在

intiFieldIndex;//用于存储字段所在的索引值

//设置颜色列表,用于随机生成颜色(用于填充面状要素)

//设置颜色的基本属性,包括色调(H)、饱和度(S)以及亮度(V)

IRandomColorRamppRCR=newRandomColorRamp();

pRCR.StartHue=76;

pRCR.EndHue=188;

pRCR.MinSaturation=20;

pRCR.MaxSaturation=40;

pRCR.MaxValue=85;

pRCR.MaxValue=100;

pRCR.UseSeed=true;

pRCR.Seed=43;

//设置唯一值渲染的相关属性

IUniqueValueRendererpUVR=newUniqueValueRenderer();

pUVR.FieldCount=1;

pUVR.set_Field(0,sFieldName);

//遍历要素类的所有要素,并为每个要素设置基本的渲染形式

//遍历要素类中的所有要素

IFeatureClasspFC=pFeatureLayer.FeatureClass;

IFeatureCursorpFCursor=pFC.Search(null,false);//通过遍历,返回要素指针(FeatureCursor)

IFeaturepFeature=pFCursor.NextFeature();//获取当前第一个要素

//获得指定字段的索引值

IFieldspFields=pFCursor.Fields;

iFieldIndex=pFields.FindField(sFieldName);

//为不同的要素,设置不同的填充颜色

pRCR.Size=pFC.FeatureCount(null);//获得应产生的颜色的数目

boolbOK;

pRCR.CreateRamp(outbOK);//判断随机颜色生产是否成功?

//获得随机生成的颜色列表

IEnumColorspEnumColors=pRCR.Colors;

pEnumColors.Reset();

IColorpColorForFeature=pEnumColors.Next();

//开始遍历,为每个要素设置基本的渲染信息

while(pFeature!

=null)

{

//为每个要素设置基本的渲染符号

ISimpleFillSymbolpSFSForFeature=newSimpleFillSymbol();

pSFSForFeature.Style=esriSimpleFillStyle.esriSFSSolid;

pSFSForFeature.Outline.Width=0.4;

pSFSForFeature.Color=pColorForFeature;

//获得当前要素中指定字段的名称

stringsFeatureName;

sFeatureName=pFeature.get_Value(iFieldIndex)asstring;

//设置唯一值渲染的相关属性

pUVR.AddValue(sFeatureName,sFieldName,pSFSForFeatureasISymbol);

pUVR.set_Label(sFeatureName,sFeatureName);

pUVR.set_Symbol(sFeatureName,pSFSForFeatureasISymbol);//设置该值渲染信息

//获得下一组要素和颜色

pFeature=pFCursor.NextFeature();

pColorForFeature=pEnumColors.Next();

}

//接口转换,对渲染方式进行设置

IGeoFeatureLayerpGFL=pFeatureLayerasIGeoFeatureLayer;

pGFL.Renderer=pUVRasIFeatureRenderer;

//地图刷新

axMapControl1.Refresh();

}

3、分级渲染

先打开ArcMap讲要导入数据的属性表打开添加一个字段命名为X,并进行计算几何处理,分级渲染便以这个字段里的值分级,分为两级,最小值到90,和90到最大值。

代码如下:

privatevoid分类渲染ToolStripMenuItem_Click(objectsender,EventArgse)

{

IFeatureLayerpFLForRender=axMapControl1.get_Layer(0)asIFeatureLayer;

ClassBreakRender(pFLForRender,@"x");

}

privatevoidClassBreakRender(IFeatureLayerpFL,stringsFieldName)

{

IRandomColorRamppRCR=newRandomColorRamp();

IClassBreaksRendererpCBR=newClassBreaksRenderer();

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;

IFeatureClasspFC=pFL.FeatureClass;

pRCR.Size=3;

boolbOK;

pRCR.CreateRamp(outbOK);

if(bOK==true)

{

IEnumColorspEC=pRCR.Colors;

pEC.Reset();

IColorpColorForFeature=pEC.Next();

for(inti=0;i

{

ISimpleFillSymbolpSFSForFeature=newSimpleFillSymbol();

ISimpleFillSymbolpSFSForFeature1=newSimpleFillSymbol();

pSFSForFeature.Style=esriSimpleFillStyle.esriSFSSolid;

pSFSForFeature.Outline.Width=0.4;

pSFSForFeature.Color=pColorForFeature;

switch(i)

{

case0:

pCBR.set_Break(i,90);

pCBR.set_Label(i,"-92-90");

pCBR.set_Description(i,"-92-90");

pCBR.set_Symbol(i,pSFSForFeatureasISymbol);

pSFSForFeature1.Color=pSFSForFeature.Color;

break;

case1:

pCBR.set_Break(i,153);

pCBR.set_Label(i,"-90-90");

pCBR.set_Description(i,"-90-90");

pCBR.set_Symbol(i,pSFSForFeatureasISymbol);

break;

}

pColorForFeature=pEC.Next();

}

IGeoFeatureLayerpGFL=pFLasIGeoFeatureLayer;

pGFL.Renderer=pCBRasIFeatureRenderer;

axMapControl1.Refresh();

}

}

四、实习结果

1、实习一结果

2、实习二结果

3、实习三结果

五、实习感受

通过此次实习,了解了用ARCEngine进行地理信息系统的二次开发的大致流程,利用ARCEngine开发可以很好地定制自己所需的功能,而且也不是很难,在VS中敲代码时很多方法和接口就自动提示出现,都不需要记住那么多方法,只要了解那些方法的功能,需要用时能够调用就行。

开发的关键还是在于各种接口以及控件方法的引用。

此次实习也只是接触了皮毛,要想更好地利用其进行地理信息系统的开发还是得熟悉和了解各种接口和方法的功能,要学会利用帮助文档来查询所需的各种借口和方法。

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2