ArcMap批量关闭或打开图层

Apiglio

共 2556字,需浏览 6分钟

 · 2023-08-27

在 ArcMap 中使用批处理工具而生成多个图层时,又或者管理很复杂的地图文件时,都有可能需要批量打开或者关闭图层,在内容列表里头一个一个地用鼠标点可太费事了。所以在这提供一个通过 python 脚本的实现方法,可以批量开启或者关闭带有特定词眼的图层。

在 ArcMap 中使用 python 代码只需要在菜单栏中找到“地理处理”菜单,在其中点选“Python”选项即可调出代码窗口。

f60864329f772e98137fa928c6db5e8e.webp

通过 arcpy .mapping 模块(制图模块)可以修改 ArcMap 中每一个图层的设置,以下代码可以关闭当前地图文件的所有图层:

      
        
          # 获取ArcMap打开的当前地图文件
        
      
      
        mxd = arcpy.mapping.MapDocument("Current")
      
      
        
          # 获取图层列表,没有额外参数时表示所有图层
        
      
      
        lyrs = arcpy.mapping.ListLayers(mxd)
      
      
        
          # 遍历所有查找到的图层
        
      
      
        for lyr in lyrs:
      
      
            lyr.visible = False
      
      
        
          # 刷新内容列表和当前视图
        
      
      
        arcpy.RefreshTOC()
      
      
        arcpy.RefreshActiveView()
      
    

以上代码中 ,变量 mxd 代表当前地图文件,变量 lyrs 代表查找到的图层列表,循环中的 lyr 变量代表列表中具体的每一个图层。整段复制后粘贴进 Python 窗口后连续按下两次回车即可执行。按下两次回车是因为第一个回车被认为是换行,而在空行上继续回车才会触发执行。将第 7 行的 False 改为 True 则可以改为显示全部图层,其中的 visible 表示图层的可见性属性。

如果需要打开或关闭名称中包含特定词语的图层,只需要修改以上代码中的第 4 行。例如,打开或关闭所有名为 DEM 的图层就修改成如下代码:

      
        lyrs = arcpy.mapping.ListLayers(mxd, "DEM")
      
    

除了修改图层显隐性,也可以用相同的思路删除图层。 不同于修改图层的显隐性,删除图层需要使用  arcpy .mapping  模块中的  RemoveLayer  方法,其参数需要数据框对象,这是因为每一个图层都属于一个数据框,而一个地图文件不一定只有一个数据框。因此需要基于具体的数据框进行图层检索:

      
        
          # 获取 ArcMap 打开的当前地图文件
        
      
      
        mxd = arcpy.mapping.MapDocument("Current")
      
      
        
          # 获取当前地图的数据框,函数返回的是列表,
        
      
      
        
          # 由于默认情况下只有一个数据框,因此此处直接获取其中的第一个
        
      
      
        dfm = arcpy.mapping.ListDataFrames(mxd)[0]
      
      
        
          # 在获取的数据框中查找图层名包含“Grid”的图层
        
      
      
        lyrs = arcpy.mapping.ListLayers(mxd, "Grid*", dfm)
      
      
        
          # 将筛查到的图层逐一移除数据框
        
      
      
        for lyr in lyrs:
      
      
            arcpy.mapping.RemoveLayer(dfm, lyr)
      
    

以上代码直接复制执行,可以移除当前地图工程中第一个数据框中所有名字中以 Grid 开头的图层。第二个参数中的 "*" 表示即通配符,匹配任意长度的任意字符,第三个参数表示在具体哪一个数据框中检索图层。

e362beb48a8595ca33191e606058d8e4.webp d667488d03cf31e0a081363407a03658.webp
删除
删除后


(完)



网上 python 和 arcpy 的资料可谓相当丰了,本文更多作为代码备忘和思路分享,涉及的功能会在 Gitee/GitHub 中相应更新以供借鉴, 可以访问以下网址查看 ,也欢迎大家共同提交 修改:

https://gitee.com/apiglio/ApiglioArcpyTool

https://github.com/Apiglio/ApiglioArcpyTool



本文编号:GIS-2023-02


浏览 208
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报