《GIS程序设计实习》实习指导书v20.docx

上传人:b****6 文档编号:5952157 上传时间:2023-01-02 格式:DOCX 页数:21 大小:754.69KB
下载 相关 举报
《GIS程序设计实习》实习指导书v20.docx_第1页
第1页 / 共21页
《GIS程序设计实习》实习指导书v20.docx_第2页
第2页 / 共21页
《GIS程序设计实习》实习指导书v20.docx_第3页
第3页 / 共21页
《GIS程序设计实习》实习指导书v20.docx_第4页
第4页 / 共21页
《GIS程序设计实习》实习指导书v20.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

《GIS程序设计实习》实习指导书v20.docx

《《GIS程序设计实习》实习指导书v20.docx》由会员分享,可在线阅读,更多相关《《GIS程序设计实习》实习指导书v20.docx(21页珍藏版)》请在冰豆网上搜索。

《GIS程序设计实习》实习指导书v20.docx

《GIS程序设计实习》实习指导书v20

《GIS程序设计实习》实习指导书

一、实习目的

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

二、实习的内容与要求

熟悉开发环境:

VisualStudio2010;C#;ArcEngine10.1

功能需求分析

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

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

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

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

重点完成的工作包括:

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

三、时间安排:

1、实习动员:

介绍本次实习的内容和安排,布置任务。

(1天)

2、以上2项实习内容。

(3天)

3、编写实习报告,上交成果。

(2天)

四、成绩评定

1、按学生的实习态度占10%。

2、独立动手能力20%。

3、实习成果70%。

五、实习报告内容:

1、实习目的

2、实习内容

3、实习步骤(原理,方法,如何操作)

4、实习结果

5、实习感受

实习一:

初识ArcGISEngine开发环境

1、新建Windows窗体应用程序

启动VS2008,选择“文件|新建|项目|Windos窗体应用程序”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“MyMap”,点击确定。

2、查看ArcGISWindowsForms控件

3、添加地图控件

添加完这几个控件后,VS会自动为我们添加一些引用,这些应用如下,注意Version这个类库是ArcGISEngine新增加的,而且必不可少。

4、设置相应的属性

右击ToolbarControl控件,选择“属性|Items(选择工具)|AddCommands”,选择常用工具。

5、控件绑定:

设置控件之间的关联

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

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

6、编译运行

按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了。

实习二:

建立ArcGISEngine应用程序框架

2.1地图浏览

1、新建项目

启动VS2008,选择“文件|新建|项目|Windos窗体应用程序”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“MyMapFrame”,点击确定。

在解决方案管理器中将“Form1.cs”重命名为“MyMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“MyArcGIS”。

2、添加控件

选择工具箱中的“菜单和工具栏|StatusStrip(状态栏)”,将其拖入到窗体。

选择工具箱中的“ArcGISWindowsForms”节,将“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。

并用上述类似的方法,将两个选项卡的Name和Text分别设置为:

(Map、地图)和(Layout,制版)。

选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。

选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。

最后将LicenseControl控件拖入到窗体的任意地方。

按F5编译运行,可以看到布局好的程序界面。

3、控件绑定

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

分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。

4、添加工具

工具条中还没有任何工具,添加的方法也很简单。

右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条。

常见的工具有:

MapNavigation中的导航工具,MapInquiry中的查询工具,FeatureSelection中的选择工具,你可以根据需要酌情添加工具。

5、右键点击LicenseControl,点击属性菜单.

浏览弹出的对话框,其中ArcGISEngine已经选中,如果需要其它扩展模块的许可,可以在右侧选中对应的复选框,点击确定按钮。

5、编译运行

按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了。

2.2添加shp数据

刚刚在2.1部分在没有写代码的情况下,我们生成了一个地图浏览小程序。

下面我们来使用代码的方式添加数据。

1、添加菜单控件并设置菜单属性

在VS2010的工具箱中,展开菜单和工具栏,双击MenuStrip控件,这样就在窗体上添加了一个菜单控件;同样双击添加openFileDialog控件,置于窗体任何位置.

在菜单上点击,输入“添加SHP数据”作为菜单的标题。

2、代码处理

2.1选中“添加SHP数据”菜单,在属性框中点击事件按钮,在事件列表中双击Click事件;或者双击“添加SHP数据”菜单.自动生成的事件处理方法如下图所示,我们将在方法内输入处理代码。

下面开始使用ArcGISEngine进行编码,首先需要添加ArcGIS的引用,在解决方案管理器中右键点击“添加引用”。

在MyMap.cs源代码文件中,在源代码的最顶部,输入如下代码,导入命名空间。

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;

在菜单的Click事件处理方法中添加如下代码。

有多种方法添加shapefile文件到地图控件中,本示例的步骤如下:

1.创建工作空间工厂。

2.打开shapefile工作空间。

3.打开要素类。

4.创建要素图层。

5.关联图层和要素类。

6.添加到地图控件中。

示例代码:

openFileDialog1.Filter="shapefile文件(*.shp)|*.shp";

openFileDialog1.Multiselect=false;

DialogResultpDialogResult=openFileDialog1.ShowDialog();

if(pDialogResult!

=DialogResult.OK)

return;

stringpPath=openFileDialog1.FileName;

stringpFolder=System.IO.Path.GetDirectoryName(pPath);

stringpFileName=System.IO.Path.GetFileName(pPath);

IWorkspaceFactorypWorkspaceFactory=newShapefileWorkspaceFactory();

IWorkspacepWorkspace=pWorkspaceFactory.OpenFromFile(pFolder,0);

IFeatureWorkspacepFeatureWorkspace=pWorkspaceasIFeatureWorkspace;

IFeatureClasspFC=pFeatureWorkspace.OpenFeatureClass(pFileName);

IFeatureLayerpFLayer=newFeatureLayerClass();

pFLayer.FeatureClass=pFC;

pFLayer.Name=pFC.AliasName;

ILayerpLayer=pFLayerasILayer;

IMappMap=axMapControl1.Map;

pMap.AddLayer(pLayer);

axMapControl1.ActiveView.Refresh();

3、在键盘上按F5键,运行调试。

点击“添加SHP数据”菜单,在弹出的对话框中,选中任意一个shp文件,点击确定,即可把shp文件加载到地图控件中。

实习三:

矢量要素符号化

3.1搭建符号化功能界面

在之前创建的MenuStrip上,新建“地图渲染”菜单,并新增“简单渲染”和“唯一值渲染”两个菜单项,如下图所示。

3.2代码处理

3.1选中“简单渲染”菜单,在属性框中点击事件按钮,在事件列表中双击Click事件;或者双击“简单渲染”菜单,自动生成的事件处理方法如下图所示,我们将在方法内输入处理代码。

重复相同的操作,为“唯一值渲染”菜单增加事件处理函数。

在菜单“简单渲染”的Click事件处理方法中添加如下代码。

privatevoidDefineSimpleRender(IFeatureLayerpFeatureLayer,stringsFieldName)

{

//设置用于渲染的颜色

IRgbColorpColor=newRgbColorClass();

pColor.Red=255;

pColor.Blue=0;

pColor.Green=0;

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

ISimpleFillSymbolpSFSBase=newSimpleFillSymbolClass();

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

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

pSFSBase.Color=pColorasIColor;

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

ISimpleRendererpSR=newSimpleRendererClass();

pSR.Symbol=pSFSBaseasISymbol;

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

IGeoFeatureLayerpGFL=pFeatureLayerasIGeoFeatureLayer;

pGFL.Renderer=pSRasIFeatureRenderer;

//地图刷新

axMapControl1.Refresh();

}

在菜单“唯一值渲染”的Click事件处理方法中添加如下代码。

privatevoidDefineUniqueValueRender(IFeatureLayerpFeatureLayer,stringsFieldName)

{

//变量声明

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

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

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

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

IRandomColorRamppRCR=newRandomColorRampClass();

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=newUniqueValueRendererClass();

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=newSimpleFillSymbolClass();

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();

}

在菜单“分级渲染”的Click事件处理方法中添加如下代码。

privatevoidClassBreakRender(IFeatureLayerpFL,stringsFieldName)

{

IRandomColorRamppRCR=newRandomColorRampClass();

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=3;

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=newSimpleFillSymbolClass();

pSFSForFeature.Style=esriSimpleFillStyle.esriSFSSolid;

pSFSForFeature.Outline.Width=0.4;

pSFSForFeature.Color=pColorForFeature;

switch(i)

{

case0:

pCBR.set_Break(i,30);

pCBR.set_Label(i,"0-30");

pCBR.set_Description(i,"0-30");

pCBR.set_Symbol(i,pSFSForFeatureasISymbol);

break;

case1:

pCBR.set_Break(i,60);

pCBR.set_Label(i,"31-60");

pCBR.set_Description(i,"31-60");

pCBR.set_Symbol(i,pSFSForFeatureasISymbol);

break;

case2:

pCBR.set_Break(i,100);

pCBR.set_Label(i,"61-100");

pCBR.set_Description(i,"61-100");

pCBR.set_Symbol(i,pSFSForFeatureasISymbol);

break;

}

pColorForFeature=pEC.Next();

}

IGeoFeatureLayerpGFL=pFLasIGeoFeatureLayer;

pGFL.Renderer=pCBRasIFeatureRenderer;

axMapControl1.Refresh();

}

}

3.3、在键盘上按F5键,运行调试。

点击“添加SHP数据”菜单,在弹出的对话框中,选中任意一个shp文件,点击确定,即可把shp文件加载到地图控件中。

⏹点击“简单渲染”菜单,渲染效果如下:

⏹点击“唯一值渲染”菜单,渲染效果如下:

⏹点击“分级渲染”菜单,渲染效果如下:

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

当前位置:首页 > 初中教育 > 英语

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

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