ITopologicalOperator接口使用方法
在空间分析中通常用到ITopologicalOperator接口,有众多的空间拓扑方法,在GIS系统中的缓冲区分析、裁剪分析、几何图形差分操作、几何图形合并操作等等。下面介绍ITopologicalOperator接口的主要方法:
http://www.cnblogs.com/alex-bn-lee/archive/2012/06/17/2552557.html#ITopologicalOperator5
但是这个接口出现问题的几率是非常大的,有时候既没有报错,但是有没有运行出结果,比如Union、merge方法,其实是在我们做拓扑之前的检查不够。导致出现这个问题。下面给出示例代码:
ICursor pCursor;
featureSelect.SelectionSet.Search(null, false, out pCursor);
IFeatureCursor pFeatureCursor = pCursor as IFeatureCursor;
IFeature pFeatureFirst = pFeatureCursor.NextFeature();
// 开始一个编辑操作,以能够撤销
m_EditWorkspace.StartEditOperation();
IGeometry pGeometryFirst = pFeatureFirst.Shape;
ITopologicalOperator2 topo_oper = (ITopologicalOperator2)pGeometryFirst;
//ITopologicalOperator的操作是bug很多的,先强制的检查下面三个步骤,再进行操作 否则会出现标题所说的问题
topo_oper.IsKnownSimple_2 = false; //处理之前不知道是否是简单多边形,不管是不是,第一步强制转换为非简单多边形
topo_oper.Simplify(); //对多边形强制简单化
pGeometryFirst.SnapToSpatialReference(); //图形与坐标参考对应
//这是准备合并的图斑使用的
ITopologicalOperator2 topo_oper2;
IGeometry pGeometryNext;
IFeature pFeatureNext = pFeatureCursor.NextFeature();
while (pFeatureNext != null)
{
pGeometryNext = pFeatureNext.ShapeCopy;
//与上面的同理
topo_oper2 = pGeometryNext as ITopologicalOperator2;
topo_oper2.IsKnownSimple_2 = false;
topo_oper2.Simplify();
pGeometryNext.SnapToSpatialReference();
//这才是合并图斑的关键
pGeometryFirst = topo_oper.Union(pGeometryNext);
topo_oper = pGeometryFirst as ITopologicalOperator2;
pFeatureNext.Delete();
pFeatureNext = pFeatureCursor.NextFeature();
}
topo_oper.IsKnownSimple_2 = false;
topo_oper.Simplify();
pFeatureFirst.Shape = pGeometryFirst;
pFeatureFirst.Store();
m_EditWorkspace.StopEditOperation();
转载自:https://blog.csdn.net/Mello_/article/details/40824301