테이블에서 ArcMap 레이아웃 범례의 기호 설명을 설정 하시겠습니까?


답변:


7

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

나는 이것이 작동하는지 확인하기 위해 몇 가지 테스트 코드를 모았으며 오류가 생성되지 않았지만 업데이트 된 설명이 다시 레이어로 돌아 가지 않습니다. 나는 매핑에서 arcpy를 처음 사용하기 때문에 아마도 내가 잘못한 것일 수 있습니다.
Michael Stimson 2016 년

작동합니까? MapDocument ( "current") 및 RefreshActiveView () / RefreshTOC ()를 사용하는 것을 제외하고는 거의 동일하지만 아무것도 업데이트되지 않습니다.
Michael Stimson 2016 년

1
@ MichaelMiles-Stimson 예-의도 한대로 업데이트되었습니다. 놓친 것은 설명 값을 나타내는 TOC가 아니라 범례 레이아웃 요소라고 생각합니다. 그중 하나를 삽입하고 설명을 표시하는 범례 항목 스타일을 선택하면 제대로 작동한다고 생각합니다.
PolyGeo

@polygeo 감사합니다! 바로 그거야! 내가 틀린 곳을보고 있었을 때마다 그것을하고있었습니다.
Michael Stimson 2016 년

설명과 조회 코드를 일치시켜야하는 문제를 해결했습니다. 내 답변을 참조하십시오.
매트 윌키

1

"고유 값 많은 필드"로 기호를 분류하고 코드에 대해 하나의 필드를 선택하고 더 긴 설명에 대해 두 번째 필드를 선택할 수 있습니까? 각 항목에 "[Field1], [Field2]"형식의 문자열로 레이블을 지정해야합니다.

더 작은 필드에서 작동하며 익숙하지 않은 제한이 없으면 더 긴 문자열로 작동한다고 생각합니다.

유일한 성가신 부분은 레이블 값의 시작 부분에서 코드 값을 거쳐 삭제해야 할 수도 있지만 최악의 일은 아닙니다.


어떤 상황에서는 효과가있을만한 흥미로운 아이디어입니다. 설명 테이블은 단순한 테이블이기 때문에 지오메트리는 없습니다. 지오메트리와 설명에 참여할 수는 있지만이 프로젝트의 추가 작업이나 성능 저하에는 관심이 없습니다.
matt wilkie

1

에서 근무 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.