ListLayers (arcpy.mapping)

Резюме

Возвращает список объектов Python Layer, находящихся в документе карты (.mxd), фрейме данных документа карты или слоев в файле слоя (.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 или объект Layer.

Object
wildcard

Для наложения ограничения на результаты можно использовать сочетание звездочек (*) и символов.

(Значение по умолчанию — None)

String
data_frame

Переменная, которая ссылается на объект DataFrame.

(Значение по умолчанию — None)

DataFrame
Возвращено значение
Тип данныхОбъяснение
Layer

Список Python объектов Layer.

Пример кода

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:

Следующий скрипт находит слой, называющийся Озера (Lakes), во фрейме данных Карты области (County Maps), делает слой видимым и устанавливает прозрачность на 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
9/11/2013