实验二 地图显示和图层控制 下载本文

实验二 地图显示和图层控制

(3学时)

实验数据:

请到教师课件里下载。实验数据为GIS开发技术A\\实验指导\\中的“实验数据.rar”

实验内容:

1. 加载图层及相关操作

2. 使用ArcGIS Engine中封装好的对象实现地图的操作 3. 使用TocControl控件控制图层 4. 使用TextElement绘制标注 5. 鹰眼图功能的实现

1.加载图层及相关操作

1)使用属性向MapControl中添加图层 (1)新建一个项目

启动Visual Studio.NET,在【文件】菜单中选择【新建项目】,在“新建项目”对话框中选择项目类型为“Visual C#”,模板为“Windows应用程序”,选择“位置”,点击“确定”保存该项目。

(2)添加选项卡

在“工具箱”的空白处单击鼠标右键,在弹出的快捷菜单中选择“添加选项卡”,然后在新增选项卡上输入“ESRI控件”作为选项卡标签。

1

(3)添加ArcGIS Engine控件

①右键点击“ESRI控件”标签,从快捷菜单中选择“选择项”。

②在弹出的“选择工具项”对话框中选择“.NET Framework 组件”选项卡,选中“AxLicenseControl”、“AxMapControl”、“AxTOCControl”、“AxToolbarControl”和“AxPageLayoutControl”等复选框,单击“确定”按钮,将所选择的控件添加到工具栏中。

③在项目菜单中选择“添加引用”,在弹出的“添加引用”对话框中添加以下常用的类库引用:

? ESRI.ArcGIS.Carto

2

? ESRI.ArcGIS.Display ? ESRI.ArcGIS.Geometry ? ESRI.ArcGIS.System ? ESRI.ArcGIS.SystemUI

(4)在窗体中嵌入ArcGIS Engine控件

双击工具箱中的“ESRI”标签栏中的AxMapControl和AxLicenseControl控件,将它们都添加到窗体上,并调整好大小和位置。

(5)右键单击MapControl控件,在弹出的对话框中选择【属性】

3

(6)在弹出的属性页窗体中添加图层

添加图层

(7)运行程序,显示结果

2)使用程序动态地向MapControl中添加图层

①使用绝对路径加载图层(请思考这种加载图层的方式有何局限性?) private void Form1_Load(object sender, EventArgs e) {

axMapControl1.AddShapeFile(\“, \ axMapControl1.AddShapeFile(“d:\\\\data\\\\world\\\\“, \ axMapControl1.AddShapeFile(\“, \}

②使用相对路径加载图层(要求同学们重点掌握这种加载图层的方式) private void Form1_Load(object sender, EventArgs e)

4

{

string CurrentPath = Directory.GetCurrentDirectory();

Directory.SetCurrentDirectory(CurrentPath + \string FilePath = Directory.GetCurrentDirectory();

axMapControl1.AddShapeFile(FilePath, \axMapControl1.AddShapeFile(FilePath, \axMapControl1.AddShapeFile(FilePath, \}

3)图层的相关操作

(1)返回图层名称

在列表框中显示出地图中各个图层的图层名,如下图所示:

(2)控制图层的显示

通过复选框控制图层的显示与隐藏,如下图所示:

(3)控制图层的显示顺序

通过拖动列表框中的图层名来控制图层的显示顺序,如下图所示:

5

2.使用ArcGIS Engine中封装好的对象实现地图的操作

这部分实验请改写实验一中的地图操作代码,用ArcGIS Engine中封装好的对象实现地图的基本操作。

1) 常用的封装好的地图操作工具(Tool)

① ② ③ ④ ⑤ ⑥

ControlsMapZoomInToolClass (放大地图) ControlsMapZoomOutToolClass (缩小地图) ControlsMapPanToolClass (移动地图)

ControlsMapZoomPanToolClass (缩放/平移地图) ControlsMapIdentifyToolClass (点图查询) ControlsMapMeasureToolClass (量测工具)

2) 常用的封装好的地图操作命令(Command)

① ControlsMapZoomInFixedCommandClass (中心放大地图命令)

6

② ③ ④ ⑤ ControlsMapZoomOutFixedCommandClass (中心缩小地图命令) ControlsMapFullExtentCommandClass (全图显示命令) ControlsMapZoomToLastExtentBackCommandClass (前一视图命令) ControlsMapZoomToLastExtentForwardCommandClass(后一视图命令)

3)代码示例

①通过ControlsMapZoomInTool实现放大地图操作

ICommand Cmd;

Cmd=new ControlsMapZoomInToolClass(); Cmd.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool=(ITool)Cmd;

②通过ControlsMapFullExtentCommand实现全图显示

ICommand cmd;

cmd = new ControlsMapFullExtentCommandClass(); cmd.OnCreate(axMapControl1.Object); cmd.OnClick();

3.使用TocControl控件控制图层

1)绑定TocControl控件

TocControl控件是ArcGIS Engine中用来管理MapControl中图层的控件,它的使用非常简单,只需要把它和对应的MapControl控件进行绑定即可。绑定的两种方法如下: (1)在控件属性中直接绑定

右键单击TocControl控件,在弹出的属性页对话框中设置“Buddy”这一项为要绑定的MapControl控件,如下图所示:

7

(2)使用代码进行动态绑定

也可以通过代码的方式把TocControl控件和MapControl控件进行绑定,代码如下: axTOCControl1.SetBuddyControl(axMapControl1); 2)使用TocControl控件对图层进行高级操作

(1)修改图层的名称

首先,在Form的Load事件中添加如下的代码:

axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual; 其次,在TocControl的OnEndLabelEdit事件中添加以下代码即可以实现图层名称的修改:

private void axTOCControl1_OnEndLabelEdit(object sender, TOCControlEvents_OnEndLabelEditEvent e) {

if (e.newLabel.Trim() == \ {

e.canEdit = false; } }

(2)拖动图层改变图层的叠放顺序

在TocControl控件的属性页中把“Enable Layer Drag and Drop”复选框选上即可以实现拖动图层改变图层顺序的操作。

(3)在TocControl上给图层添加快捷菜单

这部分实验要求鼠标右键点击TocControl控件的不同部位弹出不同的快捷菜单,并实现相应的功能。

① 当鼠标右键单击TocControl控件中的地图图标时,弹出如下的快捷菜单

8

请同学们通过代码实现快捷菜单中的具体功能。

② 当鼠标右键单击TocControl控件中的某个图层时,弹出如下的快捷菜单

请同学们通过代码实现快捷菜单中的具体功能。

4.使用TextElement绘制标注

选择country图层作为标注图层,以国家名进行图层的标注。标注的结果如下图所示:

9

5.鹰眼图功能的实现

具体要求:

① 实现鹰眼图和主地图同时装载一致的数据 ② 当在主地图中进行缩放、漫游等操作时,同时更新鹰眼图到对应的范围和位置 ③ 在鹰眼图中点击地图或者拖动矩形框时,主地图能够定位到对应的范围和位置

10