秦坤AE实验报告.docx

上传人:b****8 文档编号:10405603 上传时间:2023-02-11 格式:DOCX 页数:29 大小:1.25MB
下载 相关 举报
秦坤AE实验报告.docx_第1页
第1页 / 共29页
秦坤AE实验报告.docx_第2页
第2页 / 共29页
秦坤AE实验报告.docx_第3页
第3页 / 共29页
秦坤AE实验报告.docx_第4页
第4页 / 共29页
秦坤AE实验报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

秦坤AE实验报告.docx

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

秦坤AE实验报告.docx

秦坤AE实验报告

 

学生实验报告

 

实验类型:

地理信息系统集成与开发

专业班级:

地信12-1班

学号:

2012300597

学生:

指导教师:

明松老师

2015年11月10日

 

实验成绩评定表

指导老师评语:

 

成绩:

 

指导老师:

年月日

理工大学实验报告

实验课程名称:

地理信息系统集成与开发

开课院系及实验室:

测绘学院GIS设计室2015年11月10日

院系

测绘学院

专业班级

地信12-1班

姓名

成绩

实验项目名称

地理信息系统集成与开发

指导教师

明松老师

实验一:

ArcEngine控件及核心类库的认识及Mapcontrol控件的使用和地图的显示与地图缩放以及TOCcontrol、toolbarcontrol控件使用

一.实验目的:

学习C#+ArcEngine组件开发;熟悉各种组件功能。

使用C#2010版本结合GIS组件ArcEngine10能熟练运用各种组件的开发功能。

二.实验容:

1、开发环境部署。

在开发ArcEngine程序之前,需要首先部署完成开发环境。

本课程选择C#语言为例,C#的集成开发环境选择VisualStudio2010,对ArcEngine开发环境的搭建需要遵循下面的步骤顺序进行:

安装VisualStudio2010

安装ArcGISEngineRuntime

安装ArcEngineDeveloperKit

过程截图如下:

2、ESRICONTROLS类库及Mapcontrol控件认识

(1)Control类库包含MapControl,PageLayoutControl,TOCControl,ToolbarControl,GlobeControl,SceneControl,LicenseControl,SymbologyControl等

(2)常用的类库包括:

SystemUILibrary;SystemLibrary;CartoLibrary;ControlsLibrary;

DisplayLibrary;GeoDatabaseLibrary;GeometryLibrary。

通过联机帮助,了解每个类库的概况

1)打开类库参考,查看对象模型图

启动ENGINE帮助,打开ArcObjectslibraryreference\esriControls打开对象模型图

OMD截图

OMDclassdiagramkey截图

2)从图中认识对象模型图中的三个类:

抽象类,组件类,普通类。

(从矩形框的形状识别)。

3)从对象模型图中,学习mapcontrol控件的接口及接口支持的方法。

OMD中的Mapcontrol组件类截图:

4)Mapcontrol控件的使用(C#环境)【每一步的截图及代码】

a)运行VS2010,启动VS2010集成开发环境。

b)新建一个ARCENGINE项目,如图所示,并命名为”第一个AE+C#程序”。

c)双击解决方案中的MainForm.cs

d)查看设计界面

e)查看运行效果

f)返回设计状态,在axTOCControl1控件上右击,选择属性(页)。

查看其与

axMapControl1控件的绑定情况

g)点击解决方案中的“查看代码”,了解命名空间的使用。

h)查看代码中的using:

(使用命名空间)。

尝试把其中的usingESRI.ArcGIS.Carto;

注释掉(如下图注释情况)。

然后运行,查看结果。

i)使用类库定位工具,定位该接口所在的类库。

j)将工具条控件与地图控件绑定,并为工具条控件添加更多的按钮。

5)运行,并加载数据,查看运行结果。

三、认识总结

了解了如何使用这些控件进行相应作业的过程,为以后的实验做下铺垫。

实验主要进行相关软件的安装以及相关控件的认识,在这个过程中我学会了相关软件的安装以及相关控件的认识,第一个实验是简单的安装与认识软件里面的基本控件,因为开始接触这门软件。

在安装过程中耗费了不少时间,好在后面都安装好了。

学习过程中遇到不少问题,好在老师的悉心指导和同学的帮助,最后完成实验。

 

实验二C#+ArcEngine程序设计入门:

地图浏览与图层控制

一、实验目的与要求:

电子地图的加载、缩放和漫游等浏览功能是空间数据可视化最基本的要求。

本次实验通过指导学生如何编写代码与MapControl控件交互实现基本的地图浏览功能。

实现方式有两种:

1.使用ESRI提供的封装好的现成组件类,编写简单的代码即可;2.自己写代码实现;需要理解地图浏览的编程思路。

通过两种实现方式,进一步了解Map控件的使用方法和组件式GIS集成与开发的思路和流程。

二、实验容:

1)启动VS2010集成开发环境,新建一个VC#项目:

Windows窗体应用程序。

2)在窗体上依次添加:

工具栏控件(toolStrip1)、分栏容器控件(splitContainer1)、容表控件(axTOCControl1)、地图控件(MapControl1)、开发许可控件(axLicenseControl1)。

3)设置容表控件和地图控件的DOCK属性为FILL,以充满整个区域。

4)为工具栏控件添加7个按钮(BUTTON),依次将其文本改为:

加载数据,放大,缩小,漫游,全图,缩小,放大,并设置相应图标。

将其NAME属性改为:

CmdZoomIn,CmdZoonOut,ToolPan,CmdFullextent,ToolZoomOut,ToolZoomIn

5)设计过程中的界面依次如下:

6)工具栏按钮包括:

CommandButtonandToolButton。

7)在FORM1窗体类中,添加一个方法EjectAllButton,用于维护ToolButton按钮的弹起状态。

代码如下:

privatevoidEjectAllButton()//弹起所有工具按钮的方法。

{

ToolPan.Checked=false;

ToolZoomOut.Checked=false;

ToolZoomIn.Checked=false;

ToolDrawLine.Checked=false;

ToolDrawPoint.Checked=false;

ToolDrawPolygon.Checked=false;

ToolSelectionByRectangle.Checked=false;

ToolInformationByPoint.Checked=false;

}

8)将三个工具按钮的checkonclick属性改为:

True。

9)在三个工具按钮的Click事件中,调用方法:

EjectAllButton,并将三个工具按钮的clicked属性设置为TRUE。

10)在按钮的点击事件和地图的鼠标按下事件中添加代码,实现对应功能。

代码如下:

privatevoidaxMapControl1_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvente)

{

IGeometrypgeo=null;

switch(DButton)

{

//如下按下了漫游按钮,则

caseDownButton.pan:

this.axMapControl1.Pan();

break;

//如下按下了绘点按钮,则

caseDownButton.drawpoint:

IPointpp=newPointClass();

pp.X=e.mapX;

pp.Y=e.mapY;

pgeo=ppasIGeometry;

DrawMapShape(pgeo);

break;

//如下按下了绘线按钮,则

caseDownButton.drawline:

pgeo=this.axMapControl1.TrackLine();

DrawMapShape(pgeo);

break;

//如下按下了绘多边形按钮,则

caseDownButton.drawpolgyon:

pgeo=this.axMapControl1.TrackPolygon();

DrawMapShape(pgeo);

break;

//如下按下了放大按钮,则

caseDownButton.zoomin:

this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();

break;

//如下按下了缩小按钮,则

caseDownButton.zoomout:

//根据所画矩形与地图控件可见围的比例,进行缩放

IEnvelopePenv=this.axMapControl1.Extent;

IEnvelopePenv2=this.axMapControl1.TrackRectangle();

doubleRate1=Penv.Width/Penv2.Width;

doubleRate2=Penv.Height/Penv2.Height;

Penv.Expand(Rate1,Rate2,true);

this.axMapControl1.Extent=Penv;

break;

caseDownButton.selectbyrectangle:

IEnvelopepenv=this.axMapControl1.TrackRectangle();

pgeo=penvasIGeometry;

select_features_on_map(pgeo);

ISelectionpselectionset=this.axMapControl1.Map.FeatureSelection;

IEnumFeaturepenumfeature=pselectionsetasIEnumFeature;

penumfeature.Reset();

IFeaturepfeature=penumfeature.Next();

esriGeometryTypeesrigeometrytype;

while(pfeature!

=null)

{

esrigeometrytype=pfeature.Shape.GeometryType;

this.axMapControl1.FlashShape(pfeature.Shape,2,20,

GetSymbol(GetColor(255,20,20),esrigeometrytype));

pfeature=penumfeature.Next();

}

this.axMapControl1.Refresh();

break;

caseDownButton.queryinformationbypoint:

{

#regionselectbypoint

 

//frm2.Hide();

//构造用于点选的矩形

IPointppoint=this.axMapControl1.ToMapPoint(e.x,e.y);

ppoint.X=e.mapX;

ppoint.Y=e.mapY;

IEnvelopeppenv=this.axMapControl1.Extent;

doubleratio=(ppenv.Width+ppenv.Height)/2;

ppenv.Width=ratio/50;

ppenv.Height=ratio/50;

ppenv.CenterAt(ppoint);

pgeo=ppenvasIGeometry;

//定义一个空间过滤器

IQueryFilterpqueryfilter=null;

ISpatialFilterpspatialfilter=newSpatialFilterClass();

pspatialfilter.Geometry=pgeo;

pspatialfilter.GeometryField="shape";

pspatialfilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;

pqueryfilter=pspatialfilterasIQueryFilter;

//定义变量

UIDpuid=newUIDClass();

puid.Value="{40A9E885-5533-11d0-98BE-00805F7CED21}";

IFeatureLayerpfeaturelyr=null;

IFeatureSelectionpfeaturesel=null;

ISelectionSetpselset=null;

IFeatureCursorpfcursor=null;

ICursorpcursor=null;

IFeaturepfeture=null;

esriGeometryTypeesrigeotype;

//将查询的信息输出到FORM2上

//弹出FORM2

if(frm2.formatpresent==false)

{

frm2=newForm2();

frm2.Show();

}

frm2.Show();

//清空FORM2的LISTBOX

frm2.clearlistbox();

//读取地图中的所有特征层

IEnumLayerpenumlyr=this.axMapControl1.Map.get_Layers(puid,true);

//使用用于点选的矩形把与其将相交的要素加入选择集,

penumlyr.Reset();

pfeaturelyr=penumlyr.Next()asIFeatureLayer;

while(pfeaturelyr!

=null)

{

pfeaturesel=pfeaturelyrasIFeatureSelection;

pfeaturesel.SelectFeatures(pqueryfilter,esriSelectionResultEnum.esriSelectionResultNew,false);

pfeaturesel.SelectionColor=GetColor(0,200,100);

//闪烁所有选中的要素

if(pfeaturelyr.Visible==true)

{

pselset=pfeaturesel.SelectionSet;

pselset.Search(null,true,outpcursor);

pfcursor=pcursorasIFeatureCursor;

//将特征层和游标作为参数传给FORM2

frm2.getselfeaturescursor(pfcursor);

pfeture=pfcursor.NextFeature();

esrigeotype=pfeaturelyr.FeatureClass.ShapeType;

while(pfeture!

=null)

{

//闪烁选中的特征

this.axMapControl1.FlashShape(pfeture.Shape,2,50,GetSymbol(GetColor(255,20,20),esrigeotype));

pfeture=pfcursor.NextFeature();

}

}

pfeaturelyr=penumlyr.Next()asIFeatureLayer;

}

this.axMapControl1.Refresh();

break;

#endregion

}

default:

break;

}

}

11)运行结果

三、存在问题

1)此程序涉及到命名按钮和工具按钮。

它们执行功能的方式不同,编写代码时,要注意。

命令按钮执行功能是立即执行,所以代码写在其click事件中。

工具按钮执行功能分两步,所以它对应的功能代码分别写在按钮的click事件中和地图控件的mousedown事件中。

2)区别缩放功能哪些是调用封装好的类哪些是自己编写的代码。

3)在该小程序中,使用到Ienvelope,Icommand,CurrentTool,必须引用它们所在的类库。

4)关于EjectAllButton方法,功能是在点击一个按钮时,把其它的按钮弹起。

四、认识总结

这个实验主要是对Button等控件的认识,认识到工具按钮和命名按钮的区别,否则在使用时会出现一定错误,在代码的实现上也有很大区别,需认清楚之后,在今后的学习上也应注意。

前面实验一对AE的控件有简单的认识,在编写程序时还是有很多问题需要注意,命名按钮和工具按钮由于执行功能的方式不同,编写代码时也不同。

在今后学习和工作中学到对待相似的问题也不定处理方式一样。

 

实验三C#+ArcEngine程序设计入门:

地图绘图

一、实验目的与要求:

地图绘图是GIS基本功能。

本次实验通过指导学生如何编写代码实现在MapControl控件绘图的功能。

此绘图功能只是在地图控件上把图形绘出来,并不保存,随着地图的刷新而消失。

如果要所绘图形在地图上不原地图刷新而消失,可以使用addelement方法,把所绘图形作为一个元素而显示在地图上。

本实验主要使用特定的符号,绘制点、线、面图形。

关于图形的符号修改,请参见图形可视化实验。

要求:

独立完成实验,手动键入代码,积极思考。

理解引入枚举变量的作用,理解switch方法的使用。

二、实验容:

1)打开实验二的VC#项目。

在其基础上,为工具栏再添加绘图按钮,实现绘图功能。

2)在原有工具栏基础上,为工具栏控件再添加3个按钮(BUTTON),依次将其文本属性改为:

绘点、绘线、绘面。

并设置相应图标。

将其NAME属性改为:

ToolDrawPoint,ToolDrawLine,ToolDrawPolygon。

3)设计的界面如下:

4)更新FORM1窗体类中的方法EjectAllButton,用于维护新添加的ToolButton按钮的弹起状态。

代码如下:

publicenumDownButton//用于记录哪个工具按钮被按下。

{

no=0,

drawline=1,

drawpoint=2,

drawpolgyon=3,

pan=4,

zoomin=5,

zoomout=6,

selectbyrectangle=7,

queryinformationbypoint=8,

queryattributes=9

}

5)将新增的三个工具按钮的checkonclick属性改为:

True。

6)在新增的三个工具按钮的Click事件中,调用方法:

EjectAllButton,并写代码将新增三个工具按钮的clicked属性设置为TRUE。

7)在命名空间中,定义一个枚举变量类型(对比:

整型INT是系统定义的)

8)在FORM1类中,使用前面定义的枚举类型,定义一个枚举类型的变量:

Dbutton

9)在工具按钮的click事件中,使用枚举变量记录,按下了哪一个按钮。

10)为窗体类编写一个绘图方法,以供调用。

11)在地图的mousedown事件中编写代码,调用绘图方法,实现绘图功能,代码如下

//如下按下了绘点按钮,则

caseDownButton.drawpoint:

IPointpp=newPointClass();

pp.X=e.mapX;

pp.Y=e.mapY;

pgeo=ppasIGeometry;

DrawMapShape(pgeo);

break;

//如下按下了绘线按钮,则

caseDownButton.drawline:

pgeo=this.axMapControl1.TrackLine();

DrawMapShape(pgeo);

break;

//如下按下了绘多边形按钮,则

caseDownButton.drawpolgyon:

pgeo=this.axMapControl1.TrackPolygon();

DrawMapShape(pgeo);

break;

12)运行,查看绘图效果,如下图

三、存在问题

1)首先理解为什么要使用枚举变量,如何定义枚举类型

2)理解工具按键实现其功能的代码分布在于按钮点击事件和地图的mousedown事件两处。

理解它们如何协调工作。

3)掌握为类添加方法的步骤。

4)理解VC#的事件响应机制。

四、认识总结

这次实验虽然比较曲折,但经过反复查阅资料修改最终完成了实验。

在这个实验中,知道了枚举变量,如何定义枚举类型。

知道了如何编写代码实现在MapControl控件绘图的功能,不论今后工作中是否能用得上,一门新软件的学习对自己终生受益。

通过前面的实验,目前对AE这个软件已经相对来说比较熟悉,这个实验我了解了枚举变量的意思以及如何定义枚举类型,以及用MapControl控件实现地图的绘图功能。

 

实验四C#+ArcEngine程序设计入门:

地图查询与地图要素选择

一、实验目的:

地图查询是GIS基本功能,几乎任何一个GIS系统都具有查询功能。

而地图要素的选择是执行其它操作的前提,所以要素选择功能也是基本功能。

本次实验通过指导学生如何编写代码实现基于MapControl控件的地图查询功能和要素选择功能。

本实验以矩形拉框选择和点击选择为例,同学们可以自己动手实现其他查询方法。

本实验主要使用了ISelectionSet接口的Search方法、IFeatureSelection接口的SelectFeatures方法以及IMAP接口的SelectByShape方法。

本实验编写了获得颜色方法:

GetColor方法,获得符号方法:

GetSymbol方法以及选择要素方法:

select_features_on_map。

属性查询也是GIS的基本功能,同学们可以模仿ARCMAP中的属性查询,本实验中给出了窗体间相互传递数据的方法,依据此方法同学们可以自己给予实现。

要求:

独立完成实验,手动键入代码,积极思考。

理解并掌握本实验中使用的主要接口

和方法。

理解并掌握窗体间传递数据的方法。

学会为类添加属性和方法,并掌握如何调用。

二、实验容:

1、打开实验三的VC#项目。

在其基础上,为工具栏再

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

当前位置:首页 > 高等教育 > 文学

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

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