实验二 地图显示和图层控制
(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