Atualizando a tabela de atributos abertos no ArcMap usando o ArcPy em vez do ArcObjects?

11

Estou executando a ferramenta Calcular campo GP do arcpy no ArcMap. Quando um valor de linha é atualizado, ele não aparece até que eu use a ferramenta Recarregar cache (Opções da tabela> Recarregar cache). Como atualizo a tabela de atributos automaticamente sem usar o ArcObjects?

Eu tentei atualizar a consulta de definição como @ blah238 sugeriu Usando python, como você "recarrega o cache" de uma Tabela de Atributos aberta , mas isso não ajuda. Redefinir a fonte de dados não é uma opção, porque a classe de recurso pode estar na sessão de edição e não quero perder a conexão com os dados de origem.

Alex Tereshenkov
fonte
Você está usando o ArcGIS 10.1? Se sim, você está usando um suplemento Python ou uma ferramenta de script Python para executar o campo Calcular?
PolyGeo
1
Isso realmente importa? Estou chamando a ferramenta Calcular campo GP a partir de um suplemento Python, mas o mesmo é observado ao executar a ferramenta GP na janela Python.
Alex Tereshenkov
1
Sempre acho que, se vou tentar reproduzir um problema, a maneira mais provável de ver isso é se eu fizer exatamente (ou o mais perto que puder) os mesmos passos na mesma configuração que foi. visto antes.
PolyGeo

Respostas:

4

Você parece estar atingindo uma limitação do ArcPy, na ausência de ArcObjects.

As limitações do ArcPy.mapping foram amplamente descritas aqui como:

O Arcpy.mapping não substitui o ArcObjects, mas uma alternativa para os diferentes cenários que ele suporta. O ArcObjects ainda é necessário para o desenvolvimento de detalhes mais refinados e a personalização de aplicativos, enquanto o arcpy.mapping é destinado a automatizar o conteúdo de documentos de mapas e arquivos de camadas existentes.

Se a outra sugestão de @ blah238 de usar o ArcObjects do ArcPy não for uma opção para você, talvez seja melhor enviar uma idéia do ArcGIS para expor essa funcionalidade ao ArcPy. Se você postar um link para uma idéia do ArcGIS aqui, ficarei feliz em votar nela.

PolyGeo
fonte
Graças à PolyGeo, pena que não possamos encontrar uma maneira de atualizar a tabela de atributos ao calcular valores de campo fora da sessão de edição.
Alex Tereshenkov
1
Você pode enviar uma solicitação de aprimoramento ao suporte técnico da ESRI. Solicitei a capacidade de ter apenas um botão, opção de menu ou tecla F para atualizar a tabela para mostrar alterações sem fechar e abrir manualmente. Foi-me dito que a tabela deveria ser atualizada por si própria e o assunto foi encerrado por não ser reproduzível localmente. Geralmente eles são úteis. Tive a impressão de que eles nem sequer estão cientes das limitações.
johns
Eu recomendo fazer as duas opções acima, mas o ArcGIS Ideas permite monitorar a popularidade e o progresso da implementação com muito mais facilidade do que o suporte local aqui.
PolyGeo
1
@ johns, você sabe que não precisa fechar e abrir a tabela de atributos para atualizá-la? A maneira atual de fazer isso é clicar no botão Opções da tabela> Recarregar cache. Outra coisa que funciona é executar a operação Calcular Campo no modo de edição, e os valores nas tabelas de atributos são atualizados imediatamente.
Alex Tereshenkov
1
@ Alex, obrigado pela sugestão; isso me fez voltar a testar o problema. Eu usei o cache de recarga, mas ele falhou / falha quando adicionei polígonos no modo de edição na exibição de layout usando um suplemento para obter a extensão do layout. Quando na exibição de dados e eu uso o mesmo suplemento, o cache de recarga funciona. Então, de alguma forma, envolve a exibição do layout.
johns
3

Isso pode ou não ser útil para o seu fluxo de trabalho específico. Descobri que, se você alterar a seleção em sua camada, a tabela de atributos também será atualizada.

Então eu costumo usar

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

É claro que se você realmente selecionou algo que não deseja perder de vista, isso não é bom. Nesse caso, você pode selecionar da camada em que o OID está na lista de OIDs dos recursos selecionados no momento (basicamente altere a seleção para o que já estiver selecionado no momento). Isso pode levar muito tempo para ser praticamente, nunca tentei em um cenário da vida real.

Patrick
fonte
1

Você tentou:

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

ou

arcpy.RefreshActiveView() # Refreshes the map

ou

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

Acho que um deles funcionará, mas sei que algumas vezes no ArcMap eu preciso fechar manualmente a tabela de atributos e reabri-la para ver algumas edições. Não tenho certeza se o fechamento e a abertura da tabela pode ser feito com o ArcPy, mas isso também seria uma opção.

Cody Brown
fonte
Thansk, Cody, infelizmente, nada disso funciona. Fechar e abrir a tabela de atributos manualmente faz o truque, no entanto, estou procurando por algo que faria isso programaticamente. A tabela de atributos de abertura e fechamento também não está disponível no Python.
Alex Tereshenkov
Nenhum deles foi projetado para atualizar a tabela de atributos.
Radar
1

Isso funciona:

    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()
Eddy Opperdoes
fonte