按内环(孔洞)面积删除内环

 1 /// <summary>
 2 /// 按内环(孔洞)面积删除内环
 3 /// </summary>
 4 /// <param name="pPolygon"></param>
 5 /// <param name="Area">删除小于此值的内环,当值小于等于0时全部删除</param>
 6 /// <returns></returns>
 7 public IPolygon Delete_InteriorRingBag(IPolygon pPolygon,double Area)
 8 {
 9     IPolygon4 pPolygon4 = pPolygon as IPolygon4;
10     //外环
11     IGeometry pGeoExter = (pPolygon4.ExteriorRingBag as IGeometryCollection).get_Geometry(0);
12 
13 
14     
15     //内环
16     IGeometryCollection pGeos = pPolygon4.get_InteriorRingBag(pGeoExter as IRing) as IGeometryCollection;
17 
18 
19     for (int i = 0; i < pGeos.GeometryCount; i++)//遍历内环,对满足要求的内环Union至输入polygon
20     {
21         IGeometry pGeoInter = pGeos.get_Geometry(i);
22 
23         if (Math.Abs((pGeoInter as IArea).Area) > (Area<=0?double.MaxValue:Area))
24         {
25             ITopologicalOperator pTopo = pPolygon as ITopologicalOperator;
26             IPointCollection pinterPoints = pGeoInter as IPointCollection;
27 
28             IPointCollection pPointsNew = new PolygonClass();
29             pPointsNew.AddPointCollection(pinterPoints);                    
30             IPolygon pU = pPointsNew as IPolygon;
31 
32             ITopologicalOperator pTopoSim = pU as ITopologicalOperator;
33             pTopoSim.Simplify();
34 
35             pPolygon = pTopo.Union(pU) as IPolygon;
36         }
37     }
38     return pPolygon;
39 }
原文地址:https://www.cnblogs.com/clgis/p/14771677.html