ArcGIS Engine高级功能开发
//设置输出路径
strOutputPath = txtOutputPath.Text;
//叠置分析结果
IGeoProcessorResult result = null;
//创建叠置分析实例,执行叠置分析
string strOverlay=cboOverLay.SelectedItem.ToString(); try {
//添加处理过程消息
txtMessage.Text = \开始叠置分析……\+\; switch (strOverlay) {
case \求交(Intersect)\:
Intersect intersectTool = new Intersect(); //设置输入要素
intersectTool.in_features = pObject; //设置输出路径
strOutputPath += strName + \ + \; intersectTool.out_feature_class = strOutputPath; //执行求交运算
result = gp.Execute(intersectTool, null) as IGeoProcessorResult; break; case \求并(Union)\:
Union unionTool = new Union(); //设置输入要素
unionTool.in_features = pObject; //设置输出路径
strOutputPath += strName + \ + \; unionTool.out_feature_class = strOutputPath; //执行联合运算
result = gp.Execute(unionTool, null) as IGeoProcessorResult; break;
case \标识(Identity)\:
Identity identityTool = new Identity(); //设置输入要素
identityTool.in_features = inputFeat; identityTool.identity_features = overlayFeat; //设置输出路径
strOutputPath += strName + \ + \; identityTool.out_feature_class = strOutputPath; //执行标识运算
result = gp.Execute(identityTool, null) as IGeoProcessorResult;
ArcGIS Engine高级功能开发
break; } }
catch (System.Exception ex) {
//添加处理过程消息
txtMessage.Text += \叠置分析过程出现错误:\ + ex.Message+\; }
//判断叠置分析是否成功
if (result.Status != ESRI.ArcGIS.esriSystem.esriJobStatus.esriJobSucceeded) txtMessage.Text+=\叠置失败!\; else {
this.DialogResult = DialogResult.OK;
txtMessage.Text += \叠置成功!\; } }
细心的同学可能会发现,Union和Intersect设置输入要素和叠置要素的方式是一致的,它们是将两种要素读入到IGpValueTableObject中,然后赋值给in_features,而Identity工具是针对in_features和 identity_features分别赋值。因为在ArcGIS的叠置分析中Union和Intersect两种工具可以针对两个以上的图层进行叠置运算,而Identity工具是针对两个要素的运算,其实质是使用叠置要素对输入要素进行更新的一个过程。
另外,Identity工具需要本机中具有ArcInfo级别的Licence权限,如果你的当前电脑没有安装ArcInfo,请在实现的过程中将Identity的相关代码进行屏蔽,如果装有ArcInfo,在运行程序之前,首先需要打开ArcGIS LicenceManager的服务。我们通过以下方式设置Licence权限。 进入到MyGIS的MainForm窗体的设计器界面,右键单击LicenceControl,选择菜单中的“属性”选项。选择Products中的ArcInfo选项。
图 17 LicenceControl设置
ArcGIS Engine高级功能开发
运行程序,点击菜单“叠置分析”,弹出叠置分析参数设置窗口,添加叠置分析要素文件,并设置输出路径如下。
图 18叠置分析参数设置
点击分析,可得到如下结果。
图 19叠置分析效果
3.2.3 小结
本节我们系统讲解了叠置分析功能的开发并进一步完善了MyGIS系统。当然,我们的工程中的叠置分析的功能还存在一些不足之处,比如叠置求交和叠置联合是针对两个或以上要素类进行的操作,我们这里仅实现了两个要素类的操作。如果您有兴趣,可以自己动手进行扩展。同时,您也可以尝试自己通过ArcEngine来实现ArcGIS中的其他分析操作,并添加到MyGIS中。
ArcGIS Engine高级功能开发
ArcGIS Engine高级功能开发
4 地图编辑
地图编辑功能涉及到比较复杂的地图与鼠标的交互以及事件的响应,ArcGIS提供了强大的地图编辑的相关功能。本节我们将尝试实现一些简单的地图编辑功能,包括点、线、面要素形状的创建和移动。通过本节希望你能掌握ArcEngine实现地图编辑的机制以及常用的地图编辑的接口。
4.1 添加控件
新建一个C#.Net项目,项目名称为OverLay,将Form1的名字设置为MainForm,Text属性设为“地图编辑”,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl、四个Button、两个ComboBox、两个Label和一个GroupBox等控件。
将ToolbarControl 、TOCControl的伙伴控件设为MapControl,ToolbarControl 加载添加数据按钮和地图浏览的功能按钮。控件布局效果如下图所示。
图 20界面效果
控件属性设置如下:
表 3控件属性设置
控件类型 Label Label Name属性 Text属性 选择图层: 编辑任务: 控件说明 MapControl中的图层 编辑的方式 cboLayers载入图层名称 开始编辑状态 ComboBox cboLayers ComboBox cboTasks Button Button
btnRefreshLayers 更新图层 btnStartEditing 开始编辑