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.
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.
Câu trả lời:
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ạngin_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
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:
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.
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)
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ụ.
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)