Czy istnieje sposób pokazania liczby operacji warstw w spisie treści?

10

Korzystam z ArcGIS 10. Czy w spisie treści ArcMap (TOC) istnieje sposób, aby „Nazwa warstwy” automatycznie pokazywała liczbę wszystkich funkcji na każdej warstwie?

Myślałem, że spis treści będzie wyglądał mniej więcej tak:

  • Drogi (27)
  • Strumienie (100)
  • Paczki (12)

Znalazłem tę opcję dla renderowania Unique Value , ale:

  1. Nie jestem facetem ArcObjects i
  2. Chcę pracować tylko z rendererem pojedynczej wartości .

Karta „Sortuj według wyboru” ma taką możliwość, ale tylko wtedy, gdy są wybrane funkcje.

RyanKDalton
źródło
Czy chcesz to zrobić dla pojedynczej warstwy na mapie (którą masz nazwę), czy też chcesz zastosować ją domyślnie do wszystkich warstw na mapie?
CHenderson,
Wszystkie warstwy w spisie treści, najlepiej domyślnie i najlepiej aktualizowane, gdy zmienia się liczba warstw (na przykład, gdy funkcja jest dodawana lub usuwana).
RyanKDalton,
2
Prawdopodobnie możesz to zrobić za pomocą dodatku do języka Python, który nasłuchuje początku / końca sesji edycji.
Paul
1
Myślę, że może to być wykonalne w ArcGIS 10.1 i 10.2 (ale nie 10.0) przy użyciu dodatku do Pythona (rozszerzenia), który uruchamia GetCount na każdej warstwie i aktualizuje właściwość nazwy każdej warstwy, aby zawierała tę liczbę w nawiasach kwadratowych przy każdym odświeżaniu. Jeśli znajdziesz / prześlesz pomysł ArcGIS, aby mieć tę opcję OOTB w ArcGIS Professional, głosowałbym za nim.
PolyGeo
2
Zrobiłem to za pomocą skryptu w MXD, więc wstawiam kod do okna Pythona i uruchamiam go, aby uzyskać wydruk każdej warstwy z liczbą funkcji. Jak mówi @PolyGeo, można go włączyć do dodatku do Pythona, jeśli chcesz, aby działo się to automatycznie (jak wspomniano w 10.1).
Cindy Jayakumar,

Odpowiedzi:

7

Jak sugerują @Paul & @PolyGeo, myślę, że próba uczynienia z niego dodatku do Pythona ma jak najbardziej sens i będę kontynuował ten pomysł później.

W międzyczasie utworzyłem kod, który doda / zaktualizuje nazwę TOC warstw zdefiniowanych przez użytkownika w MXD z liczbą operacji. Dla moich celów właśnie stworzyłem to jako narzędzie GP, które akceptuje poszczególne warstwy za pomocą wejścia wielowartościowego, które akceptuje „Warstwy” w narzędziu skryptowym. To pozwala mi aktualizować wiele warstw „na żądanie”, po prostu aktualizując liczbę funkcji tych warstw zainteresowania.

Nie wymyśliłem sposobu, aby uruchomić to automatycznie, jednak przy testowaniu starych MXD może to nawet nie być pożądane. Jeśli masz wiele warstw z wieloma funkcjami, może to być powolny proces.

Pole wprowadzania

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
RyanKDalton
źródło
GetCount będzie szybszy niż kursor. Co skłoniło cię do wyciągnięcia przeciwnego wniosku?
blah238,
Moje pierwsze testy małych plików kształtów wykazały, że jest szybszy. jednak po testowaniu na większych warstwach RDBMS masz rację, GetCount było szybsze. Zaktualizowałem powyższy kod.
RyanKDalton,
Ładne małe narzędzie, powinieneś udostępnić to w galerii kodów ESRI?
Hornbydd,