¿Hay alguna manera de mostrar un recuento de entidades de capas en la tabla de contenido?

10

Estoy usando ArcGIS 10. En la tabla de contenido (TOC) de ArcMap, ¿hay alguna forma de que el "Nombre de capa" muestre automáticamente un recuento del número total de entidades en cada capa?

Estaba pensando que el TOC se vería así:

  • Carreteras (27)
  • Corrientes (100)
  • Paquetes (12)

Encontré esta opción para renderizaciones de Valor único , pero:

  1. No soy un chico de ArcObjects, y
  2. Quiero trabajar solo con el renderizador de valor único .

El tipo de pestaña "Lista por selección" tiene esta capacidad, pero solo cuando hay características seleccionadas.

RyanKDalton
fuente
¿Desea hacer esto para una sola capa en su mapa (que tiene el nombre de), o para que se aplique a todas las capas en su mapa de forma predeterminada?
CHenderson
Todas las capas en la tabla de contenido, preferiblemente de manera predeterminada, y preferiblemente actualizadas cuando cambian los recuentos de una capa (por ejemplo, cuando se agrega o elimina una entidad).
RyanKDalton
2
Probablemente podría hacer esto con un complemento de Python que escuche el inicio / final de una sesión de edición.
Paul
1
Creo que es factible en ArcGIS 10.1 y 10.2 (pero no 10.0) usando un complemento (extensión) de Python que ejecuta GetCount en cada capa y actualiza la propiedad del nombre de cada capa para incluir ese número entre corchetes en cada actualización. Si encuentra / envía una idea de ArcGIS para tener esta opción OOTB en ArcGIS Professional, votaría por ella.
PolyGeo
2
Lo hice usando un script en el mxd, así que introduzco el código en la ventana de Python y lo ejecuto para obtener una impresión de cada capa con recuento de características. Como dice @PolyGeo, eso podría incorporarse a un complemento de Python si desea que suceda automáticamente (en 10.1 como se mencionó).
Cindy Jayakumar

Respuestas:

7

Como sugirieron @Paul y @PolyGeo, creo que tratar de hacer de esto un complemento de Python tiene más sentido, y más adelante buscaré esa idea.

Mientras tanto, armé un código que agregará / actualizará el nombre de TOC de las capas definidas por el usuario en un MXD con recuentos de características. Para mis propósitos, acabo de crear esto como una herramienta GP que aceptaría capas individuales a través de una entrada de valores múltiples que acepta "Capas" en la herramienta de secuencia de comandos. Eso me permite actualizar varias capas "a pedido", simplemente actualizando los recuentos de características de esas capas de interés.

No he encontrado una manera de hacer que esto se ejecute automáticamente, sin embargo, al hacer algunas pruebas de los antiguos MXD, puede que ni siquiera sea deseable. Si tiene muchas capas con muchas características, podría ser un proceso lento.

Caja de entrada

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
fuente
GetCount será más rápido que un cursor. ¿Qué te hizo sacar la conclusión opuesta?
blah238
Mi prueba inicial de pequeños archivos de forma mostró que era más rápido. sin embargo, después de probar en capas RDBMS más grandes, está correcto, GetCount fue más rápido. He actualizado el código anterior.
RyanKDalton
Pequeña herramienta agradable, ¿deberías compartir eso en la galería de códigos ESRI?
Hornbydd