Thay đổi Symbology của nhiều lớp bằng ArcMap / ArcPy?


10

Có cách nào để thay đổi hệ thống ký hiệu cho nhiều lớp trong ArcMap hoặc ArcCatalog. Tôi muốn thay đổi hệ thống ký hiệu của nhiều lớp cùng một lúc.


3
Bạn có thể tạo một công cụ tập lệnh thực sự đơn giản bằng cách sử dụng applicationSymbologyFromLayer . Tất cả những gì bạn phải làm là kéo và thả các lớp vào hộp thoại.
Roy

Nếu bạn tạo một tệp lyr của nhiều lớp và kéo nó vào (hoặc thêm nó từ nút thêm dữ liệu), nó sẽ áp dụng tất cả các ký hiệu và cài đặt ghi nhãn được lưu trong lyr. Lưu ý rằng bạn không áp dụng nó cho các lớp hiện có mà đưa chúng trở lại với phương thức này.
Brad Nesom

@ BradNesom- Cảm ơn bạn đã gợi ý nhưng tôi đặc biệt nói về việc thay đổi hệ thống ký hiệu của nhiều lớp đã có trong TOC. Về cơ bản áp dụng một "Mẫu" của hệ thống ký hiệu từ một lớp (hiện tại) trong TOC cho nhiều lớp (hiện có) khác trong TOC.
RyanKDalton

2
Nó gây khó khăn cho tôi tại sao chức năng này không được tích hợp trong ArcMap ...
jbaums

Tại sao không hợp nhất tất cả các lớp thành một, và sau đó thay đổi màu của lớp đó?
Robert

Câu trả lời:


11

Chỉnh sửa Bạn có thể sử dụng tập lệnh này do ESRI cung cấp để hoàn thành nhiệm vụ trong tay (cùng ý tưởng như bên dưới):

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

in_layer: Lớp mà hệ thống ký hiệu sẽ được áp dụng.
Lớp tính năng; Lớp raster; Lớp TIN; Lớp phân tích mạng

in_symbology_layer: Hệ thống ký hiệu của lớp này được áp dụng cho Lớp đầu vào.
Lớp tính năng; Lớp raster; Lớp TIN; Lớp phân tích mạng

Hoặc mở rộng phần này dưới dạng tập lệnh độc lập (nghĩ 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)

Về bản chất, bạn tạo một lớp ký hiệu (in_symbology_layer) mà bạn duy trì liên quan đến thiết kế / kiểu dáng. Sau đó, bạn sao chép ký hiệu lớp đó vào từng lớp khác như được liệt kê trong mục lục của bạn.


Trả lời trước

Bạn có thể sử dụng một kiểu từ một lớp hiện tại trong danh sách mục lục / lớp của bạn và áp dụng nó cho các lớp khác.

Đối với mỗi lớp tiếp theo (bên dưới lớp kiểu dự định của bạn)> nhấp chuột phải> thuộc tính> ký hiệu> kiểu nhập từ lớp khác


Xin chào Michael, Cảm ơn câu trả lời nhưng tôi đã tìm cách làm nó cho nhiều lớp cùng một lúc.
Ramakrishna Billakanti

Ramakrishna, tôi đã chỉnh sửa câu trả lời của mình với hy vọng rằng bạn tìm thấy một giải pháp tốt hơn thông qua arcpy.
Michael Markieta

13

Tôi đã có cùng một vấn đề và tôi tìm thấy một giải pháp khác. Nó đơn giản và thực tế, thậm chí không cần tạo tệp * .lyr.

Trong hộp soạn thảo ArcGIS ModelBuilder, tôi đã thiết kế quy trình dưới đây:

  1. Tạo một biến, xác định kiểu dữ liệu thành 'lớp'. Trong các thuộc tính của nó được thiết lập là một danh sách các giá trị (Tùy chọn: Đổi tên đối tượng thành Lớp Lớp để tượng trưng cho tầm nhìn, để nhận dạng dễ dàng hơn).
  2. Tạo một biến, xác định kiểu dữ liệu thành 'lớp'. Trong các thuộc tính của nó được đặt là tham số Model Model. (Tùy chọn: Đổi tên nó thành lớp Symbology lớp).
  3. Thêm công cụ Triệu áp dụng Symbology từ Layer, thường là trong 'C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layer và Table Views'. (Tùy chọn: Đổi tên đối tượng đầu ra thành Lớp biểu tượng hóa).
  4. Trong Thuộc tính của công cụ 'Áp dụng Symbology From Layer' làm Điều kiện tiên quyết: Lớp Lớp để tượng trưng cho lớp Symbology và biểu tượng.
  5. Kết nối các lớp ở mức độ cao để tượng trưng cho các công cụ cài đặt nó làm Lớp đầu vào.
  6. Kết nối lớp Symbology lớp giữa với công cụ cài đặt nó làm Lớp đầu vào.
  7. Lưu và đóng cửa sổ soạn thảo mô hình.
  8. Mở mô hình, một bảng sẽ xuất hiện.
  9. Kéo lớp được sử dụng làm mẫu của hệ thống ký hiệu, từ mục lục (TOC) của dự án bản đồ và thả nó vào trường bảng tương ứng. Nhấp vào nút 'kiểm tra giá trị'.
  10. Chọn nhiều lớp của TOC, kéo và thả chúng vào trường bảng tương ứng. Nhấp vào nút 'kiểm tra giá trị'.
  11. Chạy nó
  12. Nhấn F5 để làm mới màn hình bản đồ.

Lưu ý: Nó có thể sẽ không hoạt động nếu bạn sử dụng cùng một lúc các lớp hình học khác nhau. Nó không hoạt động tốt nếu bạn sử dụng cùng một lúc các lớp có cùng tên. Tôi đã không thử với các lớp không vector.

Các bước trong xây dựng mô hình.

Các bước khi chạy mô hình.

Kịch bản đã xuất sang python của mô hình là:

 # 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
Ít nhất là đối với ArcGIS 10.2, bước 6 nên đọc "Kết nối lớp Symbology lớp đối với công cụ đặt nó là Lớp Symbology "
jbaums

Tôi đã sử dụng Python và tạo ra một vòng lặp tốt để chạy tốt, tuy nhiên nó không cập nhật hệ thống ký hiệu của tôi. Tôi đã thấy rằng trước tiên bạn cần mở tài liệu .mdx, đặt df, cập nhật hệ thống ký hiệu, sau đó thay đổi hệ thống ký hiệu. Sau đó tôi đã thấy câu trả lời 2, sử dụng Model Builder (đó là cách ban đầu tôi xây dựng tập lệnh Python của mình). Đây là cách dễ dàng hơn và ít tốn thời gian hơn, cộng với bây giờ tôi đã có một công cụ được lưu để tôi có thể làm điều này cho các bộ dữ liệu khác.
Nhà thờ Heidi

1
Thay vì đặt công cụ 'Symbology from Layer' trong Model Builder, bạn có thể chỉ cần nhấp chuột phải vào nó trong Hộp công cụ và chạy như Batch
Sir Adelaide

8

Ngay trước tin nhắn của @Aaron, tôi đã sử dụng thông tin từ @Roy để tạo ra giải pháp của riêng mình mà tôi có thể kết hợp vào tập lệnh ArcToolbox. Xem bên dưới:

# 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

Tôi có thể thấy khái niệm này như một công cụ tiềm năng cho 10.1 Bổ trợ Python trên thanh công cụ.


4

Tôi đã nghĩ ra một cách khá đơn giản để kích hoạt tất cả các ký hiệu nhiều lớp cùng một lúc bằng cách sử dụng hộp công cụ được liên kết bên dưới. Sau khi bạn đã thêm hộp công cụ này, hãy kéo và thả lớp ký hiệu đơn và sau đó kéo và thả tất cả các lớp bạn muốn áp dụng ký hiệu tượng trưng cho (mục tiêu). Các quy tắc chung về kết hợp loại địa lý (đường, điểm, polys) có thể áp dụng ở đây. Khi công cụ đã chạy, nó sẽ xuất hiện như không có gì xảy ra. Làm mới màn hình của bạn (F5) - màn hình sẽ cập nhật với hệ thống ký hiệu phù hợp. Nhấp vào một lớp để xem các thuộc tính của nó và nhấp vào "OK" và biểu tượng TOC sẽ cập nhật.

Tải tập tin Zip cho hộp công cụ tại đây.

Đây là kịch bản nếu điều đó dễ dàng hơn:

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.