摘要
将返回地图文档 (.mxd) 内存在的 Layer 对象的 Python 列表、地图文档内的数据框,或者图层 (lyr) 文件内的图层。
讨论
ListLayers 始终返回 Python 列表对象,即使仅返回一个图层。为返回 Layer 对象,必须在列表中使用索引值(例如,lyr = arcpy.mapping.ListLayers(mxd)[0])。列表上的 For 循环提供简单的机制迭代列表中的每个项目(例如,for lyr in arcpy.mapping.ListLayers(mxd):)。
处理图层文件时,不应使用 data_frame 参数,因为图层文件不支持数据框;如果其为数据框,则将忽略该数据框。Layer() 函数用于引用磁盘上存储的图层 (.lyr) 文件。
图层组的处理方式类似图层。将按在内容列表中的显示顺序或在图层文件中的显示顺序从上至下生成索引值。以上规则也适用于嵌套的图层组。具有一个图层组(其中包含三个图层)的地图文档将返回四个图层对象的 Python 列表,其中图层组为第一个对象。确定图层是否在图层组内的一种方法是查询 longName 属性。图层的 longName 将包含图层组名称作为名称的一部分。
在 name 属性上使用通配符并且不区分大小写。通配符字符串 "so*" 将返回名为 Soils 的图层。可在脚本语法中跳过通配符,实现方式包括传递空字符串 ("")、星号 (*),或输入 wildcard=None;如果通配符是语法中的最后一个可选参数,也可不输入任何内容。
地图文档或图层文件中可能存在多个具有相同名称的图层。这种情况下,可能需要使用其他属性来隔离特定图层。例如,图层的 description 或 dataSource 属性可用来进行此操作。理想状态为地图文档或至少图层中的所有图层名称均唯一。
语法
ListLayers (map_document_or_layer, {wildcard}, {data_frame})
参数 | 说明 | 数据类型 |
map_document_or_layer | 引用 MapDocument 或图层对象的变量。 | Object |
wildcard | 星号 (*) 和字符的组合可用于帮助限制生成的结果。 (默认值为 None) | String |
data_frame | 引用 DataFrame 对象的变量。 (默认值为 None) | DataFrame |
返回值
数据类型 | 说明 |
Layer | 图层对象的 Python 列表。 |
代码示例
ListLayers 示例 1:
此脚本将输出名为 Traffic Analysis 的数据框中第一个图层的名称。使用空白字符串跳过通配符参数。
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Traffic Analysis")[0]
print arcpy.mapping.ListLayers(mxd, "", df)[0].name
del mxd
ListLayers 示例 2:
以下脚本将在名为 County Maps 的数据框中查找名为 Lakes 的图层,然后打开图层(可见)并将透明度设置为 50%。问题在于同一数据框中恰好存在两个具有相同名称的图层,因此可以使用 description 属性来进一步隔离感兴趣的图层。理想情况下,所有图层都具有唯一名称,但情况并非总是如此,因此必须使用其他属性来隔离感兴趣的图层。本示例中使用了 description。
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]
for lyr in arcpy.mapping.ListLayers(mxd, "Lakes", df):
if lyr.description == "USGS Lakes":
lyr.visible = True
lyr.transparency = 50
mxd.save()
del mxd