ArcMap批量关闭或打开图层
在 ArcMap 中使用批处理工具而生成多个图层时,又或者管理很复杂的地图文件时,都有可能需要批量打开或者关闭图层,在内容列表里头一个一个地用鼠标点可太费事了。所以在这提供一个通过 python 脚本的实现方法,可以批量开启或者关闭带有特定词眼的图层。
在 ArcMap 中使用 python 代码只需要在菜单栏中找到“地理处理”菜单,在其中点选“Python”选项即可调出代码窗口。
通过 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 开头的图层。第二个参数中的 "*" 表示即通配符,匹配任意长度的任意字符,第三个参数表示在具体哪一个数据框中检索图层。
删除 前 |
删除后 |
(完)
网上 python 和 arcpy 的资料可谓相当丰富了,本文更多作为代码备忘和思路分享,涉及的功能会在 Gitee/GitHub 中相应更新以供借鉴, 可以访问以下网址查看 ,也欢迎大家共同提交 修改:
https://gitee.com/apiglio/ApiglioArcpyTool
https://github.com/Apiglio/ApiglioArcpyTool
本文编号:GIS-2023-02