AE开发实验报告.docx

上传人:b****6 文档编号:8254041 上传时间:2023-01-30 格式:DOCX 页数:23 大小:26.23KB
下载 相关 举报
AE开发实验报告.docx_第1页
第1页 / 共23页
AE开发实验报告.docx_第2页
第2页 / 共23页
AE开发实验报告.docx_第3页
第3页 / 共23页
AE开发实验报告.docx_第4页
第4页 / 共23页
AE开发实验报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

AE开发实验报告.docx

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

AE开发实验报告.docx

AE开发实验报告

实验p2.2使用控件创建第一个桌面应用程序

一.实验目的

1)掌握使用控件创建桌面应用程序的主要流程;

2)掌握mapcontrol控件、toc控件、toobar控件的特性及其与arcmap中的对应关系;

3)编写代码实现加载mxd文档、添加shape文件、鹰眼放大等功能;

4)掌握arcgisdeveloperhelp查询接口帮助的方法。

二.实验内容

1)使用控件创建桌面应用程序的主要流程;

2)代码加载mxd文档

3)添加shape文件

4)鹰眼功能

三.实验步骤

3.1使用控件创建桌面应用程序

1)新建一个windows窗体应用程序(文件--新建--项目--windos窗体应用程序

2)设置项目保存位置及项目名称,在点了确定之后,在vs的工具箱中找到到和arcgisengine相关的控件

其中,axmapcontrol就是map地图控件,axpagelayoucontrol是布局地图控件,axtoccontrol是目录控件,axtoolbarcontrol是gis工具栏控件,axscenecontrol是scene三维场景控件,axglobecontrol是globe控件,axlicensecontrol是许可控件,axsymbologycontrol控件,axarcreadercontrol是arcreader控件,axarcreaderglobecontrol是arcreaderglobe控件。

axlicensecontrol是许可控件,一般gis系统中都必须添加,否则无法使用。

3)然后添加toc、map、toolbar、license控件。

license(许可)控件是首选的,否则其他控件无法使用,具体布局如下图所示

4)设置工程初始化时自动添加地图文档(map控件-右键-属性)

5)设置buddy属性,使toolbar控件和toc控件与map控件的关联

6)在toolbar中进行设置(toolbar控件-右键-属性)

7)添加工具命令

在toolbarcontrol上右键-属性在items选项卡中添加几个工具命令

添加结果如下:

8)运行我们的应用程序,发现下面的错误

出现这个问题的原因是因为arcgis10发生了变化,将"esri.arcgis.runtimemanager.bind(esri.arcgis.productcode.engine)"语句添加到使用ao对象的前面,如放在main函数中,如下图所示:

9)上面工作完成之后,按f5键运行程序,运行成功之后出现以下界面

尝试使用工具栏上的工具,如打开文档、保存文档等命令,测试toolbar控件是否与map控件相关联。

至此,我们的没有编写任何语句,只是使用一些arcengine控件,就可以搭建一个简单的arcgis桌面应用程序。

3.2编程实现加载mxd文档

用代码添加mxd文档,用到axmapcontrol.loadmxfile(sfilepath),我们只要将mxd文档的路径传给这个方法即可。

我们添加一个按钮,把text属性改为"加载mxd文档",如下图所示:

编写"打开mxd文档"按钮的单击事件代码,如下图所示:

单击f5运行程序,效果如下:

单击"加载mxd文档"按钮,打开一个mxd

文档

效果如下:

3.3编程实现添加shape文件

类似实现"打开mxd文档"操作,在主窗体中添加一个"添加shape文件"按钮

编写"添加shape文件"按钮单击事件代码:

编写上述代码中涉及到的"openshapefile"函数,实现shapefile文件路径和文件名的提取并通过数组形式返回值

单击f5,运行程序

单击"添加shape文件"按钮,尝试添加一个shapefile文件。

3.4编程实现鹰眼功能

分析:

鹰眼图的操作主要由以下几个动作,当在一个控件中移动一幅图的时候另一控件中的图也发生变化,当在主控件中重新加载一幅图的时候,另外一个控件的图也发生相应的变化,同时我们在鸟瞰的控件中加入一红色边框,注意这个其实是一个面,只是填充的颜色是透明的而已。

通过分析我们知道,我们要添加两个mapcontrol控件,名字分别是axmapcontrol1和axmapcontrol2,其中axmapcontrol1为主图,而axmapcontrol1为鸟瞰图。

1)在主窗体上添加一个axmapcontrol控件,作为鹰眼功能的鸟瞰图。

2)编写主图axmapcontrol1中axmapcontrol1_onfullextentupdated响应事件代码,实现当主图中显示的范围改变时,鸟瞰图中相应的出现一个红色的矩形框,表

示主图中的显示范围

3)编写主图axmapcontrol1中axmapcontrol1_onmapreplaced事件响应代码,实现当主图范围改变时,鸟瞰图的范围相应的发生改变。

对于鸟瞰图axmapcontrol2控件,我们需编写axmapcontrol2的onmousemove和onmousedown中分别添加以下代码,实现鸟瞰图对主图的控制。

单击f5,运行效果如下图所示:

四.课堂任务

4.1增加一状态栏,当地图放大缩小后显示图幅范围坐标值。

1)在主窗体中添加一个statusstrip(状态栏)控件。

2)右击statusstrip1控件,在弹出的菜单中单击选择"edititems",如下图所示:

3)在弹出的"itemscollectioneditor"对话框总单击add按钮,添加三个状态项目成员,并把"toolstripstatuslablel1"text属性改为"当前图幅信息",如下图所示:

4)在主图(axmapcontrol1)axmapcontrol1_onfullextentupdated事件中添加如下代码,实现当主图的图幅范围改变时,状态也相应的显示出当前图幅的信息。

按f5运行程序,效果如下所示:

五.实验小结

实验p2.3访问地图范围及属性表

一.实验目的

1)掌握ienvelope、igraphicscontainer、iactiveview、ilayer等接口;

2)掌握datagridview、下拉菜单等界面控件;

3)指定颜色、指定线型、面符号等绘制矩形框;

4)修改代码错误;

5)读取属性表字段名称、记录内容等;

二.实验内容

编程实现显示属性表的信息。

三.实验步骤

3.1编程实现显示属性表的信息

1)在主窗体上添加一个"contextmenustrip"(上下文)控件。

右击"contextmenustrip1"控件,选择"edititems"

在弹出的"itemscollectioneditor"对话框中,单击add按钮,添加一个打开属性表菜单

2)右击工程名称,在弹出的菜单中选择添加新项

在弹出的"addnewitem"对话框中选择"windowsform",并把"name"改为属性表。

在"属性表"窗体中添加一个"datagridview"控件,并通过点击"datagridview"控件右上角的三角图标,为"datagridview"添加一条属性列。

编写axtoccontrol1控件右击响应事件代码,实现当在axtoccontrol1控件上右击时,弹出打开属性表菜单。

首先定义两个全局变量,如下图所示:

其次编写axtoccontrol1控件右击响应事件代码,如下所示:

编写"打开属性表"单击事件代码,实现当单击"打开属性表"菜单时,弹出相应feature属性表

在属性表窗体中定义一个全局变量pfeaturelayer,实现主窗体与属性窗体之间的值传递

修改属性表窗体的构造函数,实现属性表窗体的初始化

编写"publicvoiditable2dtable()"函数,实现往"dtgridview"控件上添加相应要素的属性记录

编写上述代码中涉及到的"publicstaticstringparsefieldtype(esrifieldtypefieldtype)"函数,实现相应字段的类型转换

在"属性表"窗体的构造函数中引用"publicvoiditable2dtable()

对函数的调用

按f5运行程序,程序运行效果如下所示:

"函数,实现

四.课堂任务

优化程序:

1)打开文件中,将文件路径指定到程序运行的当前目录;

在这里,我们只需把"openshpfile.initialdirectory"的值改为

"environment.currentdirectory.tostring()"即可,如下图所示:

运行效果如下所示:

2)当打开文件对话框,操作为取消后,程序出错,请修改该错误;

在这里我们可以这样修改,把"publicstring[]openshapefile()"函数中代码,直接搬到"添加shape文件"按钮单击事件代码中,并稍作改动,如下图所示:

这样,我们就避免了当操作位取消时,程序运行出错的状况。

3、编写代码实现,统计属性表的字段数目和记录数目

在属性表窗体中添加两干个label控件、两个textbox控件和一个button控件,布局如下图所示:

编写"查询"按钮单击事件响应代码,实现在响应的textbox控件中显示特定的内容,如下图所示:

按f5运行程序,效果如下图所示:

五.实验小结

p2.4命令、工具与命令条

一.实验目的

1)掌握命令、工具、工具控件的异同;

2)掌握用代码将命令宿主到控件上;

3)掌握自定义命令按钮的编写;

4)掌握脱离toolbarcontrol控件的命令和工具;

5)掌握地图视图和布局视图的同步;

二.实验内容

2.1将一个命令宿主到toolbarcontrol控件上;

2.2自定义命令按钮;

2.3脱离toolbarcontrol控件的命令和工具

2.4布局视图与地图视图同步;

三.实验步骤

3.1将一个命令宿主到toolbarcontrol控件上;

1)在主窗体中添加一个button控件,将其text属性设置为"将一个命令宿主到toolbarcontrol控件",如下图所示:

编写"将一个命令宿主到toolbarcontrol控件"按钮单击事件代码,如下图所示:

按f5运行程序,效果如下:

选择和命令对象协作的控件

新增一个全局变量"pmapcontrol"

展开重载类方法,对其进行修改,使其能对hook进行判断

按f5运行程序,效果如下图所示:

3.3脱离toolbarcontrol控件的命令和工具

添加一个menustrip(菜单)控件。

添加一个菜单项,命名为"添加数据"

编写"添加数据"菜单单击事件代码

按f5运行程序,运行效果如下图所示:

3.4布局视图与地图视图同步;

分析:

要实现这两个控件的联动,我们首先回顾下情景,两个控件的联动不仅是简单切换,在时候还因该保留各自上一些状态比如说当我们在mapcontrol上有一个放大操作时,当我们没将这取消而切换到上有一个放大操作时,当我们没将这取消而切换到pagelayout控件,在pagelayout控件上做了一些操作后,又切换到mapcontrol控件,我们应该还能进行放大操作而不用重新使用方法缩小工具。

通过分析我们可以得到下面几点:

当切换两个控件的时候,地图的同步各自控件上激活的工具或者命令的保留当存在toc控件和toolbar控件的时候,切换了地图控件和布局控件,那么这两个控件的伙伴控件也应发生变化。

具体实现步骤如下:

1)在form中添加tabcontrol控件,分别将地图控件和布局控件放置到里面,如下图所示:

2)为了保持地图视图和布局视图的同步,新增类

controlssynchronizer.cs

3)为"controlssynchronizer"类增加一些必要的引用

为"controlssynchronizer"定义一些必要的全局变量

修改"controlssynchronizer"类的构造函数,实现窗体之间的值传递

为"controlssynchronizer"类定义一些必要的属性为"controlssynchronizer"类定义一些必要的属性(详细见源代码)

为"controlssynchronizer"类定义一些必要的方法(详细见源代码)

新建一个类项目,命名为"maps"并定义为imaps,idisposable的子类

为"maps"类添加一些必要的引用

定义一个全局变量"privatearraylistparray=null;"

修改"maps"类的构造函数,实现"maps"的初始化

为maps类添加一些必要的函数,用于表示地图的集合(详细见源代码)

改动opennewmapdocument类的onclick,实现map控件和布局控件的同步

在主窗体中定义一个全局变量"pmapcontrolssynchronizer"

在主窗体的load事件中添加如下代码,实现初始化工作

在tabcontrol1的tabcontrol1_selectedindexchanged事件中填写代码,使其数据视图与地图视图同步;

添加"地图与数据同步"菜单

编程"地图与数据同步"菜单单击事件代码

按f5运行程序,效果如下所示:

数据视图

布局视图

四.课后任务

4.1要素选择,编程实现通过话一个多变形实现要素的选择

1)在主窗体中添加"要素选择"菜单

编写"要素选择"菜单单击事件响应代码,如下图所示:

按f5运行程序,效果如下所示:

五.实验小结

实验p2.5gp工具的调用及移植代码

一.实验目的

1.1掌握移植代码的方法及技巧,实现点、线、多边形等图形的创建;1.2掌握gp工具的调用,掌握其窗体模式应用模式的创建;

二.实验内容

2.1移植代码,掌握点、线、多边形等图形的创建;2.2gp工具的调用。

三.实验步骤

3.1移植代码,掌握点、线、多边形等图形的创建;

1)打开之前实验课创建的工程项目,右击工程名称,选择添加已存在的项目

在弹出的"addexistingitem"对话框中,定位到我们要添加的已存在的项目。

把刚刚添加的"createpointtool"类库,的命名空间改为当前我们的命名空间

在主窗体中添加一个"添加点"菜单项

复制"添加点"菜单单击事件响应代码

按f5运行程序,效果如下所示:

仿照"添加点"功能的实现,实现"添加线"、"添加面"、添加圆"、"添加矩形"等几何对象代码的移植工作,效果如下所示:

"添加线"功能运行效果

"添加面"功能运行效果

3.2gp工具的调用

1)在主窗体上添加"gp工具调用"菜单

2)编写"gp工具调用"菜单单击事件代码

添加"geoprocessor"引用

添加"analysistools"引用

按f5运行程序,效果如下所示:

四.课后任务

4.1调试gp工具-featuretoline

1)添加"gp工具-featuretoline"菜单项

编写"gp工具-featuretoline"单击事件响应代码:

单击f5运行程序,运行效果如下所示:

4.2改进gp工具-gpintersect,使其像arcmap中一样的窗体式输入数据及动态的输出结果:

五.实验小结

实验p2.6空间数据库相关开发

一.实验目的

1.1了解geodatabase统一的存储框架;

1.2了解iworkspace接口1.3掌握打开空间数据的方法,以及如何进行相关要素类的查看、创建、添加、删除操作。

1.4课堂3学时,课后3学时

二.实验内容

2.1编程实现打开个人数据库;

2.2编程实现把个人数据库中的要素添加到axmapcontrol1控件并显示;

2.3编程实现获取个人数据库中的要素类;

2.4编程实现创建要素类;

2.5编程实现删除要素类

三.实验步骤

3.1编程实现打开个人数据库并把个人数据库中的要素添加到

axmapcontrol1控件中显示;

添加"打开个人数据库"菜单项

编写"打开个人数据库"单击事件代码:

在主窗体中添加一个"openfiledialog"(打开文件对话框)控件

在主窗体程序中添加与空间数据库操作相关的引用"using

esri.arcgis.datasourcesgdb"

编写上述代码中涉及的adddatatomap函数,实现把个人数据库数据添加到axmapcontrol控件中。

按f5运行程序,效果如下图所示:

3.2获取要素类;

创建"获取要素类"菜单

编写"获取要素类"单击事件响应代码

编写上述代码中所涉及的函数"publicstringwspath()",以实现获取文件路径功能。

在主窗体中添加一个listbox控件,并把<name>属性改为featureclassbox

按f5运行程序,效果如下所示:

3.3创建要素类;

在主窗体中添加"创建要素类"菜单

编写"创建建要素类"菜单单击事件响应代码(详见源代码):

运行成功后在arccatalog下查看效果如下所示:

3.4编程实现删除要素类

在主窗体中添加"删除要素类"菜单

编写"删除要素类"单击事件响应代码

按f5运行,效果如下所示:

删除要素类操作之前

删除要素类操作之后

四.课后任务

4.1添加按钮,并实现打开文件数据库

添加"打开文件数据库"菜单

编写"打开文件数据库"菜单单击事件响应代码:

在窗体上添加一个"folderbrowserdialog(文件浏览对话框)"控件

运行程序,打开文件数据库效果如下所示:

五.实验小结

2.7空间数据读取与输出

一.实验目的

1.1掌握矢量数据的坐标读取方法,以便于进行后续计算,如两线的夹角,线的长度等;

1.2掌握栅格数据的读取与存储,以便于进行自定义栅格数据处理,如平滑窗口处理等;

二.实验内容

2.1编程实现矢量坐标数据读取与输出;

2.2编程实现栅格数据读取与输出。

三.实验步骤

3.1矢量坐标数据读取与输出

1)在安徽大学数据校园管理系统主窗体的工具条上添加一个"要素选择"工具命令。

2)在主窗体上添加一个"获取矢量数据坐标"菜单项

编写"获取矢量数据坐标"菜单项单击事件响应代码(详细代码见源程序)

添加对文件相关命名空间"using.system.io"的引用

运行程序,矢量数据坐标读取效果如下图所示:

3.2栅格数据读取与输出

1)在主窗体上添加"栅格数据读取与存储"菜单

2)编写"栅格数据读取与存储"菜单单击事件响应代码(详细代码见源程序):

编写上一步中涉及到的函数"publicirasterworkspace2

createrasterworkspace()",实现栅格数据工作空间的创建。

添加与栅格数据操作的相关命名空间"usingesri.arcgis.datasourcesraster"的引用

运行程序,栅格数据读取效果如下图所示:

栅格数据读取之前

重分类读取之后

四.课后任务

4.1将3.1中的map获取方式改为

方式1:

通过mapdocument获得map对象

方式2:

在命令、工具类中获得map对象

4.2将3.1功能改造为能处理多个要素的,即当选择集为多个要素而不仅仅局限于1个要素.

4.3将task2.7.3功能改造:

1)写像元不局限于byte型;

2)只读取栅格文件,不对原文件进行修改;创建新的栅格数据,用于保存计算值。

五.实验小结

实验p2.8空间查询

一.实验目的

1.1掌握和查询相关的对象和接口;

1.2编程实现使用ifeatureselection接口高亮显示某个要素类;

1.3编程实现根据属性查询和几何条件查询;

1.4编程实现空间查询并创建table;1.5课堂3学时,课后3学时

二.实验内容

2.1使用ifeatureselection接口高亮显示某个要素类;

2.2编程实现属性查询功能;

2.3编程实现根据几何条件查询对象;

2.4编程实现空间查询并创建table;

三.实验步骤

3.1使用ifeatureselection接口高亮显示某个要素类

1)在主窗体上创建"高亮显示"菜单

2)编写"高亮显示"菜单单击事件响应代码

3)编写上一步涉及到的"getlayer(imappmap,stringlayername)"函数,用于实现获取图层功能。

运行程序,效果如下所示:

3.2属性查询

1)添加"属性查询"菜单

2)编写"属性查询"单击事件响应代码

5)在每次添加新数据或打开新地图操作的地方引用refreshlayer()函数,实现函数的调用

运行程序:

选择要查询的图层以及查询条件,效果如下,可以看到,被查询到的要素发生闪烁。

效果如下所示:

3.3根据几何条件查询对象

3.3.1点查询

1)创建"根据几何条件查询"菜单

2)编写"根据几何条件查询"单击事件响应代码,实现查询条件的切换

在主窗体上添加两个radiobutton控件,并把name属性分别设置为pointradiobutton和polygonradiobutton,用来控制几何查询的查询模式:

定义一个全局变量doqueryindex,用来表示当前要执行的查询模式:

点击查询还是拉框查询。

如果值为1表示点击查询,如果值为2表示拉框查询,默认其值为0,不执行任何操作。

该变量定义如下

点击范围可以通过axmapcontrol的onmousedown()事件来执行,在

axmapcontrol中按下鼠标即可获得点击位置,通过查询该位置的数据对象即可,编写axmapcontrol的onmousedown()事件响应代码,如下图所示:

运行程序,点查询效果如下:

3.3.2多边形查询

分析:

查询首先还是要绘制面的几何图形

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

当前位置:首页 > 小学教育 > 语文

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

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