ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码

#region 校验合法性
            ArrayList pFeatureArray = null;
            pFeatureArray = Application.Editor.FeatureSelection();
            int count=pFeatureArray.Count;
            if (count<1)
            {
                MessageBox.Show("最少必须选择1个要素才能进行要素分解!", "提示");
                return;
            }
#endregion   
try
            {
                //启动编辑操作
                Application.Editor.StartOperation();
                #region 对选中的要素进行多部件测试及分解
                int multipartcount = 0;
                for (int i = 0; i < count; i++)
                {
                    IFeature pFeature = pFeatureArray as IFeature;
                    if (pFeature.ShapeCopy.IsEmpty) continue;
                    IGeometry pGeometry = pFeature.ShapeCopy;
                    IGeometryCollection pGeocoll = pGeometry as IGeometryCollection;
                    int geomcount = pGeocoll.GeometryCount;
                    if (geomcount > 1)
                    {
                        multipartcount++;
                        for (int k = 1; k < geomcount; k++)
                        {
                            IFeature newFeaturte = (pFeature.Class as IFeatureClass).CreateFeature();
                            IFeatureEdit pFeatureEdit = pFeature as IFeatureEdit;
                            pFeatureEdit.SplitAttributes(newFeaturte);
                            IGeometry newGeom = pGeocoll.get_Geometry(k);
                            if (pFeature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPolygon)
                                newGeom=GeometryHelper.ConstructPolygon(newGeom);
                            else
                                newGeom = GeometryHelper.ConstructPolyline(newGeom);
                            newGeom.SpatialReference = pFeature.ShapeCopy.SpatialReference;
                            newFeaturte.Shape = newGeom;
                            newFeaturte.Store();
                        }

                        IGeometry newGeom2 = pGeocoll.get_Geometry(0);
                        if (pFeature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPolygon)
                            newGeom2 = GeometryHelper.ConstructPolygon(newGeom2);
                        else
                            newGeom2 = GeometryHelper.ConstructPolyline(newGeom2);
                        newGeom2.SpatialReference = pFeature.ShapeCopy.SpatialReference;
                        pFeature.Shape = newGeom2;
                        pFeature.Store();
                        Application.Editor.StopOperation("分解多部件要素");
                    }
                    else
                    {
                        continue;
                    }
                }
                if (multipartcount == 0)
                {
                    MessageBox.Show("未选择多部件要素!", "分解要素");
                    return;
                }
                
                
                #endregion
            }
            catch (Exception ex)
            {
                Application.Editor.AbortOperation();
                MessageHelper.WriteLog("分解多部件要素", ex);
            }
            finally
            {
                Application.ActiveView.Refresh();
                FlashFeatures();
            }

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值