답변:
ArcMap 애플리케이션을 단독으로 사용하는 대신 ArcPy를 그림으로 가져 왔습니다.
방금 테스트 할 수 있고 쓰기 가능한 classDescriptions 속성 이있는 UniqueValuesSymbology (arcpy.mapping) 클래스를 사용하여 설명 한 내용을 달성 했습니다.
맵 문서의 범례에 선택적으로 나타날 수있는 각각의 고유 한 값에 대한 설명을 나타내는 문자열 또는 숫자의 목록입니다. 이 값은 레이어 속성 대화 상자의 심볼 탭에 표시된 심볼을 마우스 오른쪽 버튼으로 클릭하고 설명 편집을 선택하여 ArcMap 사용자 인터페이스에서만 액세스 할 수 있습니다. classDescriptions 목록에는 동일한 수의 요소가 있어야하며 classValues 특성과 동일한 순서로 정렬되어야합니다.
이 코드는 검색 커서 를 사용하여 찾아 보기 테이블을 list 로 읽은 다음 해당 목록을 레이어 symbology 클래스의 classDescriptions 속성에 씁니다. 점을 유의 룩업 테이블 행의 수가 동일하고, 독특한 기호 분류의 값과 동일한 순서이어야한다 . 내 경우가 아니라는 것을 설명하기 위해 코드를 향상시켜야하지만 테스트 순서에서 수동으로 순서를 확인하는 것이 쉬웠습니다.
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
"고유 값 많은 필드"로 기호를 분류하고 코드에 대해 하나의 필드를 선택하고 더 긴 설명에 대해 두 번째 필드를 선택할 수 있습니까? 각 항목에 "[Field1], [Field2]"형식의 문자열로 레이블을 지정해야합니다.
더 작은 필드에서 작동하며 익숙하지 않은 제한이 없으면 더 긴 문자열로 작동한다고 생각합니다.
유일한 성가신 부분은 레이블 값의 시작 부분에서 코드 값을 거쳐 삭제해야 할 수도 있지만 최악의 일은 아닙니다.
에서 근무 PolyGeo의 코드 , 여기에 내가 검색 값과 설명 사이의 항목과 동일한 순서 일치의 정확한 번호를 가지고해야하는 문제를 해결하려면 해낸거야. 전체 작업 스크립트는 여기에 있습니다 .
# 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