ArcGISEngine二次开发提高篇 联系客服

发布时间 : 星期三 文章ArcGISEngine二次开发提高篇更新完毕开始阅读df0ab248b81aa8114431b90d6c85ec3a86c28b75

ArcGIS Engine二次开发

——提高篇

1 缩略图(鹰眼)

鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。在本小节中我们将学习如何制作这种鹰眼。

1.1 添加控件

新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。布局如下图所示。左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。

图 1 界面布局

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。

图 2添加按钮

1.2 代码添加及解释

鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。

下面开始实现鹰眼功能,添加、、

三个引用。首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:

private void axMapControl1_OnExtentUpdated(object sender, e) {

et项目,项目名称为Buffer,将Form1的名字设置为MainForm,并添加

ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnBuffer,Text属性设定为“缓冲区分析”。控件布局效果如下图所示。

图 3控件布局效果

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。

图 4添加按钮

1.2.1 代码添加及解释

首先添加如下四个命名空间的引用。

在使用Geoprocessor工具实现缓冲区分析时,需要首先定义一个Geoprocessor对象,因为命名空间“也包含Geoprocessor类,为了避免混淆,我们使用命名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然后定义一个操作类Buffer,并设置参数,生成缓冲区的参数包含原始图层,缓冲半径和输出路径,最后使用已定义的Geoprocessor对象执行即可。双击“生成缓存区”按钮,添加代码如下:

private void btnBuffer_Click(object sender, EventArgs e) {

hp)|*.shp\;

hp\ != { (\输出路径错误!\); return; }

et项目,项目名称为OverLay,将Form1的名字设置为MainForm,并添加

ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnIntersect,Text属性设定为“叠置求交”。控件布局效果如下图所示。

图 5控件布局效果

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。

图 6添加按钮

1.2.2 代码添加及解释

首先添加如下引用:

using 与缓冲区分析的实现类似,在使用Geoprocessor工具实现叠置分析时,需要首先

定义一个Geoprocessor对象,因为命名空间“也包含Geoprocessor类,为了避免混淆,我们使用命

名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然

后定义一个操作类,这里为Intersect,然后设置其操作参数,这里我们仅设置输入的要素,最后使用已定义的Geoprocessor对象执行即可。双击“生成缓存区”按钮,添加代码如下:

private void btnIntersect_Click(object sender, EventArgs e) {

hp)|*.shp\;

= \选择第一个要素\; hp)|*.shp\;

= \选择第二个要素\; hp)|*.shp\; hp\; ;

string strName = (index);

Unionet项目,项目名称为OverLay,将Form1的名字设置为MainForm,Text

属性设为“地图编辑”,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl、四个Button、两个ComboBox、两个Label和一个GroupBox等控件。

将ToolbarControl 、TOCControl的伙伴控件设为MapControl,ToolbarControl 加载添加数据按钮和地图浏览的功能按钮。控件布局效果如下图所示。

图 7界面效果

控件属性设置如下:

表 1控件属性设置

控件类型 Label Label ComboBox ComboBox Button Button Button Button GroupBox Name属性 Text属性 选择图层: 编辑任务: 控件说明 cboLayers cboTasks btnStartEditing btnSave btnStopEditing MapControl中的图层 编辑的方式 cboLayers载入图层名称 开始编辑状态 保存编辑 结束编辑状态 控件容器 btnRefreshLayers 更新图层 开始编辑 保存 结束编辑 地图编辑 1.3 添加引用和代码

ArcEngine中的地图编辑使用IWorkspaceEdit接口来进行编辑状态的管理,在需要对指定的工作空间进行编辑时,首先使用IWorkspaceEdit获取该工作空间的数据,然后使用

StartEditing方法开始编辑状态,StartEditOperation方法打开具体编辑的操作,编辑完成后,使用StopEditOperation方法关闭编辑操作,使用StopEditing方法关闭编辑状态,完成编辑。

在本例中,我们实现了新的点线面要素的创建和移动的功能,涉及到了比较复杂的鼠标与地图间的交互,这个功能的实现中,IDisplayFeedback是一个十分关键的接口,它具有涉及创建要素,移动要素、编辑节点等31个实现类,能够实现鼠标与地图交互中的事件的追踪,返回新的几何对象。

本例的实现,我们首先来添加一个编辑类,将涉及到的编辑的相关方法抽象到这个类中。在项目中添加“Edit”类。添加如下引用。

using 定义如下成员变量。