Краткая информация
Предоставляет доступ к базовым свойствам слоя и методам.
Обсуждение
На слои можно ссылаться внутри проекта, используя метод listLayers класса Map, либо из хранящегося на диске файла слоя (.lyr или .lyrx), используя метод listLayers класса LayerFile.
Объект Layer имеет единый универсальный дизайн для работы со всеми слоями. Существует большое количество различных типов слоев, и не все они поддерживают одинаковый набор свойств. Например, векторный слой поддерживает определяющий запрос, тогда как растровый слой его не поддерживает, при этом каталог растров - поддерживает. Вместо того, чтобы работать с разными отдельными объектами слоя для всех возможных типов слоев и комбинаций свойств, есть некоторые полезные свойства, которые позволяют получить информацию о слое и поддерживаемых им свойствах. Существует множество свойств is, которые позволяют определить, подходит ли слой к общей категории, например, is3DLayer, isFeatureLayer, isGroupLayer, isRasterLayer, isWebLayer и т.д.
Есть несколько специализированных слоев и наборов данных, которые не попадают ни в одну из этих общих категорий: подклассы аннотаций, объекты-размеры, наборы данных Terrain, наборы данных топологии и так далее. В этих случаях, необходимо проверить другие свойства и изолировать интересующий вас слой, прежде чем начинать работу с ним. Метод supports используется, чтобы помочь определить, какой конкретный слой поддерживает конкретное свойство слоя. Это дает возможность проверить, поддерживает ли слой свойство, прежде чем пытаться получить или установить его значение, и тем самым уменьшает необходимость в дополнительном поиске ошибок. Например, см. следующий код:
if lyr.supports("BRIGHTNESS"):
lyr.brightness = 10
Метод listLayers Map Class возвращает значения индекса, которые генерируются сверху вниз в том виде, в каком они появляются в таблице содержания, или как они появляются в файле слоя. То же самое происходит, если составной слой находится внутри другого составного слоя. Например, карта с одним составным слоем, содержащим три подслоя, возвратит список из четырех имен слоев, при этом групповой слой будет первым, а три подслоя - вторым, третьим и четвертым. Есть два способа определения составного слоя. Во-первых, вы можете проверить, поддерживает ли слой свойство isGroupLayer. Во-вторых, вы можете оценить свойство longName. Значение слоя longName будет включать имя группы в дополнение к имени слоя. Например, слой с именем Layer1 в составном слое Group1, будет иметь значение longName, равное Group1\Layer1. Если значение name равно значению longName, слой не находится внутри составного слоя. При работе с подслоями составных слоев свойство longName будет содержать и имя подслоя, и имя слоя верхнего уровня.
ArcGIS Pro может читать устаревшие типы файлов .lyr, но сохранять может только типы файлов .lyrx. При ссылке на тип файла .lyr и вызове метода save он будет преобразован в тип файла .lyrx, но с тем же именем файла.
Векторный слой может поддерживать от нуля до нескольких определяющих запросов, но только один запрос может быть активным. Также возможно, что присутствует один или несколько определяющих запросов, но ни один из них не активен. Существует два способа управлять определяющими запросами. Во-первых, вы можете использовать свойство definitionQuery. Если вы устанавливаете уникальную строку SQL на слое, не имеющем определяющего запроса, или слое, который имеет несколько определяющих запросов, новый определяющий запрос добавляется и становится активным запросом. Если вы устанавливаете строку SQL на слое, который уже имеет такой же запрос, он устанавливает ее как активный определяющий запрос, если он еще не активен. Второй способ управлять определяющими запросами - использовать комбинацию функций listDefinitionQueries и updateDefinitionQueries. Функция listDefinitionQueries возвращает список словарей Python, которые представляют свойства, связанные с каждым запросом. Ключи словаря - name, sql и isActive. Определяющие запросы могут быть добавлены, изменены или удалены из списка Python с помощью базовых функций Python. Значение словаря isActive может быть установлено на True, чтобы установить активный запрос. Снова только один запрос может быть активным. При попытке сделать активным более одного запроса будет возвращена ошибка. После внесения изменений функция updateDefinitionQueries используется для установки новых изменений.
Изменение источника данных слоя – это общее требование. Для этого у объекта Layer есть метод и свойство. Более подробное обсуждение, сведения о параметрах, сценарии и примеры кода см. в разделе справки Обновление и исправление источников данных.
Свойства
Свойство | Описание | Тип данных |
brightness (чтение и запись) | Значение яркости слоя. По умолчанию нормальная яркость - 0 процентов. Введите любое значение от +100 процентов до -100 процентов. Введите знак плюс или минус слева от значения, чтобы указать, находится ли оно выше или ниже 0. | Integer |
connectionProperties (только чтение) | Возвращает информацию о подключении к источнику данных слоя как словарь Python. | Dictionary |
contrast (чтение и запись) | Значение контраста слоя. По умолчанию нейтральный контраст - 0 процентов. Введите любое значение от +100 процентов до -100 процентов. Введите знак плюс или минус слева от значения, чтобы указать, находится ли оно выше или ниже 0. | Integer |
dataSource (только чтение) | Возвращает полный путь к источнику данных слоя. Он включает полный путь к рабочей области и имя набора данных. Для слоев многопользовательских баз геоданных возвращается строка, содержащая информацию о подключении слоя. Подсказка:Слои многопользовательских баз геоданных в проекте ArcGIS Pro не хранят путь к файлу подключения к базе данных (.sde), который использовался для создания слоя. | String |
definitionQuery (чтение и запись) | Определяющий запрос слоя. Если вы устанавливаете уникальную строку SQL на слое, не имеющем определяющего запроса, или слое, который имеет несколько определяющих запросов, новый определяющий запрос добавляется и становится активным запросом. Если вы устанавливаете строку SQL на слое, который уже имеет такой же запрос, он просто устанавливает ее как активный определяющий запрос, если он еще не активен. | String |
is3DLayer (только чтение) | Возвращает True, если слой является 3D слоем. | Boolean |
isBasemapLayer (только чтение) | Возвращает True, если слой является слоем базовой карты. | Boolean |
isBroken (только чтение) | Возвращает True, если источник данных слоя поврежден. | Boolean |
isFeatureLayer (только чтение) | Возвращает True, если слой является векторным. | Boolean |
isGroupLayer (только чтение) | Возвращает True, если слой является составным. | Boolean |
isNetworkAnalystLayer (только чтение) | Возвращает True, если слой является слоем ArcGIS Network Analyst extension. | Boolean |
isNetworkDatasetLayer (только чтение) | Возвращает True, если слой является слоем набора сетевых данных ArcGIS Network Analyst extension. | Boolean |
isRasterLayer (только чтение) | Возвращает True, если слой является растровым. | Boolean |
isSceneLayer (только чтение) | Возвращает True, если слой является слоем сцены. | Boolean |
isTimeEnabled (только чтение) | Указывает, включено ли время в слое. Если isTimeEnabled возвращает True, свойство time слоя можно использовать для возврата объекта LayerTime. Используйте метод enableTime, чтобы включить время на слое, содержащем информацию о времени. | Boolean |
isWebLayer (только чтение) | Возвращает True, если слой является сервисом ГИС. ГИС сервисы – это автоматизированные географические информационные сервисы, которые опубликованы и доступны в Интернете с помощью стандартных технологий и протоколов. Примером являются базовые карты Esri. | Boolean |
longName (только чтение) | Полное имя слоя, включая структуру составного слоя. | String |
maxThreshold (чтение и запись) | Порог максимального масштаба слоя для 2D-карт и его максимальное расстояние над поверхностью земли для 3D-карт. Слой не будет отображаться, если степень увеличения превзошла максимальный масштаб. Для очистки максимального масштаба установите значение на 0. | Double |
metadata (чтение и запись) | Получите или задайте информацию о Метаданных класса слоя. Примечание:Установка метаданных зависит от значения свойства isReadOnly. | Metadata |
minThreshold (чтение и запись) | Порог минимального масштаба слоя для 2D-карт и его максимальное расстояние над поверхностью земли для 3D-карт. Слой не будет отображаться, если степень уменьшения превзошла минимальный масштаб. Для очистки минимального масштаба установите значение на 0. | Double |
name (чтение и запись) | Имя слоя в том виде, в каком оно будет выглядеть в таблице содержания. Можно использовать пробелы. Является важным, чтобы все слои карты имели уникальные имена, благодаря чему на них было бы легко ссылаться по имени. | String |
showLabels (чтение и запись) | Управляет отображением надписей слоя. Если задано True, надписи отображаются; если задано False, надписи не отображаются. | Boolean |
symbology (чтение и запись) | Обеспечивает доступ к символам слоя. | Object |
time (только чтение) | Возвращает объект LayerTime, если на слое включено время. | LayerTime |
transparency (чтение и запись) | Значение прозрачности слоя. Это свойство позволяет вам видеть сквозь слой. Используйте значения между 0 и 100. Значение 0 соответствует полной непрозрачности. Значение прозрачности более 90 процентов обычно приводит к тому, что слой не отображается совсем. | Integer |
URI (только чтение) | Universal Resource Indicator слоя. Это уникальный идентификатор слоя в проекте, который иногда требуется при использовании доступа Python CIM. После добавления слоя и установления URI значение со временем не меняется. Например, если вы измените имя слоя, URI не изменится. | String |
visible (чтение и запись) | Управляет отображением слоя. Если задано True, слой отображается; если задано False, слой не отображается. | Boolean |
Обзор метода
Метод | Описание |
enableTime ({startTimeField}, {endTimeField}, {autoCalculateTimeRange}, {timeDimension}) | Включает время в слое, если там имеется информация о времени. |
extrusion ({extrusion_type}, {expression}) | Вытягивает 2D объекты слоя для отображения 3D символов. |
getDefinition (cim_version) | Получает определение слоя CIM. |
getSelectionSet () | Возвращает выборку слоя в виде набора идентификаторов объектов Python. |
listDefinitionQueries ({wildcard}) | Возвращает список определяющих запросов Python, связанных со слоем. |
listLabelClasses ({wildcard}) |
Возвращает список Python объектов LabelClass в слое. |
listLayers ({wildcard}) | Возвращает список Python для объектов Слой из группового слоя. |
listTables ({wildcard}) | Возвращает список Python объектов Table, которые существуют в составном слое. |
saveACopy (file_name) | Сохраняет слой в файл слоя (.lyrx). |
setDefinition (definition_object) | Настраивает определение слоя CIM. |
setSelectionSet ({oidList}, {method}) | Задает выборку слоя, используя список Object ID Python. |
supports (layer_property) | Используется для определения, поддерживает ли конкретный тип слоя свойство для объекта слоя. Не все слои поддерживают одинаковый набор свойств; свойство supports может быть использовано для тестирования, поддерживает ли слой данное свойство перед попыткой его установить. |
updateConnectionProperties (current_connection_info, new_connection_info, {auto_update_joins_and_relates}, {validate}, {ignore_case}) | Метод updateConnectionProperties заменяет свойства подключения, используя словарь либо путь к рабочей области. |
updateDefinitionQueries (definitionQueries) | Обновления коллекции определяющих запросов слоя. |
updateLayerFromJSON (json_data) | Обновляет слой из строки JSON. |
Методы
enableTime ({startTimeField}, {endTimeField}, {autoCalculateTimeRange}, {timeDimension})
Параметр | Описание | Тип данных |
startTimeField | The name of the field containing the start time values. If each feature has a single time field, specify that field name in the startTimeField and leave endTimeField blank. If each feature has a start and end time field, specify both the startTimeField and endTimeField. (Значение по умолчанию — None) | String |
endTimeField | The name of the field containing the end time values. Not all layers use an end time field. If each feature has a single time field, specify that field name in the startTimeField and leave endTimeField blank. If each feature has a start and end time field, specify both the startTimeField and endTimeField. (Значение по умолчанию — None) | String |
autoCalculateTimeRange | If set to True, the start and end time attribute information is used to calculate the layer's time extent. (Значение по умолчанию — True) | Boolean |
timeDimension | The name of the dimension containing time values when using netCDF data. (Значение по умолчанию — None) | String |
Все параметры метода enableTime являются необязательными. Если startTimeField и endTimeField не указаны, метод оценит данные и попытается найти соответствующие значения по умолчанию.
После запуска метода enableTime свойство time слоя можно использовать для возврата объекта LayerTime. Если MapFrame в Компоновке содержит слои с включенным временем, класс MapTime можно использовать для доступа к настройкам времени карты.
extrusion ({extrusion_type}, {expression})
Параметр | Описание | Тип данных |
extrusion_type | Строка, задающая метод вытягивания. Значение по умолчанию равно NONE, что выключает вытягивание слоя.
(Значение по умолчанию — NONE) | String |
expression | Строка, которая определяет выражение вытягивания, которое предоставляет абсолютную высоту вытягивания для каждого объекта. (Значение по умолчанию — None) | String |
Вытягивание представляет собой процесс вертикального растяжения плоских 2D форм для создания 3D объекта. Это предоставляет метод создания трехмерных символов из двухмерных пространственных объектов. Полигональные и линейные объекты имеют все пять доступных опций extrusion_type; точечные объекты не используют опции MAX_HEIGHT или MIN_HEIGHT.
getDefinition (cim_version)
Параметр | Описание | Тип данных |
cim_version | A string that represents the major version of the CIM. | String |
Уровень доступа CIM для дополнительных свойств объекта был введен в версии ArcGIS Pro 2.4. Если вы хотите вернуть определение CIM объекта, необходимо указать cim_version. Esri использует спецификацию семантического версионирования. Это означает, что критические изменения API разрешены в основных версиях — например, 3.0 Это даст авторам скриптов Python возможность управления версией CIM, которая будет использоваться во время запуска скрипта, если существует вероятность внесения критических изменений в новой версии. Если вы создаете скрипты для ArcGIS Pro 2.x, укажите значение cim_version как 'V2'. Если вы создаете скрипты для ArcGIS Pro 3.x, укажите значение cim_version как 'V3'. Скрипты, созданные с использованием cim_version 'V2', будут продолжать работать в ArcGIS Pro 3.x.
Более подробно о работе с CIM и примеры см. Доступ к CIM в Python.
getSelectionSet ()
Это простейший способ получения текущей выборки слоя.
listDefinitionQueries ({wildcard})
Параметр | Описание | Тип данных |
wildcard | A wildcard is based on the query name and is not case sensitive. A combination of asterisks (*) and characters can be used to limit the resulting list. (Значение по умолчанию — None) | String |
Тип данных | Описание |
List | Список словарей Python, представляющих свойства, связанные с каждым запросом. Ключи словаря - name, sql и isActive. |
Определяющие запросы могут быть добавлены, изменены или удалены из списка Python с помощью стандартных методов. Значение словаря isActive может быть установлено на True, чтобы установить активный запрос. И снова только один запрос может быть активным. Если вы попытаетесь сделать активными более одного запроса, будет возвращена ошибка. После внесения изменений функция updateDefinitionQueries используется для установки новых изменений.
listLabelClasses ({wildcard})
Параметр | Описание | Тип данных |
wildcard | Групповой символ базируется на имени класса надписей и не является чувствительным к регистру. Для наложения ограничений на результирующий список можно использовать сочетание звездочек (*) и символов. (Значение по умолчанию — None) | String |
Тип данных | Описание |
List | Возвращает список Python объектов LabelClass в слое. |
Возвращает список Python объектов LabelClass в слое.
listLayers ({wildcard})
Параметр | Описание | Тип данных |
wildcard | Подстановочный знак основан на имени слоя и не чувствителен к регистру. Для наложения ограничений на результирующий список можно использовать сочетание звездочек (*) и символов. (Значение по умолчанию — None) | String |
Тип данных | Описание |
List | Возвращает список Python для объектов Слой из группового слоя. |
Возвращает список Python для объектов Слой из группового слоя.
listTables ({wildcard})
Параметр | Описание | Тип данных |
wildcard | A wildcard is based on the table name and is not case sensitive. A combination of asterisks (*) and characters can be used to limit the resulting list. (Значение по умолчанию — None) | String |
Тип данных | Описание |
List | Список Python объектов Table в слое. |
Возвращает список Python объектов Table, которые существуют в составном слое. ListTables всегда возвращает объект списка, даже если возвращается только одна таблица.
Возможно, что в составном слое могут быть таблицы с тем же именем. В этом случае, возможно, потребуется использовать другие свойства для изоляции определенного слоя. Для этого можно использовать такие свойства, как таблицы datasource, definitionQuery или URI. В идеале все таблицы должны иметь неповторяющиеся имена.
saveACopy (file_name)
Параметр | Описание | Тип данных |
file_name | Строка, которая включает местоположение и имя выходного файла слоя (.lyrx). | String |
Если групповой слой будет сохранен, все слои, перечисленные ниже в таблице содержания, будут также сохранены в файл слоя (.lyrx).
setDefinition (definition_object)
Параметр | Описание | Тип данных |
definition_object | Объект измененного определения CIM, изначально полученный с помощью getDefinition. | Object |
Более подробно о работе с CIM и примеры см. Доступ к CIM в Python.
setSelectionSet ({oidList}, {method})
Параметр | Описание | Тип данных |
oidList [oidList,...] | Список Object ID Python для работы с соответствующим способом выборки объектов. (Значение по умолчанию — None) | Integer |
method | Строка, задающая используемый метод выборки.
(Значение по умолчанию — NEW) | String |
Это простейший способ управления текущей выборкой слоя. Чтобы очистить выборку, воспользуйтесь методом выборки NEW с пустым списком, или без параметров.
Примечание: Списки Python можно применять для oidList, но наборы Python возвращаются методом getSelectionSet объекта Layer.
supports (layer_property)
Параметр | Описание | Тип данных |
layer_property | The name of a particular layer property that will be tested.
(Значение по умолчанию — name) | String |
Тип данных | Описание |
Boolean |
Существует много типов слоев, и не все они поддерживают одинаковый набор свойств. Например, векторный слой поддерживает определяющий запрос, тогда как растровый слой его не поддерживает, при этом каталог растров - поддерживает. Вместо того чтобы создавать отдельные объекты слоя для всех возможных типов слоев и комбинаций свойств, можно использовать метод supports, который позволяет определить, какие свойства поддерживает тот или иной тип слоя. Метод support дает возможность проверить, поддерживается ли свойство, чтобы не пытаться получить или задать его значение в типе слоя, который его не поддерживает. Свойство supports возвращает True, если слой поддерживает данное свойство.
Булевы свойства не требуют тестирования с использованием supports потому, что если свойство слоя не поддерживается для данного типа слоя, то возвращается значение False.
updateConnectionProperties (current_connection_info, new_connection_info, {auto_update_joins_and_relates}, {validate}, {ignore_case})
Параметр | Описание | Тип данных |
current_connection_info | A string that represents the workspace path or a Python dictionary that contains connection properties to the source you want to update. If an empty string or None is used in current_connection_info, all connection properties will be replaced with the new_workspace_info, depending on the value of the validate parameter. | String |
new_connection_info | A string that represents the workspace path or a Python dictionary that contains connection properties with the new source information. | String |
auto_update_joins_and_relates | If set to True, the updateConnectionProperties method will also update the connections for associated joins or relates. (Значение по умолчанию — True) | Boolean |
validate | If set to True, the connection properties will only be updated if the new_connection_info value is a valid connection. If it is not valid, the connection will not be replaced. If set to False, the method will set all connections to match the new_connection_info value, regardless of a valid match. In this case, if a match does not exist, the data sources would be broken. (Значение по умолчанию — True) | Boolean |
ignore_case | Determines whether searches will be case sensitive. By default, queries are case sensitive. To perform queries that are not case sensitive, set ignore_case to True. (Значение по умолчанию — False) | Boolean |
Более подробное описание, сведения о параметрах, сценарии и примеры кода см. Обновление и исправление источников данных.
updateDefinitionQueries (definitionQueries)
Параметр | Описание | Тип данных |
definitionQueries [definitionQueries,...] | Updates a list of dictionaries that represent the properties of each definition query. | List |
Эта функция обычно используется для применения изменений, внесенных в результаты, возвращаемые функцией listDefinitionQueries.
updateLayerFromJSON (json_data)
Параметр | Описание | Тип данных |
json_data | The layer definition in JavaScript Object Notation (JSON) format. See the ExportWebMap JSON specification for more information. ArcGIS API for JavaScript and ArcGIS Web AppBuilder allow you to get this JSON string from the web app. The layer definition is a subset of the webmap_json used in the ConvertWebMapToArcGISProject function. You don't need to create the web map JSON; the APIs take care of it for you. However, you need to extract the layer definition from the full webmap_json. | String |
Эта функция предназначена для использования в веб-инструментах, в которых функция ConvertWebMapToArcGISProject используется в приложениях для печати веб-карт, поддерживающих изменение способа отображения (или других свойств) динамических слоев веб-сервисов. Если ваш веб-инструмент заменит слои сервиса промежуточными векторными слоями после запуска ConvertWebMapToArcGISProject, updateLayerFromJSON применит метод отображения (или другие свойства слоя), как указано в webmap_json для соответствующих промежуточных векторных слоев в шаблоне компоновки. Дополнительная информация и пример кода находятся в разделе ConvertWebMapToArcGISProject.
Пример кода
Следующий скрипт печатает имя каждой карты в проекте и перечисляет имена слоев каждой карты. Скрипт также добавляет префикс (BROKEN) к имени слоя, если он имеет поврежденный источник данных.
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
for m in aprx.listMaps():
print("Map: {0} Layers".format(m.name))
for lyr in m.listLayers():
if lyr.isBroken:
print("(BROKEN) " + lyr.name)
else:
print(" " + lyr.name)
del aprx
Следующий скрипт очищает все запросы определения слоев и отключает надписи для всех слоев на карте с именем Yosemite National Park:
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
m = aprx.listMaps("Yosemite National Park")[0]
for lyr in m.listLayers():
if lyr.supports("DEFINITIONQUERY"):
lyr.definitionQuery = ""
if lyr.supports("SHOWLABELS"):
lyr.showLabels = False
aprx.save()
del aprx
Следующий скрипт добавляет новый определяющий запрос к слою или устанавливает тот же запрос в качестве активного определяющего запроса, если строка SQL уже существует:
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps()[0]
l = m.listLayers()[0]
if l.supports('DefinitionQuery'):
l.definitionQuery = "AREA > 3000000"
Следующий скрипт создает новый определяющий запрос, добавляя словарь Python к существующим запросам списка. Поскольку запрос может уже быть активным, важно сначала очистить существующие активные запросы, прежде чем устанавливать новый активный запрос.
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps()[0]
l = m.listLayers()[0]
if l.supports('DefinitionQuery'):
#Get the list of definition queries
dql = l.listDefinitionQueries()
#Clear active definition queries otherwise the update will fail if there is already an active query
for dq in dql:
dq['isActive'] = False
#Create a new definition query and append it to the list
dql.append({'name': 'Appended Query', 'sql': "name = 'Lake Superior'", 'isActive': True})
#Update the definition queries with the newly modified list
l.updateDefinitionQueries(dql)