Aggiornamento della tabella degli attributi aperta in ArcMap utilizzando ArcPy anziché ArcObjects?


11

Sto eseguendo lo strumento Calculate Field GP dall'arcade in ArcMap. Quando un valore di riga viene aggiornato, non viene visualizzato fino a quando non utilizzo lo strumento Ricarica cache (Opzioni tabella> Ricarica cache). Come posso aggiornare automaticamente la tabella degli attributi senza usare ArcObjects?

Ho provato ad aggiornare la query di definizione come suggerito da @ blah238 Usando python, come "ricaricare la cache" una tabella degli attributi aperta , ma questo non aiuta. Il ripristino dell'origine dati non è un'opzione perché la classe di funzionalità potrebbe essere nella sessione di modifica e non voglio perdere la connessione ai dati di origine.


Stai usando ArcGIS 10.1? In tal caso stai usando un componente aggiuntivo Python o uno strumento di script Python per eseguire Calculate Field?
PolyGeo

1
Importa davvero? Sto chiamando lo strumento Calculate Field GP da un componente aggiuntivo Python, ma la stessa cosa si osserva quando si esegue lo strumento GP dalla finestra di Python.
Alex Tereshenkov,

1
Immagino sempre che se ho intenzione di provare a riprodurre un problema, il modo più probabile che lo vedrò è se eseguo esattamente (o il più vicino possibile) gli stessi passaggi nella stessa configurazione di come è stata visto prima.
PolyGeo

Risposte:


4

Sembra che tu stia colpendo una limitazione di ArcPy, in assenza di ArcObjects.

I limiti di ArcPy.mapping sono stati ampiamente descritti qui come:

Arcpy.mapping non è un sostituto di ArcObjects ma piuttosto un'alternativa per i diversi scenari supportati. ArcObjects è ancora necessario per lo sviluppo più fine e la personalizzazione delle applicazioni, mentre arcpy.mapping è inteso per automatizzare il contenuto di documenti cartografici e file layer esistenti.

Se l'altro suggerimento di @ blah238 sull'uso di ArcObjects da ArcPy non è un'opzione per te, allora potresti essere meglio inviare un'idea ArcGIS per avere questa funzionalità esposta ad ArcPy. Se pubblichi qui un link a tale idea ArcGIS, sarò felice di votarla.


Grazie a PolyGeo, peccato che non sia possibile trovare un modo per aggiornare la tabella degli attributi quando si calcolano i valori dei campi al di fuori della sessione di modifica.
Alex Tereshenkov,

1
È possibile inviare una richiesta di miglioramento al supporto tecnico ESRI. Ho richiesto la possibilità di avere solo un pulsante, un'opzione di menu o un tasto F per aggiornare la tabella per mostrare le modifiche senza chiudere e aprire manualmente. Mi è stato detto che la tabella dovrebbe aggiornarsi da sola e la questione è stata chiusa perché non riproducibile localmente. Di solito sono utili. Ho avuto l'impressione che non fossero nemmeno a conoscenza dei limiti.
johns

Ti consiglio di fare entrambe le cose sopra, ma ArcGIS Ideas ti consente di monitorare la popolarità e i progressi dell'implementazione molto più facilmente rispetto al supporto locale qui.
PolyGeo

1
@johns, sai che non devi chiudere e aprire la tabella degli attributi per aggiornarla? Il modo corrente per farlo è fare clic sul pulsante Opzioni tabella> Ricarica cache. Un'altra cosa che funziona è eseguire l'operazione Calcola campo nella modalità di modifica, quindi i valori nelle tabelle degli attributi vengono immediatamente aggiornati.
Alex Tereshenkov,

1
@Alex, grazie per il suggerimento; mi ha fatto tornare indietro per testare ulteriormente il problema. Ho usato la cache di ricarica ma non è riuscita / fallita quando ho aggiunto poligoni in modalità modifica nella vista layout usando un componente aggiuntivo per ottenere l'estensione del layout. Nella visualizzazione dati e utilizzo lo stesso componente aggiuntivo, la cache di ricarica funziona. Quindi comporta in qualche modo la vista del layout.
johns

3

Questo può essere utile o meno per il tuo flusso di lavoro specifico. Ho scoperto che se cambi la selezione sul tuo livello, anche la tabella degli attributi si aggiorna.

Quindi uso spesso

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Naturalmente se in realtà hai selezionato qualcosa di cui non vuoi perdere la traccia, allora non va bene. In tal caso, è possibile selezionare dal livello in cui OID è nell'elenco degli OID dalle funzioni attualmente selezionate (sostanzialmente cambiare la selezione in qualsiasi cosa sia già selezionata attualmente). Questo potrebbe richiedere troppo tempo per essere praticamente, non l'ho mai provato in uno scenario di vita reale.


1

Hai provato:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

o

arcpy.RefreshActiveView() # Refreshes the map

o

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Penso che uno di questi funzionerà, ma so che a volte in ArcMap devo chiudere manualmente la tabella degli attributi e riaprirla per vedere alcune modifiche. Non sono sicuro se la chiusura e l'apertura della tabella possano essere eseguite con ArcPy, ma sarebbe anche un'opzione.


Grazie, Cody, sfortunatamente, niente di tutto questo funziona. Chiudere e aprire manualmente la tabella degli attributi fa il trucco, tuttavia sto cercando qualcosa che lo farebbe a livello di programmazione. L'apertura e la chiusura della tabella degli attributi non è disponibile neanche con Python.
Alex Tereshenkov,

Nessuno di questi è progettato per aggiornare la tabella degli attributi.
Radar

1

Questo funziona:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
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.