AE开发实验报告Word下载.docx
- 文档编号:17727655
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:18
- 大小:23.85KB
AE开发实验报告Word下载.docx
《AE开发实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《AE开发实验报告Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
出现这个问题的原因是因为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进行判断
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事件中填写代码,使其数据视图与地图视图同步;
添加“地图与数据同步“菜单
编程“地图与数据同步“菜单单击事件代码
数据视图
布局视图
四.课后任务
4.1要素选择,编程实现通过话一个多变形实现要素的选择
1)在主窗体中添加“要素选择“菜单
编写”要素选择”菜单单击事件响应代码,如下图所示:
实验p2.5gp工具的调用及移植代码
1.1掌握移植代码的方法及技巧,实现点、线、多边形等图形的创建;
1.2掌握gp工具的调用,掌握其窗体模式应用模式的创建;
2.1移植代码,掌握点、线、多边形等图形的创建;
2.2gp工具的调用。
3.1移植代码,掌握点、线、多边形等图形的创建;
1)打开之前实验课创建的工程项目,右击工程名称,选择添加已存在的项目
在弹出的”addexistingitem”对话框中,定位到我们要添加的已存在的项目。
把刚刚添加的“createpointtool“类库,的命名空间改为当前我们的命名空间
在主窗体中添加一个“添加点“菜单项
复制“添加点“菜单单击事件响应代码
仿照“添加点“功能的实现,实现”添加线“、”添加面“、添加圆”、“添加矩形”等几何对象代码的移植工作,效果如下所示:
“添加线”功能运行效果
“添加面”功能运行效果
3.2gp工具的调用
1)在主窗体上添加“gp工具调用”菜单
2)编写“gp工具调用”菜单单击事件代码
添加“geoprocessor“引用
添加“analysistools”引用
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控件中。
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多边形查询
查询首先还是要绘制面的几何图形,然后通过ifeatureclass或
ifeaturelayer的search()方法来执行查询,其方式和点击查询完全相同,只是绘制几何图形的方式不同。
采用拉框范围查询方式,在axmapcontrol控件的onmousedown()事件中记录鼠标点击位置,同时在onmousedown()事件中绘制这样一个面区域。
1)全局变量定义:
在全局中定义变量pointcollection,其为ipointcollection对象,它用于保存每次axmapcontrol控件的onmousedown()事件中点击的鼠标位置,如下图所示:
2)定义绘制面函数:
由于在点击鼠标的同时,还要显示已经绘制的面的范围以便用户更好的选择查询区域,所以需要定义一个绘制面的函数drawpolygon(),其代码如下:
3)记录面的边界点:
由于每次在axmapcontrol上点击鼠标表示该为面创
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AE 开发 实验 报告