• 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();  
    }  
  • 相关阅读:
    Java中DAO的实现
    使用Fabric自动化你的任务
    JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)
    财政业务流程
    ubuntu 14.04 install google chrom stable
    gcc编译命令
    textread 用法
    ubuntu software
    Coursera.org打不开怎么办
    Presentation__short sentence review mining
  • 原文地址:https://www.cnblogs.com/arxive/p/6263116.html
Copyright © 2020-2023  润新知