实现得到pagelayoutControl关联的mxd文档,并删除其中的最顶端图层

该博客介绍了一个用于删除地图文档中顶层图层的自定义命令实现。通过 ArcGIS 的 COM 组件接口,该命令能够从指定的地图文档中移除最顶端的图层,并确保地图文档保存并重新加载以反映更改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.PageLayoutControl;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Utility.BaseClasses;
using ESRI.ArcGIS.ControlCommands;
using ESRI.ArcGIS.Utility.CATIDs;

namespace Commands
{
/// <summary>
/// Summary description for cmdDelLayer.
/// </summary>
[Guid("fd14ad9f-665d-433e-97f0-6021c71478c2")]
public class cmdDelLayer:BaseCommand
{
  #region "Component Category Registration"
  [ComRegisterFunction()]
  static void Reg(string regKey)
  {
    ControlsCommands.Register(regKey);
  }

  [ComUnregisterFunction()]
  static void Unreg(string regKey)
  {
    ControlsCommands.Unregister(regKey);
  }
  #endregion

  IHookHelper engHook = new HookHelperClass();
  //IMapDocument mxdDoc = null;
  ESRI.ArcGIS.PageLayoutControl.IPageLayoutControl2 mapCtrl = null;
  public cmdDelLayer()
  {
   base.m_caption = "delLayer";
   base.m_category = "mapViewer";
   base.m_enabled = true;
   base.m_message = "删除地图文档中最顶端图层";
   base.m_name = "delLayer";
   base.m_toolTip = "删除最顶端图层";
  }

  public override void OnClick()
  {
   // TOD  Add cmdDelLayer.OnClick implementation
   try
   {
    if(mapCtrl == null)
    {
     MessageBox.Show("没有得到MapControl");
     return;
    }
    string docPath = mapCtrl.DocumentFilename;
    IMapDocument mxdDoc = new MapDocumentClass();
      
    mxdDoc.Open(docPath,"");
    
    if(mxdDoc.get_IsReadOnly(docPath))
    {
     MessageBox.Show("地图文档只读,不可修改!" );
     return;
    }
    else
    {

  if(mxdDoc.MapCount == 0 )return;
     IMap pMap = mxdDoc.get_Map(0);
     if(pMap.LayerCount != 0)pMap.DeleteLayer(pMap.get_Layer(0));
     mxdDoc.Save(true,true);
     if(mapCtrl.CheckMxFile(docPath))
      mapCtrl.LoadMxFile(docPath,null);    //一定要重新加载地图文档,才能刷新显示地图文档已改变
     mapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);
     //mxdDoc.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);
    }
    //object o1 = Type.Missing,o2 = Type.Missing;
    
   }
   catch(COMException e)
   {
    MessageBox.Show("com删除图层出错:" + e.Message);
   }
   catch(Exception e)
   {
    MessageBox.Show("删除图层出错:" + e.Message);
   }
  
   //base.OnClick ();
  }

  public override void OnCreate(object hook)
  {
   // TOD  Add cmdDelLayer.OnCreate implementation
   //if(hook is IMapControl3)
   mapCtrl = (IPageLayoutControl2)hook;
  }
}
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值