1、前言
很久没写ArcEngine的内容了,正好这次有同志提了一个问题:如何用ArcEngine实现批量提取面要素之间的公共边?捣鼓了半天总算是解决了,下面就来说一说解决思路。
2、ArcMap的实现方法
首先准备一份测试数据,如下图所示:

提取公共边用ArcMap做非常简单,只需要打开Analysis Tools下的Intersect相交工具,将Output Type设置为LINE,运行工具,马上就能得到面要素的公共边。如下图所示:

结果如下图所示:

3、方法一:调用GP提取公共边
既然已经知道了在ArcMap中如何使用Intersect工具来提取公共边,那么我们就可以在ArcEngine中调用GP工具来实现。不过需要注意:ArcEngine代码初始化时需要设置License的权限,代码如下:
using ESRI.ArcGIS.Geoprocessor;
using System;
using System.Windows.Forms;
namespace App
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btn_Click(object sender, EventArgs e)
{
// 设置参数
ESRI.ArcGIS.AnalysisTools.Intersect tool = new ESRI.ArcGIS.AnalysisTools.Intersect();
tool.in_features = @"C:\Users\Virtual\Desktop\data\面.shp";
tool.output_type = "LINE";
tool.out_feature_class = @"C:\Users\Virtual\Desktop\data\线.shp";
// 执行GP
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
gp.Execute(tool, null);
}
}
}
运行结果如下图所示:

4、方法二:根据空间关系及拓扑工具提取公共边
获取两个面之间的公共边分以下两步:
- 利用
IRelationalOperator判断两个Polygon是否为Touches关系? - 如果是
Touches关系,利用ITopologicalOperator的Intersect方法提取相交部分即可
代码如下:
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using System;

775

被折叠的 条评论
为什么被折叠?



