Краткая информация
Позволяет обновлять все свойства слоя или только символы слоя в документе карты (.mxd), извлекая информацию из исходного слоя.
Обсуждение
Интерфейс API arcpy.mapping только предоставляет доступ к ограниченному количеству свойств слоя, которые могут быть напрямую изменены, однако все свойства, расположенные в диалоговом окне Свойства слоя (Layer Properties) могут быть изменены с помощью функции UpdateLayer. Информация извлекается из слоя источника и применяется к слою в документе карты, который должен быть обновлен. Source_layer может быть файлом слоя (.lyr) или слоем в документе карты. UpdateLayer – является хорошей функцией, так как может использоваться различными способами для достижения разных результатов.
Одной из возможностей является обновление только символов слоя. В этом случае update_layer и source_layer должны иметь одинаковые типы геометрии. В зависимости от метода отображения (например, уникального значения с использованием определенного атрибута) определения атрибутов также должны быть одинаковыми. Обновление только символов является поведением по умолчанию.
Другой возможностью является обновление свойств ВСЕХ слоев, включая символы (symbology_only=False). Например, можно обновить псевдонимы полей, выбор символов, определяющих запросов и т. д. для слоя, который существует в нескольких документах карты. Простым способом выполнения этой задачи является использование ArcMap для изменения слоя с подходящими свойствами с последующим сохранением слоя в файл слоя (.lyr). Затем файл слоя может быть использован в качестве source_layer для обновления всех свойств данного слоя. С осторожностью обновляйте все свойства и убедитесь, что сюда не включены свойства, которые не следует переопределять.
Метод UpdateLayer также способен отключать совсем несвязанные слои. Например, можно заменить полигональный слой на растровый слой или составной слой. Эта возможность доступна только в том случае, если для параметра symbology_only указано значение False; в противном случае могут возникнуть конфликты с атрибутами и типами геометрии. Если метод UpdateLayer используется при отсутствии ограничений по символом, то его работа аналогична функциям RemoveLayer и AddLayer.
Если необходимо обновить свойства слоя в файле слоя, необходимо сначала изменить свойства слоя в документе карты, затем сохранить изменения обратно в файл слоя. См. методы save или saveACopy объекта Layer.
Если вас интересует только обновление свойств времени слоя, см. раздел, посвященный UpdateLayerTime.
Синтаксис
UpdateLayer (data_frame, update_layer, source_layer, {symbology_only})
Параметр | Объяснение | Тип данных |
data_frame | Ссылка на объект Фрейм данных (DataFrame), содержащий обновляемый слой. | DataFrame |
update_layer | Объект Layer, представляющий существующий слой, который будет обновлен. | Layer |
source_layer | Ссылка на объект Слой, содержащий информацию, которая применяется к update_layer. | Layer |
symbology_only | Логическое значение, которое определяет, следует или нет обновлять только символы слоя или также все прочие свойства. Если задач значение True, будет обновляться только символы слоя. (Значение по умолчанию — True) | Boolean |
Пример кода
Пример использования UpdateLayer 1
В следующем скрипте обновляются только символы слоя с использованием файла слоя. Слой называется Rivers и находится во фрейме данных County Maps.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]
updateLayer = arcpy.mapping.ListLayers(mxd, "Rivers", df)[0]
sourceLayer = arcpy.mapping.Layer(r"C:\Project\Data\Rivers.lyr")
arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)
mxd.saveACopy(r"C:\Project\Project2.mxd")
del mxd, sourceLayer
Пример использования UpdateLayer 2
В следующем скрипте полностью заменяется слой Rivers на составной слой из другого документа карты, который отображает различные классы объектов для разных масштабов.
import arcpy
#Reference layer in secondary map document
mxd2 = arcpy.mapping.MapDocument(r"C:\Project\ProjectTemplate.mxd")
df2 = arcpy.mapping.ListDataFrames(mxd2, "Layers")[0]
sourceLayer = arcpy.mapping.ListLayers(mxd2, "Rivers Group Layer", df2)[0]
#Update layer in primary map document
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]
updateLayer = arcpy.mapping.ListLayers(mxd, "Rivers", df)[0]
arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, False)
#Save to a new map document and clear variable references
mxd.saveACopy(r"C:\Project\Project2.mxd")
del mxd, mxd2