GIS实习报告.docx

上传人:b****5 文档编号:8635998 上传时间:2023-02-01 格式:DOCX 页数:38 大小:712.88KB
下载 相关 举报
GIS实习报告.docx_第1页
第1页 / 共38页
GIS实习报告.docx_第2页
第2页 / 共38页
GIS实习报告.docx_第3页
第3页 / 共38页
GIS实习报告.docx_第4页
第4页 / 共38页
GIS实习报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

GIS实习报告.docx

《GIS实习报告.docx》由会员分享,可在线阅读,更多相关《GIS实习报告.docx(38页珍藏版)》请在冰豆网上搜索。

GIS实习报告.docx

GIS实习报告

GIS

班级:

地信122

姓名:

张开瑞

时间:

2014.6.9-6.20

指导老师:

尹涛

实习题目:

数字长清校园

………………………………………………………前言

一、………………………………………………………………系统简要

1、………………………………系统分析及其开发环境。

2、………………………………校园截图及配准过程。

3、………………………………矢量化及添加要素名称。

二、………………………………………………………………窗口设计

三、………………………………………………………………开发案例

1、………………………………欢迎页面、浮动加载工具箱功能。

2、………………………………量测功能。

3、………………………………查询功能。

4、………………………………鹰眼功能。

5、………………………………不同的分析功能。

6、………………………………数据和布局视图。

7、………………………………鼠标跟随、坐标状态显示功能。

7、………………………………北京54坐标转换。

8、………………………………标签编辑和右击属性、快捷键设置

四、………………………………………………………………代码加载

五、………………………………………………………………运行截图

六、………………………………………………………………发布安装

七、………………………………………………………………结论

………………………………………………………………后记

前言:

改设计是由山东交通学院长清校区卫星地图运用桌面版GIS和AE共同设计的计算机软件,对于初学者具有较强的实习功能,体现出对AE初级程序的开发,对初学者具有较好的研究基础。

一、1、系统分析:

用户对象:

各类用户。

功能简介:

结合桌面版GIS,设计对地图的浏览功能,数据及布局视图,进行网络、缓冲区等分析,进行空间和属性查询、进行坐标系的转换等功能。

2、开发环境:

VS2010、开发语言C#、ArcGISEngine组件、ArcGISDeskTop

3、校园地图设计:

地图范围:

山东交通学院长清校区

地图的坐标系:

WGS84坐标系

地图的现势性:

最新的

地图原始图像来源:

 

4.地图配准:

1、加载数据和影像配准工具2、输入控制点3、设定数据框的属性4、矫正并重采样栅格生成新的栅格文件。

地图图层:

在校园地图中分为点、线、面图层、还有一个地图图层。

校园地图:

二、功能设计:

 

2、页面布局设计(窗体分为多个)

3、程序设计代码:

ShowInTaskbar->True(令窗口不在任务栏里显示)

StartPosition->CenterScreen(让窗口运行时出现在屏幕最中间)

FormBorderStyle->None(去掉窗体的边框和标题栏,这样才像欢迎界面嘛)

BackgroundImage->(这个可以自己先做一副比较好的图片或者找一副都可以,最好是刚好和你的欢迎窗口相同大小的)

或者你也可以在窗口上设置背景颜色写些文字之类的都可以,窗口大小就随便你啦。

修改Program.cs文件里的Application.Run(newform1());

将其改成Application.Run(newForm9());

进入:

Form1frm1=newForm1();

frm1.MdiParent=this.MdiParent;

frm1.Show();

this.Hide();

退出:

DialogResultresult=MessageBox.Show("确定要退出吗","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question);

if(result==DialogResult.Yes)

{

Application.Exit();

}

滚动:

设置Timer属性Enable改为true。

Label中属性ATUsize改为False。

添加代码:

label1.Text=label1.Text.Substring(1,label1.Text.Length-1)+label1.Text.Substring(0,1);

加载地图:

1:

许可:

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)

2:

MapControl加载属性

3:

浮动加载:

根据这个位置作为当前位置找到地图文档位置及文件名的命令为:

boolblMxdFileOK;

stringMxdPath;

MxdPath=Application.StartupPath+@"\..\..\..\..\..\data\无T标括?

题琣.mxd";

blMxdFileOK=axMapControl1.CheckMxFile(MxdPath);

if(blMxdFileOK)

{

axMapControl1.LoadMxFile(MxdPath);

}

else

{

}

2、浏览功能:

保存:

ICommandcommand=newControlsSaveAsDocCommandClass();

command.OnCreate(axMapControl1.Object);

command.OnClick();

打开地图:

privatevoidToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpMxd=newControlsOpenDocCommandClass();

pMxd.OnCreate(axMapControl1.Object);

pMxd.OnClick();

}

添加数据:

privatevoidToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpAddData=newControlsAddDataCommandClass();

pAddData.OnCreate(axMapControl1.Object);

pAddData.OnClick();

}

放大:

privatevoidToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpfangda=newControlsMapZoomInToolClass();

pfangda.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=pfangdaasITool;

}

缩小:

privatevoidToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpsuoxiao=newControlsMapZoomOutToolClass();

psuoxiao.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=psuoxiaoasITool;

}

漫游:

privatevoidToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpPan=newControlsMapPanToolClass();

pPan.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=pPanasITool;

}

 

全幅显示:

privatevoidToolStripMenuItem1_Click(objectsender,EventArgse)

{

ICommandFullExtent=newControlsMapFullExtentCommandClass();

FullExtent.OnCreate(axMapControl1.Object);

FullExtent.OnClick();

}

自由缩放:

privatevoidToolStripMenuItem1_Click(objectsender,EventArgse)

{

ICommandpziyou=newControlsMapZoomPanToolClass();

pziyou.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=pziyouasITool;

}

前一视图:

privatevoid前一视图ToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpCommand=newControlsMapZoomToLastExtentBackCommandClass();

pCommand.OnCreate(this.axMapControl1.Object);

pCommand.OnClick();

}

后一视图:

privatevoid后一视图ToolStripMenuItem_Click(objectsender,EventArgse)

{

ICommandpCommand=newControlsMapZoomToLastExtentForwardCommandClass();

pCommand.OnCreate(this.axMapControl1.Object);

pCommand.OnClick();

}

右键快捷菜单:

Contextmenustrip快捷菜单工具

在mousedonwn中添加

if(e.button!

=2)

return;//

else

{

contextMenuStrip1.Show(axMapControl1,e.x,e.y);//

}

3、查询

图查属性

点选查询代码:

privatevoidbutton2_Click(objectsender,EventArgse)

ICommandpse=newControlsMapIdentifyToolClass();

pse.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=pseasITool;

}

查询显示图层:

在MapControl事件中的OnSelectionChanged

privatevoidaxMapControl1_OnSelectionChanged(objectsender,EventArgse)

{

stringstringvalue;

IMappMap;

pMap=axMapControl1.Map;

ISelectionselection=pMap.FeatureSelection;

IEnumFeatureSetupenumFeatureSetup=selectionasIEnumFeatureSetup;

enumFeatureSetup.AllFields=true;//这里很必要

IEnumFeatureenumFeature=enumFeatureSetupasIEnumFeature;

enumFeature.Reset();

IFeaturefeature=enumFeature.Next();

while(feature!

=null)

{

stringvalue=feature.get_Value

(2).ToString();//字段的值

MessageBox.Show(stringvalue,"城市");

feature=enumFeature.Next();

}

}

矩形选择:

privatevoidbutton1_Click(objectsender,EventArgse)

{

ICommandpselect=newControlsSelectFeaturesToolClass();

pselect.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=pselectasITool;

}

点选:

IPointpoint=newPointClass();

point.PutCoords(e.mapX,e.mapY);

IGeometrypgeo=pointasIPoint;

axMapControl1.Map.SelectByShape(pgeo,null,false);

axMapControl1.ActiveView.Refresh();

线选:

IGeometrypgeo=axMapControl1.TrackLine();

axMapControl1.Map.SelectByShape(pgeo,null,false);

axMapControl1.ActiveView.Refresh();

圆选:

IGeometrypgeo=axMapControl1.TrackCircle();

axMapControl1.Map.SelectByShape(pgeo,null,false);

axMapControl1.ActiveView.Refresh();

多边形:

IGeometrypgeo=axMapControl1.TrackPolygon();

axMapControl1.Map.SelectByShape(pgeo,null,false);

axMapControl1.ActiveView.Refresh();

矩形:

IGeometrypgeo=axMapControl1.TrackRectangle();

axMapControl1.Map.SelectByShape(pgeo,null,false);

axMapControl1.ActiveView.Refresh();

3.2属性查图

在窗体中加入一个标签(Label)、一个按钮(button)和一个文本框(TextBox),添加引用Geodatabase并设置它们的属性值如下

代码:

IMappMap=axMapControl1.Map;

IFeatureLayerpfeaturelayer=pMap.get_Layer

(2)asIFeatureLayer;

IFeatureSelectionpfeatureSelection=pfeaturelayerasIFeatureSelection;

IQueryFilterpQuery=newQueryFilterClass();

pQuery.WhereClause="name='"+this.textBox1.Text+"'";

pQuery.WhereClause="Lower(name)like'%"+this.textBox1.Text.ToLower().Trim()+"%'";

pfeatureSelection.SelectFeatures(pQuery,esriSelectionResultEnum.esriSelectionResultNew,false);

if(pfeatureSelection.SelectionSet.Count==0)

{

MessageBox.Show("无法找到");

}

else

{

ICommandpcenter=newControlsZoomToSelectedCommandClass();

pcenter.OnCreate(axMapControl1.Object);

pcenter.OnClick();

}

}

4、量算设计

4.1、量算(举例:

距离量算和面积量算)

MapControl中

privateinti;

PrivatevoidaxMapControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente)

{

switch(i)

{

case1:

IPolylinepPolyline=null;

pPolyline=(IPolyline)axMapControl1.TrackLine();

doubledist;

dist=Math.Abs(Math.Round(pPolyline.Length,2));

MessageBox.Show("您量测的距离为"+dist.ToString()+"米。

","量测提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

break;

case2:

IPolygonpPolygon=null;

pPolygon=(IPolygon)axMapControl1.TrackPolygon();

IAreapArea=(IArea)pPolygon;

doubles;

s=Math.Abs(Math.Round(pArea.Area,2));

MessageBox.Show("您量测的面积为"+s.ToString()+"平方米。

","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

break;}

4.2、比例尺和坐标

状态栏:

statusStrip

MapControl中的OnMousemove事件

privatestringsMapUnits;

PrivatevoidaxMapControl1_OnMouseMove(objectsender,IMapControlEvents2_OnMouseMoveEvente)

Scalbel.Text="比例尺1:

"+((long)this.axMapControl1.MapScale).ToString();

CoordinateLabel.Text="坐标X="+e.mapX.ToString()+"Y="+e.mapY.ToString()

+""+sMapUnits;

privatevoidForm1_Load(objectsender,EventArgse)

esriUnitsmapUnits=axMapControl1.MapUnits;

switch(mapUnits)

{

caseesriUnits.esriCentimeters:

sMapUnits="Centimeters";

break;

caseesriUnits.esriDecimalDegrees:

//sMapUnits="DecimalDegrees";

sMapUnits="度";

break;}

4.3、跟随添加label

label2.Visible=true;

label2.Left=10+e.x;

label2.Top=50+e.y;

label2.Text="X="+e.mapX.ToString()+"Y="+e.mapY.ToString();

5、分析:

5.1、网络分析:

添加TOOLBarControl在里面添加网络分析工具。

5.2、缓冲分析:

1.项目中添加一个新的窗体,名称为“BufferForm”,Name属性设为“缓冲区分析”,添加四个Label、一个ComboBox、两个TextBox、三个Button控件,控件属性设置如下:

控件类型

Name属性

Text属性

控件说明

Label

选择图层:

Label

缓冲半径:

Label

lblUnit

地图单位

标示当前地图的地图单位

Label

输出图层:

ComboBox

cboLayers

所有图层的名称

TextBox

txtBufferDistance

1.0

生成缓冲区的缓冲半径

TextBox

txtOutputPath

缓冲区文件的输出路径,其ReadOnly属性设为True

Button

btnOutputLayer

选择缓冲区文件的输出路径

Button

btnBuffer

分析

进行缓冲区分析

Button

btnCancel

取消

取消

2.首先声明两个成员变量,用于保存地图数据和输出文件的路径。

//接收MapControl中的数据

privateIHookHelpermHookHelper=newHookHelperClass();

//缓冲区文件输出路径

publicstringstrOutputPath;

重写BufferForm的构造函数,添加一个参数,用于接收MapControl中的数据。

//重写构造函数,添加参数hook,用于传入MapControl中的数据

publicBufferForm(objecthook)

{

InitializeComponent();

this.mHookHelper.Hook=hook;

}

添加一个自定义函数,用于根据图层名称获取要素图层并返回。

privateIFeatureLayerGetFeatureLayer(stringlayerName)

{

IFeatureLayerpFeatureLayer=null;

//遍历图层,获取与名称匹配的图层

for(inti=0;i

{

ILayerpLayer=this.mHookHelper.FocusMap.get_Layer(i);

if(pLayer.Name==layerName)

{

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

当前位置:首页 > 高中教育 > 其它课程

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

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