• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gisoracle

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

posted on 2012-02-20 00:16  gisai  阅读(1376)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3