Đặt mô tả biểu tượng của các huyền thoại bố trí ArcMap từ bảng?


9

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ả .

nhập mô tả hình ảnh ở đây

Câu trả lời:


7

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)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

Tôi kết hợp một số mã kiểm tra để xem liệu nó có hoạt động không và mặc dù không có lỗi nào được tạo ra, các mô tả được cập nhật không làm cho nó trở lại lớp. Tôi chưa quen với Arcpy trong việc lập bản đồ nên có lẽ tôi đã làm sai điều gì đó.
Michael Promotionson

có hoạt động không Tôi cũng có nhiều điểm giống nhau ngoại trừ tôi đang sử dụng MapDocument ("hiện tại") và RefreshActiveView () / RefreshTOC () nhưng không có gì được cập nhật.
Michael Promotionson

1
@ MichaelMiles-Promotionson Có - nó được cập nhật như dự định - Tôi nghi ngờ rằng điều bạn đã bỏ lỡ là nó không phải là TOC hiển thị các giá trị Mô tả mà là Thành phần Bố cục Huyền thoại. Chèn một trong số đó và chọn Kiểu vật phẩm Huyền thoại hiển thị Mô tả và tôi nghĩ rằng nó sẽ trở nên rõ ràng rằng nó hoạt động.
PolyGeo

Cảm ơn bạn @polygeo! Đó là chính xác nó! Nó đã làm tất cả cùng tôi chỉ nhìn nhầm chỗ.
Michael Promotionson

Tôi đã giải quyết vấn đề phải làm cho các mô tả và mã tra cứu khớp với nhau, xem câu trả lời của tôi.
matt wilkie

1

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.


Một ý tưởng thú vị có thể hoạt động trong một số tình huống. Nó sẽ không hoạt động ở đây vì bảng mô tả chỉ là một bảng, không có hình học. Người ta có thể tham gia vào hình học và mô tả, nhưng tôi không quan tâm đến việc làm thêm hoặc hiệu suất thành công cho dự án này.
matt wilkie

1

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
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.