Esiste un modo per mostrare un conteggio delle funzioni dei livelli nel sommario?


10

Sto usando ArcGIS 10. Nel sommario di ArcMap (TOC), c'è un modo per far sì che il "Nome livello" mostri automaticamente un conteggio del numero totale di funzioni in ciascun livello?

Stavo pensando che il sommario sarebbe simile a questo:

  • Strade (27)
  • Streams (100)
  • Pacchi (12)

Ho trovato questa opzione per i rendering con valore univoco , ma:

  1. Non sono un ragazzo di ArcObjects e
  2. Voglio lavorare solo con il renderer Single Value .

La scheda "Elenca per selezione" ha questa funzionalità, ma solo quando sono presenti funzionalità selezionate.


Stai cercando di farlo per un singolo livello nella tua mappa (di cui hai il nome) o che sia applicato a tutti i livelli sulla mappa per impostazione predefinita?
CHenderson,

Tutti i livelli nel sommario, preferibilmente per impostazione predefinita e preferibilmente aggiornati quando cambiano i conteggi di un livello (ad esempio, quando viene aggiunta o eliminata una funzione).
RyanKDalton,

2
Probabilmente potresti farlo con un componente aggiuntivo Python che ascolta l'inizio / la fine di una sessione di modifica.
Paul,

1
Penso che possa essere fattibile in ArcGIS 10.1 e 10.2 (ma non 10.0) utilizzando un componente aggiuntivo Python (estensione) che esegue GetCount su ogni livello e aggiorna la proprietà name di ciascun livello per includere quel numero tra parentesi ad ogni aggiornamento. Se trovi / invii un'idea ArcGIS per avere questa opzione OOTB in ArcGIS Professional, voterei per essa.
PolyGeo

2
Ho fatto questo usando uno script nel mxd, quindi inserisco il codice nella finestra di Python ed eseguo per ottenere una stampa di ogni livello con il conteggio delle funzionalità. Come dice @PolyGeo, ciò potrebbe essere incorporato in un componente aggiuntivo Python se si desidera che accada automaticamente (al punto 10.1 come menzionato).
Cindy Jayakumar,

Risposte:


7

Come suggerito da @Paul e @PolyGeo, penso che provare a rendere questo un componente aggiuntivo Python abbia più senso, e perseguirò quell'idea in seguito.

Nel frattempo, ho messo insieme il codice che aggiungerà / aggiornerà il nome TOC dei livelli definiti dall'utente in un MXD con conteggi delle funzionalità. Per i miei scopi, ho appena creato questo come uno strumento GP che accetterebbe singoli livelli tramite un input multivalore che accetta "Livelli" nello strumento di script. Ciò mi consente di aggiornare più livelli "su richiesta", semplicemente aggiornando il numero di funzioni di quei livelli di interesse.

Non ho trovato un modo per farlo funzionare automaticamente, tuttavia facendo alcuni test dei vecchi MXD, che potrebbe non essere nemmeno desiderabile. Se hai molti livelli con molte caratteristiche, potrebbe essere un processo lento.

inputbox

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 sarà più veloce di un cursore. Cosa ti ha fatto trarre la conclusione opposta?
blah238,

I miei test iniziali su piccoli shapefile hanno dimostrato che era più veloce. tuttavia, dopo aver testato su livelli RDBMS più grandi, hai ragione, GetCount è stato più veloce. Ho aggiornato il codice sopra.
RyanKDalton,

Bel piccolo strumento, dovresti condividerlo sulla galleria di codici ESRI?
Hornbydd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.