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

转自原文 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();  
}  
ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码

 

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




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

上一篇:netty系列之:性能为王!创建多路复用http2服务器


下一篇:102万行代码,1270 个问题,Flink 新版发布了什么?(附最佳实践电子书)