Изменение символики нескольких слоев с помощью ArcMap / ArcPy?


10

Есть ли способ изменить символы для нескольких слоев в ArcMap или ArcCatalog. Я хочу изменить символику нескольких слоев одновременно.


3
Вы можете создать действительно простой скрипт-инструмент, используя applySymbologyFromLayer . Все, что вам нужно сделать, это перетащить слои в диалоговое окно.
Рой

Если вы создаете файл лиры из нескольких слоев и перетаскиваете его (или добавляете из кнопки добавления данных), он будет применять все символы и параметры маркировки, сохраненные в лире. Обратите внимание, что вы не применяете его к существующим слоям, а вводите их снова с помощью этого метода.
Брэд Несом

@ BradNesom - Спасибо за предложение, но я специально говорю об изменении символики нескольких слоев, которые уже находятся в оглавлении. В основном применяется «Шаблон» символов из одного (существующего) слоя в оглавлении ко многим другим (существующим) слоям в оглавлении.
RyanKDalton


почему бы просто не объединить все слои в один, а затем изменить цвет этого слоя?
Роберт,

Ответы:


11

Редактировать Вы можете использовать этот скрипт, предоставленный ESRI, для выполнения поставленной задачи (та же идея, что и ниже):

import arcpy
arcpy.ApplySymbologyFromLayer_management("in_layer", "in_symbology_layer")

in_layer: слой, к которому будут применяться символы.
Векторный слой; растровый слой; Уровень TIN; уровень сетевого анализа

in_symbology_layer: символы этого слоя применяются к входному слою.
Векторный слой; Растровый слой; слой TIN; Уровень сетевого анализа

Или расширите это в форме автономных скриптов (подумайте IDLE):

import arcpy
from arcpy import env

# Set the current workspace
env.workspace = "path/to/workspace"

# Set layer to apply symbology to
inputLayers = ["in_layer_first.lyr","in_layer_second.lyr","in_layer_third.lyr"]

# Set layer that output symbology will be based on
symbologyLayer = "in_symbology_layer.lyr"

# Apply the symbology from the symbology layer to the input layer
for layer in inputLayers:
    arcpy.ApplySymbologyFromLayer_management (layer, symbologyLayer)

По сути, вы создаете слой символов (in_symbology_layer), который вы поддерживаете в отношении дизайна / стиля. Затем вы копируете символы этих слоев на каждый из ваших остальных слоев, как указано в оглавлении.


Предыдущий ответ

Вы можете использовать стиль текущего слоя в таблице содержания / списке слоев и применить его к другим слоям.

Для каждого последующего слоя (ниже предполагаемого слоя стилей)> щелкните правой кнопкой мыши> свойства> символы> стиль импорта из другого слоя


Привет Майкл, Спасибо за ответ, но я искал сделать это для нескольких слоев одновременно.
Рамакришна Биллаканти

Рамакришна, я отредактировал свой ответ с надеждой, что ты найдешь лучшее решение с помощью arcpy.
Майкл Маркиета

13

У меня была такая же проблема, и я нашел другое решение. Это просто и действительно практично, даже не нужно создавать файл * .lyr.

В окне редактора ArcGIS ModelBuilder я разработал следующий процесс:

  1. Создайте переменную, определяющую тип данных как «слой». В его свойствах заданы «список значений» и «параметр модели». (Необязательно: переименуйте объект в «Слои для символизации», чтобы его было проще идентифицировать).
  2. Создайте переменную, определяющую тип данных как «слой». В его свойствах установлено значение «Параметр модели». (Необязательно: переименуйте его в «Символический слой»).
  3. Добавьте инструмент «Применить символы из слоя», обычно в «C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Инструменты управления данными.tbx \ Слои и представления таблиц». (Необязательно: переименуйте выходной объект в «Символизированные слои»).
  4. В свойствах инструмента «Применить символику из слоя» отметьте в качестве предварительных условий: «Слои для символизации» и «Слой символики».
  5. Подключите «Слои для символизации» к инструменту, установив его как «Входной слой».
  6. Подключите «Слой символики» к инструменту, установив его как «Входной слой».
  7. Сохраните и закройте окно редактора модели.
  8. Открыв модель, появится таблица.
  9. Перетащите слой, который будет использоваться в качестве шаблона символов, из оглавления (TOC) проекта карты и поместите его в соответствующее поле таблицы. Нажмите кнопку «Проверить значения».
  10. Выберите несколько слоев оглавления, перетащите их в соответствующее поле таблицы. Нажмите кнопку «Проверить значения».
  11. Запустить его.
  12. Нажмите F5, чтобы обновить отображение карты.

Примечания: Вероятно, это не сработает, если вы используете одновременно слои разных типов геометрии. Это не работает, если вы используете сразу слои с одинаковыми именами. Я не пробовал с не векторных слоев.

Шаги в модели строителя.

Шаги при запуске модели.

Экспортированный скрипт в python модели:

 # Import arcpy module
import arcpy

# Script arguments
Layers_to_symbolize = arcpy.GetParameterAsText(0)

Symbology_Layer = arcpy.GetParameterAsText(1)

# Local variables:
Symbolized_Layers = Layers_to_symbolize

# Process: Apply Symbology From Layer
arcpy.ApplySymbologyFromLayer_management(Layers_to_symbolize, Symbology_Layer)

1
По крайней мере, для ArcGIS 10.2 шаг 6 должен гласить «Подключить« Слой символики »к инструменту, настроив его как Слой символики »
jbaums

Я использовал Python и сделал хороший цикл for, который работал нормально, однако он не обновил мою символику. Я обнаружил, что вам нужно сначала открыть документ .mdx, установить df, обновить символы, а затем изменить символы. Затем я увидел ответ 2, используя Model Builder (именно так я и создал свой скрипт на Python). Это было НАИБОЛЕЕ проще и менее трудоемким, плюс теперь у меня есть инструмент, сохраненный, чтобы я мог сделать это для других наборов данных.
Церковь Хайди

1
Вместо того, чтобы помещать инструмент «Символы из слоя» в Model Builder, вы можете просто щелкнуть правой кнопкой мыши по нему на панели инструментов и запустить как «Пакетная обработка»
сэр Аделаида

8

Непосредственно перед сообщением @Aaron я использовал информацию из @Roy, чтобы создать собственное решение, которое я мог бы включить в скрипт ArcToolbox. См. ниже:

# Import modules
import arcpy

#Get the current Map Document
mxd = arcpy.mapping.MapDocument("CURRENT")

# Script arguments
Template_Layer = arcpy.GetParameterAsText(0)
LayerList = arcpy.GetParameterAsText(1)
Layers_to_Symbolize = LayerList.split(";")

# Process: Apply Symbology From Layer
for UpdateLayer in Layers_to_Symbolize:
    arcpy.AddMessage("Updating: " + UpdateLayer)
    arcpy.ApplySymbologyFromLayer_management(UpdateLayer,Template_Layer)

# Refresh the Table of Contents to reflect the change
arcpy.RefreshTOC()

#Delete the MXD from memory
del mxd

Я мог видеть эту концепцию как потенциальный инструмент для надстройки Python 10.1 на панели инструментов.


4

Я придумал довольно простой способ включить несколько символов слоя одновременно, используя панель инструментов, связанную ниже. После добавления этой панели инструментов перетащите один слой символов, а затем перетащите все слои, к которым вы хотите применить символы (цели). Общие правила сопоставления геотипа (линии, точки, полисы), вероятно, применимы здесь. Как только инструмент запустится, он появится как ничего не произошло. Обновить ваш дисплей (F5) - дисплей обновится с соответствующей символикой. Нажмите на слой, чтобы просмотреть его свойства и нажмите «ОК», и символ оглавления будет обновлен.

Загрузите Zip-файл для набора инструментов здесь.

Вот сценарий, если это проще:

import arcpy

# Script arguments
Target_Layers = arcpy.GetParameterAsText(0)
if Target_Layers == '#' or not Target_Layers:
Target_Layers = "LayersToBeChanged" # provide a default value if unspecified

Symbology_Layer = arcpy.GetParameterAsText(1)
if Symbology_Layer == '#' or not Symbology_Layer:
Symbology_Layer = "SymbologyLayer" # provide a default value if unspecified

# Local variables:
Output_Symbology = Symbology_Layer

# Process: Apply Symbology From Layer (3)
arcpy.ApplySymbologyFromLayer_management(Target_Layers, Symbology_Layer)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.