Reordenando campos permanentemente usando a ferramenta ArcGIS Make Query Table?

15

Nos campos Resposta à reordenação (permanentemente) no geodatabase do arquivo usando o ArcGIS Desktop? foi declarado que a ferramenta Criar tabela de consulta poderia ser usada para reordenar campos nas tabelas e nas classes de recurso permanentemente.

No entanto, quando abro a caixa de diálogo para essa ferramenta, não consigo ver nenhum lugar que permita reordenar os campos. Tudo o que vejo é que os campos podem ser executados ou descartados usando caixas de seleção, mas na mesma ordem.

Supondo que é possível que alguém possa descrever as etapas com mais detalhes, por favor?

Caixa de diálogo Criar ferramenta de consulta

PolyGeo
fonte

Respostas:

13

Eu descobri como fazer isso usando a ferramenta Criar tabela de consulta , Copiar como snippet do Python , a janela Python e a ferramenta Recursos de cópia .

Depois de executar a ferramenta Criar tabela de consulta para acessar apenas os campos que eu queria que aparecessem na saída, pude copiar como Python Snippet esse código da seção Geoprocessamento | Resultados na janela Python do ArcMap.

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.CODE #;schools.NAME #;schools.TYPE #;schools.Y11STUDENT #;schools.Y12STUDENT #;schools.COORDGEOCO #;schools.ID #","#")

e edite para se tornar:

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable2","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.Y12STUDENT #;schools.Y11STUDENT #;schools.NAME #","#")

Observe que o novo QueryTable2 mantém o campo Shape (para que eu possa copiá-lo) e reordenei os campos NAME, YR11STUDENT e YR12STUDENT. Também aproveitei a oportunidade para eliminar mais alguns campos.

A última etapa é usar a ferramenta Copiar recursos no QueryTable2, que fiz por meio de seu diálogo de ferramenta para criar uma nova classe de recurso com os campos reordenados permanentemente.

PolyGeo
fonte
2
Nota: você também pode usar o MakeQueryTable para alterar os nomes dos seus campos, inserindo uma lista de listas de nomes e aliases de campos ([[nomedocampo1, alias1], [nomedocampo2, alias2] ...])
ndimhypervol
1
A mesma funcionalidade é exposta quando você executa a classe Feature para a classe Feature e, em seguida, Copy As Python Snippet.
Alex Tereshenkov
2

Com a ferramenta Mesclar , você pode reordenar facilmente os campos permanentemente. Funciona com tabelas e classes de recursos. A reordenação pode ser feita por meio de script python e até com a caixa de diálogo Ferramenta (removendo um campo e recolocando-o na caixa de diálogo). Embora reordenar por meio do diálogo não seja uma abordagem perfeita.

Recomenda-se usar a ferramenta Mesclar uma vez e, em seguida, usar Copiar como trecho de Python e, em seguida, alterar manualmente as ordens dos campos e colar o código python nas janelas python.

Aqui está um script python que usa a Merge Tool para reordenar campos (copiado daqui )

import arcpy

def reorder_fields(table, out_table, field_order, add_missing=True):
    """ 
    Reorders fields in input featureclass/table
    :table:         input table (fc, table, layer, etc)
    :out_table:     output table (fc, table, layer, etc)
    :field_order:   order of fields (objectid, shape not necessary)
    :add_missing:   add missing fields to end if True (leave out if False)
    -> path to output table
    """
    existing_fields = arcpy.ListFields(table)
    existing_field_names = [field.name for field in existing_fields]

    existing_mapping = arcpy.FieldMappings()
    existing_mapping.addTable(table)

    new_mapping = arcpy.FieldMappings()

    def add_mapping(field_name):
        mapping_index = existing_mapping.findFieldMapIndex(field_name)

        # required fields (OBJECTID, etc) will not be in existing mappings
        # they are added automatically
        if mapping_index != -1:
            field_map = existing_mapping.fieldMappings[mapping_index]
            new_mapping.addFieldMap(field_map)

    # add user fields from field_order
    for field_name in field_order:
        if field_name not in existing_field_names:
            raise Exception("Field: {0} not in {1}".format(field_name, table))

        add_mapping(field_name)

    # add missing fields at end
    if add_missing:
        missing_fields = [f for f in existing_field_names if f not in field_order]
        for field_name in missing_fields:
            add_mapping(field_name)

    # use merge with single input just to use new field_mappings
    arcpy.Merge_management(table, out_table, new_mapping)
    return out_table

USO:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)
Farid Cheraghi
fonte
Você seria capaz de listar as etapas precisas que você usa para fazer isso na caixa de diálogo da ferramenta, por favor? No meu teste 10.3.1, agora, parece que o painel de mapeamento de campo não permite o pedido novamente. Além disso, acho que essa resposta será melhor colocada em outra pergunta ( gis.stackexchange.com/questions/32119/… ), porque esta se relaciona especificamente ao uso da ferramenta Criar tabela de consultas.
PolyGeo
Sim, notei isso no título da sua pergunta. Mas esta postagem pode favorecer futuros visitantes que precisam apenas reordenar campos, da maneira mais fácil.
Farid Cheraghi
A reordenação pode ser feita removendo o campo a e adicionando-o novamente na caixa de diálogo. Não é uma abordagem perfeita.
Farid Cheraghi
1
Votei nesta resposta na outra pergunta em que acho que agora é a melhor resposta, mas como é uma "resposta duplicada" e não uma resposta direta à pergunta feita aqui, não acho que uma segunda votação seja apropriada.
PolyGeo
@ FaridCher, obrigado por compartilhar o código. Só era necessário reordenar os campos muito rapidamente no Python, e funcionou muito bem. Impressionante.
Alex Tereshenkov
1

Depois de ler isso Alterando a ordem dos atributos em uma tabela e tentando reorganizar a ordem dos campos, encontrei esta solução simples no ArcMap 10,1 ...

  1. Clique com o botão direito do mouse no recurso que você deseja alterar no índice
  2. clique em Propriedades
  3. clique na guia Campos
  4. clique em um campo
  5. clique na seta "subir" ou "descer"
  6. Aplicar, OK

insira a descrição da imagem aqui

KonstaNtie
fonte
3
Boa tentativa. Infelizmente, isso se aplica apenas à camada que você adicionou ao documento do mapa. A classe do recurso ainda terá os campos na ordem definida. Tecnicamente falando, não há uma "ordem" de campos nos bancos de dados, mas como usuário final, você pode querer adicionar uma classe de recurso a um documento de mapa e abrir uma tabela de atributos. Consulte os campos relevantes para seu pedido.
Alex Tereshenkov
1

Eu tenho um método de fazê-lo completamente no Model Builder de uma maneira relativamente robusta. É um pouco tedioso de configurar, mas pelo menos pode ser inserido como parte de uma análise maior do construtor de modelos:

Ferramenta Dissolver - ObjectID como o campo dissolver. Adicione os campos restantes (Estatística) na ordem desejada e escolha a opção (Primeiro) fora do menu suspenso Tipo Estatístico. No exemplo abaixo, movi o campo SaltMarsh_Pct para cima na lista de campos para a posição 6.

Dissolver modelo com campos reordenados

Geralmente copio os resultados e renomeio cada campo (a cópia é funcionalmente redundante e a renomeação também pode ser feita lá, mas é esquisita)

Use a ferramenta Alterar campo para renomear cada campo

Alterar os nomes dos campos de volta ao original (removendo PRIMEIRO)

Todos juntos em um modelo, fica assim:

Modelo de exemplo para reordenar

Robbie
fonte