为什么题目要加个“成功地”,因为
ITopologicalOperator的方法是bug非常多的,在90%的情况下能够按照你预想的工作,但是在10%的情况下,既不报错也不工作。这个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);
pFeatureNext.Delete();

pFeatureNext = pFeatureCursor.NextFeature();
}
topo_oper.IsKnownSimple_2
=
false
;
topo_oper.Simplify();
pFeatureFirst.Shape
=
pGeometryFirst;
pFeatureFirst.Store();
m_EditWorkspace.StopEditOperation();
来自:
http://www.cnblogs.com/renji/archive/2007/11/30/978029.html
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);
pFeatureNext.Delete();
pFeatureNext = pFeatureCursor.NextFeature();
}
topo_oper.IsKnownSimple_2
=
false
;
topo_oper.Simplify();
pFeatureFirst.Shape
=
pGeometryFirst;
pFeatureFirst.Store();
m_EditWorkspace.StopEditOperation();
本文详细介绍了如何使用ITopologicalOperator的Union方法成功合并多边形,通过一系列的简化和空间参照捕捉步骤,有效避免了常见的错误和问题。

275

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



