山东建筑大学AE二次开发实习大作业(课程设计)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();