ArcMap / ArcPy를 사용하여 여러 레이어의 심볼로지를 변경 하시겠습니까?


10

ArcMap 또는 ArcCatalog에서 여러 레이어의 기호를 변경하는 방법이 있습니까? 여러 레이어의 기호를 한 번에 변경하고 싶습니다.


3
applySymbologyFromLayer를 사용하여 정말 간단한 스크립트 도구를 만들 수 있습니다. 레이어를 대화 상자로 끌어서 놓기 만하면됩니다.
Roy

여러 레이어의 lyr 파일을 만들고 드래그하여 (또는 데이터 추가 버튼에서 추가) lyr에 저장된 모든 기호 및 레이블 설정을 적용합니다. 기존 레이어에는 적용하지 않지만이 방법으로 다시 가져옵니다.
Brad Nesom

@ BradNesom- 제안에 감사드립니다.하지만 이미 TOC에있는 여러 레이어의 심볼을 변경하는 것에 대해 이야기하고 있습니다. 기본적으로 TOC의 한 (기존) 레이어에서 TOC의 다른 (기존) 레이어로 심볼의 "템플릿"을 적용합니다.
RyanKDalton

2
왜이 기능이 ArcMap에 내장되어 있지 않은지 저를
당황하게합니다

모든 레이어를 하나로 병합 한 다음 해당 레이어의 색상을 변경하는 이유는 무엇입니까?
Robert

답변:


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)를 만듭니다. 그런 다음 목차에 나열된 것처럼 해당 레이어 심볼을 다른 레이어 각각에 복사합니다.


이전 답변

목차 / 레이어 목록에서 현재 레이어의 스타일을 사용하여 다른 레이어에 적용 할 수 있습니다.

이후의 각 레이어 (원하는 스타일 레이어 아래)> 마우스 오른쪽 버튼을 클릭> 속성> 심볼> 다른 레이어에서 스타일 가져 오기


안녕 마이클, 답변 주셔서 감사합니다하지만 한 번에 여러 레이어에 대한 그것을 찾고 있었다.
Ramakrishna Billakanti

Ramakrishna, 나는 당신이 arcpy를 통해 더 나은 해결책을 찾길 희망하면서 내 대답을 편집했습니다.
Michael Markieta

13

나는 같은 문제가 있었고 다른 해결책을 찾았습니다. 간단하고 실용적이며 * .lyr 파일을 만들 필요조차 없습니다.

ArcGIS ModelBuilder 편집기 상자에서 아래 프로세스를 설계했습니다.

  1. 데이터 유형을 'layer'로 정의하여 변수를 작성하십시오. 속성에서 "값 목록"및 "모델 매개 변수"로 설정됩니다. (선택 사항 : 더 쉽게 식별 할 수 있도록 객체의 이름을 "심볼 할 레이어"로 바꿉니다).
  2. 데이터 유형을 'layer'로 정의하여 변수를 작성하십시오. 속성에서 "모델 매개 변수"로 설정됩니다. (선택 사항 : "심볼 레이어"로 이름을 바꿉니다).
  3. 일반적으로 'C : \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views'에“계층에서 심볼 적용”도구를 추가하십시오. (선택 사항 : 출력 객체의 이름을 "심볼 레이어"로 바꿉니다).
  4. '레이어에서 기호 적용'도구의 속성에서“기호화 할 레이어”및“기호 레이어”와 같은 전제 조건을 확인하십시오.
  5. “레이어를 상징화”하여 도구를 입력 레이어로 설정하십시오.
  6. “Symbology Layer”를 도구에 입력 레이어로 설정하십시오.
  7. 모델 편집기 창을 저장하고 닫으십시오.
  8. 모델을 열면 테이블이 나타납니다.
  9. 맵 프로젝트의 목차 (TOC)에서 심볼로지 템플릿으로 사용할 레이어를 드래그하여 해당 테이블 필드에 놓습니다. '값 확인'버튼을 클릭하십시오.
  10. 목차의 여러 레이어를 선택하고 해당 테이블 필드로 끌어다 놓습니다. '값 확인'버튼을 클릭하십시오.
  11. 그것을 실행하십시오.
  12. F5를 클릭하여 맵 표시를 새로 고치십시오.

참고 : 다른 유형의 형상의 레이어를 동시에 사용하면 작동하지 않을 수 있습니다. 같은 이름의 레이어를 한 번에 사용하면 제대로 작동하지 않습니다. 벡터가 아닌 레이어로 시도하지 않았습니다.

모델 빌더의 단계.

모델을 실행할 때의 단계.

모델의 파이썬으로 내 보낸 스크립트는 다음과 같습니다.

 # 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

나는 파이썬을 사용하고 있었고 잘 실행되는 멋진 for 루프를 만들었지 만 내 기호를 업데이트하지 않았습니다. 먼저 .mdx 문서를 열고 df를 설정하고 기호를 업데이트 한 다음 기호를 변경해야한다는 것을 알았습니다. 그런 다음 Model Builder를 사용하여 답변 2를 보았습니다 (이것은 원래 Python 스크립트를 작성 한 방법입니다). 이것은 훨씬 쉽고 시간이 덜 걸리는 작업이었으며 이제 다른 데이터 세트를 위해 도구를 저장했습니다.
Heidi Church

1
오히려 '레이어에서 상징 학'을 넣어보다 모델 빌더의 도구, 당신은 바로 도구 상자에서 클릭하고 일괄로 실행할 수 있습니다
선생님 애들레이드

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

이 개념을 툴바에서 10.1 Python Add-in의 잠재적 도구로 볼 수있었습니다.


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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.