TOC에 레이어 피처 수를 표시하는 방법이 있습니까?


10

ArcGIS 10을 사용하고 있습니다. ArcMap의 목차 (TOC)에서 "레이어 이름"에 각 레이어의 총 피처 수를 자동으로 표시하는 방법이 있습니까?

TOC가 다음과 같이 보일 것이라고 생각했습니다.

  • 도로 (27)
  • 스트림 (100)
  • 소포 (12)

Unique Value renders에 대해이 옵션을 찾았 지만 :

  1. 나는 ArcObjects 사람이 아니며
  2. 단일 값 렌더러로만 작업하고 싶습니다 .

"선택 별 목록"탭에는이 기능이 있지만 선택한 기능이있는 경우에만 가능합니다.


지도의 단일 레이어 (이름이 있음)에 대해이 작업을 수행하거나 기본적으로지도의 모든 레이어에 적용하려고합니까?
CHenderson

TOC의 모든 레이어는 기본적으로 바람직하며 레이어의 수가 변경 될 때 (예를 들어 기능이 추가되거나 삭제 될 때) 바람직하게 업데이트됩니다.
RyanKDalton

2
편집 세션의 시작 / 종료를 수신하는 Python addin을 사용하여이 작업을 수행 할 수 있습니다.
Paul

1
ArcGIS 10.1 및 10.2 (10.0 아님)에서 각 레이어에서 GetCount를 실행하고 각 새로 고침 할 때마다 대괄호로 묶은 숫자를 포함하도록 각 레이어의 이름 속성을 업데이트하는 Python 추가 기능 (확장)을 사용하여 가능할 수 있다고 생각합니다. ArcGIS Professional에서이 옵션 OOTB를 갖도록 ArcGIS Idea를 찾거나 제출하면 투표 할 것입니다.
PolyGeo

2
mxd의 스크립트를 사용 하여이 작업을 수행 했으므로 코드를 파이썬 창에 넣고 기능 수와 함께 각 레이어의 인쇄를 얻기 위해 코드를 실행합니다. @PolyGeo가 말했듯이, 파이썬 애드 인이 자동으로 일어나기를 원한다면 (10.1에서) 파이썬 애드 인에 통합 될 수 있습니다.
Cindy Jayakumar

답변:


7

@Paul & @PolyGeo가 제안했듯이 이것을 Python Add-in으로 만드는 것이 가장 합리적이라고 생각합니다. 나중에 그 아이디어를 추구 할 것입니다.

그 동안 MXD에서 기능 개수가 포함 된 사용자 정의 레이어의 TOC 이름을 추가 / 업데이트하는 코드를 작성했습니다. 필자는 스크립트 도구에서 "레이어"를 허용하는 다중 값 입력을 통해 개별 레이어를 허용하는 GP 도구로 이것을 만들었습니다. 이를 통해 여러 레이어를 "주문형"으로 업데이트 할 수 있으며 관심있는 해당 레이어의 기능 수만 업데이트하면됩니다.

나는 이것을 자동으로 실행할 수있는 방법을 찾지 못했지만 오래된 MXD를 테스트 할 때 바람직하지 않을 수도 있습니다. 기능이 많은 레이어가 많은 경우 프로세스 속도가 느려질 수 있습니다.

입력 함

import arcpy

LayerInput = arcpy.GetParameterAsText(0)

mxd = arcpy.mapping.MapDocument("CURRENT")
for lyr in arcpy.mapping.ListLayers(mxd):

    #Skip over group layers, as they have no values to count
    if lyr.isGroupLayer:
        continue

    #Determine basename of the layer, without the feature count
    name = str(lyr.name)

    #Determine if the layer is in the user-defined list
    if name not in LayerInput:
        continue

    #Determine if the layer name already includes a COUNT
    if "[" in name and "]" in name:
        lpos = name.find("[")
        basename = name[:lpos-1]
    else:
        basename = name
    print "    Updating feature count in TOC name for layer: " + str(basename)
    arcpy.AddMessage("    Updating feature count in TOC name for layer: " + str(basename) )

    # In 10.1, you may be able to use arcpy.da.SearchCursor to increase the speed.
    #http://gis.stackexchange.com/questions/30140/fastest-way-to-count-the-number-of-features-in-a-feature-class
    #fcount = 0
    #cursor = arcpy.SearchCursor(lyr)
    #for row in cursor:
    #    fcount += 1
    #del cursor

    #Get the feature count
    fcount = int(arcpy.GetCount_management(lyr).getOutput(0))

    #Update the lyr.name property
    lyr.name = basename + " [n=" + str(fcount) + "]"
    del fcount

arcpy.RefreshTOC()

#Garbage collection
del mxd

GetCount는 커서보다 빠릅니다. 무엇이 당신이 반대 결론을 이끌어 냈습니까?
blah238

작은 shapefile의 초기 테스트에서 속도가 더 빨랐습니다. 그러나 더 큰 RDBMS 계층에서 테스트 한 후에는 GetCount가 더 빠릅니다. 위의 코드를 업데이트했습니다.
RyanKDalton

멋진 작은 도구, ESRI 코드 갤러리에서 공유해야합니까?
혼 비드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.