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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GIS设计与实现

实验报告

课程:ArcGIS二次开发院(部):土木工程学院

专业:地理信息系统

班级:地理XXX

学生姓名:XXXX

学号:XXXXX

指导教师:XXX

教研室主任:XXX

院长(主任):XXX

一、实验目的

1、掌握ArcGIS二次开发的流程。

2、熟悉ArcEngine平台进行二次开发。

3、掌握GIS专题图开发操作。

二、实验要求

1、使用ArcGIS Engine平台,利用C#或者Java语言,开发专题图程序

2、结合编程环境和ArcGIS Engine提供的控件,按照实验指导书要求,设计程序的界面

3、工具条的功能分别为:放大视图、缩小视图、平移视图、前一视图、后一视图、完全视图和增加图层。这些功能可以利用ArcGIS Engine提供的内置工具实现。

4、专题图菜单中包含单值专题图、等级专题图和点密度专题图三项子菜单

三、实验步骤

1、新建项目

启动VS2010软件,新建一个Windows Forms Application工程并命名为“XXXX”

2、设计程序界面

(1)、按照指导书的实验要求布置窗体,设计程序界面,向窗体中添加一个SplitContainer容器,设置其属性中的Dock值为Fill;添加一个ToolbarControl控件,设置属性值Dock为Top;添加TOCControl和MapControl 设置属性Dock值都为Fill.

(2)、向窗体中添加menuStrip菜单并命名为“专题图”,然后设置三个子菜单分别为“单值专题图”、“等级专题图”、“点密度专题图”

(3)、按照指导书要求,在工具条添加放大视图、缩小视图、平移视图、前一视图、后一视图、完全视图和增加图层。

(4)、为了实现专题图功能,需要加载一副具有数值型字段的多边形图,可以使用ArcGIS Engine自带的实例地图,在安装目录途径下寻找需要的实例地图“\DeveloperKit10.0\java\samples\data\usa\usa.gdb”下的图层states。

(5)、程序界面设计完成后的效果为:

3、专题图功能实现

3.1、单值专题图功能实现

(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 = axMapControl1.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.Search(null, false);

//定义单值图渲染组件

IUniqueValueRenderer pUniqueValueRenderer = new UniqueV alueRenderer();

//设置渲染字段对象

pUniqueValueRenderer.FieldCount = 1;

pUniqueValueRenderer.set_Field(0, "STA TE_NAME");

//创建填充符号

ISimpleFillSymbol PFillSymbol = new SimpleFillSymbol();

pUniqueValueRenderer.DefaultSymbol = (ISymbol)PFillSymbol;

eDefaultSymbol = 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("Can't find field called ", "Message", MessageBoxButtons.OK, rmation);

}

//创建并设置随机色谱

IRandomColorRamp pColorRamp = new RandomColorRamp();

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;

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

相关文档
最新文档