如何调用ITopologicalOperator.Union方法成功地merge polygon

为什么题目要加个“成功地”,因为 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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值