Зміна символіки декількох шарів за допомогою ArcMap / ArcPy?


10

Чи є спосіб змінити символіку для декількох шарів в ArcMap або ArcCatalog. Я хочу змінити символіку декількох шарів одночасно.


3
Ви можете зробити дійсно простий інструмент сценарію, використовуючи applySymbologyFromLayer . Все, що вам потрібно зробити, це перетягнути шари в діалогове вікно.
Рой

Якщо ви створите файл lyr з декількох шарів і перетягніть його (або додасте його з кнопки "Додати дані"), він застосує всі символи та параметри маркування, які зберігаються в лірі. Зауважте, що ви не застосовуєте його до існуючих шарів, але знову вводите їх цим методом.
Бред Несом

@ BradNesom - Дякую за пропозицію, але я конкретно говорю про зміну символіки декількох шарів, які вже є в TOC. В основному застосовується "Шаблон" символіки з одного (існуючого) шару в TOC до багатьох інших (існуючих) шарів в TOC.
RyanKDalton

2
Мене
бентежить,

чому б просто не об'єднати всі шари в один, а потім змінити колір цього шару?
Роберт

Відповіді:


11

Редагування Ви можете використовувати цей скрипт, наданий ESRI, щоб виконати завдання, що знаходиться під рукою (така ж ідея, як нижче):

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

in_layer: шар, до якого буде застосована символіка.
Шар функції; Растровий шар; TIN Layer; мережевий аналіз рівня

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: \ Файли програм \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Шари та представлення таблиць». (Необов’язково: Перейменуйте вихідний об'єкт у "Символізовані шари").
  4. У Властивості інструменту «Застосувати символіку від шару» встановіть прапорець: «Шари для символізації» та «Символьний шар».
  5. Підключіть “Шари для символізації” до інструменту, встановивши його як вхідний шар.
  6. Підключіть “Symbology Layer” до інструменту, встановивши його як Input Layer.
  7. Збережіть і закрийте вікно редактора моделі.
  8. Відкривши модель, з’явиться таблиця.
  9. Перетягніть шар, який буде використовуватися як шаблон символіки, із змісту (TOC) проекту карти та опустіть його у відповідне поле таблиці. Натисніть кнопку "перевірити значення".
  10. Виберіть кілька шарів TOC, перетягніть їх у відповідне поле таблиці. Натисніть кнопку "перевірити значення".
  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 слід прочитати "Підключення" Symbology Layer "до інструменту, встановивши його як Symbology Layer "
jbaums

Я використовував Python і зробив хороший цикл, який працював чудово, проте це не оновило мою символіку. Я виявив, що спочатку потрібно відкрити .mdx документ, встановити df, оновити символіку, а потім змінити символіку. Потім я побачив відповідь 2, використовуючи Model Builder (саме так я спочатку побудував свій скрипт Python). Це було ШЛОШО простіше і менш трудомістким, плюс у мене зараз збережений інструмент, щоб я міг це зробити для інших наборів даних.
Церква Хайді

1
Замість того, щоб помістити інструмент "Символогія від шару" у "Builder моделей", ви можете просто клацнути правою кнопкою миші на ньому в Панелі інструментів і запустити як Пакет
Сер Аделаїда,

8

Напередодні повідомлення @Aaron я використовував інформацію від @Roy, щоб створити власне рішення, яке я міг би включити в сценарій am 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

Я бачив цю концепцію як потенційний інструмент для надбудови 10.1 Python на панелі інструментів.


4

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

Завантажте 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.