zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/gisoracle/p/2358802.html
Copyright © 2011-2022 走看看