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

转自原文 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();  
}  
复制代码

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接http://www.cnblogs.com/arxive/p/6263116.html :,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值