ArcMap có khả năng hiển thị một mô tả mở rộng cho từng mục trong danh sách biểu tượng. Làm thế nào tôi có thể điền tài sản đó từ một bảng? Mục tiêu là để tránh phải chỉnh sửa từng ký hiệu một để thêm mô tả .
ArcMap có khả năng hiển thị một mô tả mở rộng cho từng mục trong danh sách biểu tượng. Làm thế nào tôi có thể điền tài sản đó từ một bảng? Mục tiêu là để tránh phải chỉnh sửa từng ký hiệu một để thêm mô tả .
Câu trả lời:
Thay vì cố gắng sử dụng ứng dụng ArcMap một mình, tôi đã đưa ArcPy vào hình ảnh.
Tôi vừa kiểm tra và đạt được những gì bạn mô tả bằng cách sử dụng lớp UniqueValuesSymbology (arcpy.micking) có thuộc tính mô tả classDes mô tả có thể được đặt thành:
Danh sách các chuỗi hoặc số đại diện cho các mô tả cho từng giá trị duy nhất có thể tùy ý xuất hiện trong chú giải của tài liệu bản đồ. Các giá trị này chỉ có thể truy cập được trong giao diện người dùng ArcMap bằng cách bấm chuột phải vào biểu tượng được hiển thị trong tab Symbology trong hộp thoại Thuộc tính lớp và chọn Chỉnh sửa mô tả. Danh sách mô tả class cần có cùng số lượng phần tử và được sắp xếp theo cùng thứ tự với thuộc tính classValues.
Mã này sử dụng một Con trỏ tìm kiếm để đọc bảng tra cứu vào một danh sách , sau đó ghi danh sách đó vào thuộc tính classDes mô tả của lớp ký hiệu của lớp. Lưu ý rằng bảng tra cứu PHẢI có cùng số lượng hàng và theo cùng thứ tự với các giá trị của phân loại mã vạch duy nhất . Mã của tôi sẽ cần phải được tăng cường để giải thích cho trường hợp đó không phải là trường hợp đó nhưng việc đảm bảo đơn hàng đó theo cách thủ công là dễ dàng trong trường hợp thử nghiệm của tôi.
import arcpy
vegDescList = []
vegCodes = arcpy.SearchCursor(r"C:\temp\test.gdb\LookupTable")
for vegCode in vegCodes:
vegDescList.append(vegCode.Description)
mxd = arcpy.mapping.MapDocument(r"C:\temp\test.mxd")
lyr = arcpy.mapping.ListLayers(mxd,"testFC")[0]
if lyr.symbologyType == "UNIQUE_VALUES":
lyr.symbology.classDescriptions = vegDescList
mxd.save()
del mxd
Bạn có thể phân loại biểu tượng của mình với "Giá trị duy nhất Nhiều trường" và chọn một trường cho mã và trường thứ hai để mô tả dài hơn không? Điều đó sẽ gắn nhãn cho mỗi mục bằng một chuỗi ở dạng "[Field1], [Field2]"
Nó hoạt động với các trường nhỏ hơn, tôi tưởng tượng nó sẽ có chuỗi dài hơn, trừ khi có giới hạn mà tôi không quen thuộc.
Phần khó chịu duy nhất là bạn có thể phải trải qua và xóa giá trị mã từ đầu giá trị nhãn, nhưng đó sẽ không phải là điều tồi tệ nhất từng xảy ra.
Hoạt động từ mã của PolyGeo , đây là những gì tôi nghĩ ra để giải quyết vấn đề phải có một số lượng chính xác các mặt hàng và thứ tự giống hệt nhau giữa các giá trị tra cứu và mô tả. Kịch bản làm việc đầy đủ là ở đây .
# name and path of the lookup table
lookup_table = r"..\default.gdb\vegMajorComm_Lookup"
# change these to match the relevant field names in the lookup table
code = 'VegCode'
description = 'Description'
##...snip...
# build the descriptions dictionary
descriptions = {}
rows = arcpy.SearchCursor(lookup_table)
for item in rows:
#print item.getValue(code), item.getValue(description)
descriptions[item.getValue(code)] = item.getValue(description)
# lyr.symbology requires the classValues and classDescriptions to have
# same number of rows and be in same order. So extract only matching
# elements from the description dictionary
desclist = []
if lyr.symbologyType == "UNIQUE_VALUES":
#extract matches
for symbol in lyr.symbology.classValues:
desclist.append(descriptions[symbol])
# assign the descriptions
lyr.symbology.classDescriptions = desclist
mxd.saveACopy(output_map)
del mxd