如何调用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

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yanleigis/archive/2008/04/18/2305010.aspx

posted @ 2009-12-29 22:25  尤文之鹤  阅读(1171)  评论(0编辑  收藏  举报