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();  
}  

 

posted @ 2017-01-08 23:07  wenglabs  阅读(1235)  评论(0编辑  收藏  举报