去除shp面要素的内环

最近做项目,遇到一个问题:去除面要素的图斑,即在shp面要素中,去除面积小于XX的内环,保留面积大于XX的内环。上网搜索没有现成的代码,于是自己写了一个,现在分享给大家,希望对大家有帮助。

关键代码:

private IGeometryCollection ConsoleRing(IFeatureLayer featureLayer)
        {
            IFeatureClass featureClass = featureLayer.FeatureClass;
            IFeatureCursor featureCursor = featureClass.Update(null, false);// featureLayer.Search(null, false);
            IFeature feature = featureCursor.NextFeature();

            
            while (feature != null)
            {
                double dArea = 0.0;
                IPolygon4 polygon = feature.ShapeCopy as IPolygon4;
                IGeometryCollection pGeometryCollection = new PolygonClass();
                IGeometryBag bag = polygon.ExteriorRingBag;     //获取多边形的所有外环

                IGeometryCollection newPolygonGeo = new PolygonClass();  

                IEnumGeometry geo = bag as IEnumGeometry;
                geo.Reset();
                IRing exRing = geo.Next() as IRing;
                while (exRing != null)
                {
                    IGeometryBag bags = polygon.get_InteriorRingBag(exRing); //获取当前外环所包含的内环
                   
                    //第一步 把外环加到newPolygonGeo
                    addExt2Poly(newPolygonGeo, exRing);

                    IEnumGeometry geos = bags as IEnumGeometry;
                    geos.Reset();
                    IRing inRing = geos.Next() as IRing;

                    while (inRing != null)
                    {
                        IArea pArea = inRing as IGeometry as IArea;
                        dArea = pArea.Area;

                        if (Math.Abs(dArea) >= int.Parse(txtArea.Text))
                        {
                            //第二步 把面积大于的加到newPolygonGeo
                            newPolygonGeo.AddGeometry(inRing as IGeometry);
                           
                        }

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(inRing);  //释放资源
                        inRing = geos.Next() as IRing;
                    }
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(geos);

                    exRing = geo.Next() as IRing;
                }
                feature.Shape = newPolygonGeo as IGeometry;
                featureCursor.UpdateFeature(feature);
                
                System.Runtime.InteropServices.Marshal.ReleaseComObject(geo);

                feature = featureCursor.NextFeature();

                if (feature == null)
                {
                    featureCursor.Flush();

                    System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
                    featureCursor = null;

                }
                return newPolygonGeo;
            }
            return null;
        }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值