• 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();
                }
    来自:http://blog.sina.com.cn/s/blog_5d25ac4e0100trkf.html
  • 相关阅读:
    第08组 Alpha冲刺 (6/6)
    第08组 Alpha冲刺 (5/6)
    第08组 Alpha冲刺 (4/6)
    第08组 Alpha冲刺 (3/6)
    第08组 Alpha冲刺 (2/6)
    第08组 Alpha冲刺 (1/6)
    第一次编程作业
    第01组 Alpha冲刺(6/6)(组长)
    第01组 Alpha冲刺总结(组长)
    第01组 Alpha冲刺 (5/6)(组长)
  • 原文地址:https://www.cnblogs.com/gisoracle/p/2358802.html
Copyright © 2020-2023  润新知