การเปลี่ยนสัญลักษณ์ของหลายเลเยอร์โดยใช้ ArcMap / ArcPy?


10

มีวิธีในการเปลี่ยนสัญลักษณ์สำหรับหลายเลเยอร์ใน ArcMap หรือ ArcCatalog หรือไม่ ฉันต้องการเปลี่ยนสัญลักษณ์ของหลายเลเยอร์พร้อมกัน


3
คุณสามารถทำให้เครื่องมือสคริปต์ง่ายจริงๆใช้applySymbologyFromLayer สิ่งที่คุณต้องทำคือการลากและวางเลเยอร์ลงในกล่องโต้ตอบ
Roy

หากคุณสร้างไฟล์ lyr หลายเลเยอร์แล้วลากเข้ามา (หรือเพิ่มจากปุ่มเพิ่มข้อมูล) มันจะใช้สัญลักษณ์ทั้งหมดและการตั้งค่าการติดฉลากที่บันทึกไว้ใน lyr โปรดทราบว่าคุณไม่ได้ใช้มันกับเลเยอร์ที่มีอยู่ แต่นำพวกเขากลับมาอีกครั้งด้วยวิธีนี้
แบรด Nesom

@ BradNesom- ขอบคุณสำหรับคำแนะนำ แต่ฉันกำลังพูดถึงการปรับเปลี่ยนสัญลักษณ์ของหลายเลเยอร์ที่มีอยู่ใน TOC โดยเฉพาะ โดยพื้นฐานแล้วใช้ "แม่แบบ" ของสัญลักษณ์จากชั้นหนึ่ง (ที่มีอยู่) ใน TOC กับชั้นอื่น ๆ (ที่มีอยู่) ใน TOC
RyanKDalton

2
มันแผ่นกั้นฉันว่าทำไมการทำงานนี้ไม่ได้สร้างขึ้นใน ArcMap ...
jbaums

ทำไมไม่รวมเพียงเลเยอร์ทั้งหมดเข้าด้วยกันแล้วเปลี่ยนสีของเลเยอร์นั้น
Robert

คำตอบ:


11

แก้ไข คุณสามารถใช้สคริปต์นี้โดย ESRI เพื่อทำงานให้เสร็จสมบูรณ์ (แนวคิดเดียวกันกับด้านล่าง):

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

in_layer: เลเยอร์ที่จะใช้สัญลักษณ์
Feature Layer; Raster Layer; TIN Layer; 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) ที่คุณรักษาไว้ด้วยความเคารพในการออกแบบ / สไตล์ จากนั้นคุณคัดลอกเลเยอร์สัญลักษณ์ไปยังเลเยอร์อื่น ๆ ของคุณตามที่ระบุไว้ในสารบัญของคุณ


คำตอบก่อนหน้า

คุณสามารถใช้สไตล์จากเลเยอร์ปัจจุบันในสารบัญ / รายการเลเยอร์ของคุณและนำไปใช้กับเลเยอร์อื่น ๆ ของคุณ

สำหรับแต่ละเลเยอร์ที่ตามมา (ด้านล่างเลเยอร์สไตล์ที่คุณต้องการ)> คลิกขวา> คุณสมบัติ> สัญลักษณ์> นำเข้าสไตล์จากเลเยอร์อื่น


สวัสดี Michael ขอบคุณสำหรับคำตอบ แต่ฉันต้องการทำหลายชั้นพร้อมกัน
Ramakrishna Billakanti

Ramakrishna ฉันได้แก้ไขคำตอบของฉันด้วยความหวังว่าคุณจะพบทางออกที่ดีกว่าผ่าน arcpy
Michael Markieta

13

ฉันมีปัญหาเดียวกันและฉันพบวิธีแก้ไขปัญหาอื่น มันง่ายและใช้งานได้จริงไม่จำเป็นต้องสร้างไฟล์ * .lyr

ในกล่องเครื่องมือแก้ไข ArcGIS ModelBuilder ฉันออกแบบกระบวนการด้านล่าง:

  1. สร้างตัวแปรโดยกำหนดประเภทข้อมูลเป็น 'เลเยอร์' ในคุณสมบัติตั้งเป็น“ รายการค่า” และ“ พารามิเตอร์รุ่น” (ไม่บังคับ: เปลี่ยนชื่อวัตถุเป็น“ เลเยอร์เพื่อเป็นสัญลักษณ์” เพื่อระบุตัวตนที่ง่ายขึ้น)
  2. สร้างตัวแปรโดยกำหนดประเภทข้อมูลเป็น 'เลเยอร์' ในคุณสมบัติของมันตั้งเป็น "พารามิเตอร์รุ่น" (ไม่บังคับ: เปลี่ยนชื่อเป็น“ Symbology Layer”)
  3. เพิ่มเครื่องมือ“ ใช้ Symbology จาก Layer” ซึ่งโดยปกติจะอยู่ใน 'C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers และมุมมองตาราง' (ไม่บังคับ: เปลี่ยนชื่อวัตถุเอาต์พุตเป็น“ เลเยอร์ Symbolized”)
  4. ในคุณสมบัติของเครื่องมือ 'ใช้ Symbology from Layer' ตรวจสอบว่าเป็นเงื่อนไขเบื้องต้น:“ เลเยอร์เพื่อเป็นสัญลักษณ์” และ“ Symbology Layer”
  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 อัพเดต symbology จากนั้นเปลี่ยน symbology ฉันเห็นคำตอบที่ 2 โดยใช้ Model Builder (ซึ่งเป็นวิธีที่ฉันสร้างสคริปต์ Python ของฉันขึ้นมา) นี่เป็นวิธีที่ง่ายขึ้นและใช้เวลาน้อยลงและตอนนี้ฉันมีเครื่องมือที่บันทึกไว้ดังนั้นฉันจึงสามารถทำสิ่งนี้กับชุดข้อมูลอื่นได้
โบสถ์ Heidi

1
แทนที่จะใส่เครื่องมือ 'Symbology from Layer' ในเครื่องมือสร้างแบบจำลองคุณสามารถคลิกขวาที่มันในกล่องเครื่องมือและทำงานเป็นแบทช์
Sir Adelaide

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

ฉันคิดวิธีง่ายๆในการเปิดใช้งานสัญลักษณ์หลายชั้นพร้อมกันโดยใช้กล่องเครื่องมือที่ลิงก์ด้านล่าง หลังจากที่คุณเพิ่มกล่องเครื่องมือนี้แล้วให้ลากและวางเลเยอร์ symbology เดียวแล้วลากและวางเลเยอร์ทั้งหมดที่คุณต้องการใช้ symbology กับ (เป้าหมาย) กฎทั่วไปเกี่ยวกับการจับคู่ประเภททางภูมิศาสตร์ (เส้นคะแนนโพล) มีแนวโน้มใช้ที่นี่ เมื่อเครื่องมือทำงานแล้วมันจะปรากฏเป็นไม่มีอะไรเกิดขึ้น รีเฟรชจอแสดงผลของคุณ (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.