¿Reordenar los campos de forma permanente utilizando la herramienta ArcGIS Make Query Table?

15

¿En los campos Respuesta a reordenamiento (permanentemente) en la geodatabase de archivos usando ArcGIS Desktop? se indicó que la herramienta Crear tabla de consulta podría usarse para reordenar campos en tablas y clases de entidad de forma permanente.

Sin embargo, cuando abro el cuadro de diálogo para esa herramienta, no puedo ver ningún lugar que permita reordenar los campos. Todo lo que puedo ver es que los campos se pueden pasar o soltar usando casillas de verificación pero en el mismo orden.

Suponiendo que sea posible, ¿alguien puede describir los pasos con más detalle, por favor?

Cuadro de diálogo de la herramienta Crear tabla de consulta

PolyGeo
fuente

Respuestas:

13

Descubrí cómo hacerlo usando la herramienta Crear tabla de consulta , Copiar como fragmento de Python , la ventana de Python y la herramienta Copiar características .

Después de ejecutar la herramienta Crear tabla de consulta para extraer solo los campos que quería que aparecieran en el resultado, pude copiar como fragmento de Python este código desde el geoprocesamiento | Ventana de resultados en la ventana de Python de 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 #","#")

y editarlo para convertirse en:

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 #","#")

Tenga en cuenta que el nuevo QueryTable2 retiene el campo Forma (para que pueda copiarlo) y he reordenado los campos NOMBRE, YR11STUDENT y YR12STUDENT. También aproveché la oportunidad para abandonar algunos campos más.

El último paso es usar la herramienta Copiar características en QueryTable2, que hice a través de su cuadro de diálogo de herramienta para crear una nueva clase de entidad con los campos reordenados permanentemente.

PolyGeo
fuente
2
Nota: también puede usar MakeQueryTable para cambiar los nombres de sus campos ingresando una lista de listas de nombres y alias de campo ([[fieldname1, alias1], [fieldname2, alias2] ...])
ndimhypervol
1
La misma funcionalidad se expone cuando ejecuta la clase de entidad en la clase de entidad y luego copia como fragmento de Python.
Alex Tereshenkov
2

Con la herramienta de combinación , puede reordenar fácilmente los campos de forma permanente. Funciona con tablas y clases de entidad. El reordenamiento se puede hacer a través de la secuencia de comandos de Python e incluso con el cuadro de diálogo Herramienta (al eliminar un campo y volver a agregarlo en el cuadro de diálogo). Aunque reordenar a través del diálogo no es un enfoque perfecto.

Se recomienda usar la herramienta Fusionar una vez y luego usar Copiar como fragmento de Python y luego cambiar manualmente el orden de los campos y luego pegar el código de Python en las ventanas de Python.

Aquí hay una secuencia de comandos de Python que utiliza la herramienta de combinación para reordenar los campos (copiado de aquí )

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
fuente
¿Podría enumerar los pasos precisos que utiliza para hacer esto a través de su diálogo de herramientas, por favor? De mi prueba 10.3.1 justo ahora parece que el panel de mapeo de campo no permite reordenar. Además, creo que esta respuesta se colocará mejor en otra pregunta ( gis.stackexchange.com/questions/32119/… ) porque esta se relaciona específicamente con el uso de la herramienta Crear tabla de consulta.
PolyGeo
Sí, lo noté en el título de tu pregunta. Pero esta publicación puede favorecer a los futuros visitantes que solo necesitan reordenar los campos, la forma más fácil.
Farid Cheraghi
El reordenamiento se puede hacer eliminando el campo a y volviéndolo a agregar en el cuadro de diálogo. Sin embargo, no es un enfoque perfecto.
Farid Cheraghi
1
He votado a favor de esta respuesta en la otra pregunta donde creo que ahora es la mejor respuesta, pero debido a que es una "respuesta duplicada", y no una respuesta directa a la pregunta formulada aquí, no creo que una segunda votación sea apropiada.
PolyGeo
@FaridCher, gracias por compartir el código. Solo necesitaba reordenar los campos muy rápidamente en Python, y funcionó muy bien. Increíble.
Alex Tereshenkov
1

Después de leer esto Alterando el orden de los atributos en una tabla e intentando reorganizar el orden de los campos, encontré esta solución simple en ArcMap 10,1 ...

  1. Haga clic derecho en la función que desea modificar en la tabla de contenido
  2. haga clic en Propiedades
  3. haga clic en la pestaña Campos
  4. haga clic en un campo
  5. haga clic en la flecha "subir" o "bajar"
  6. Aplicar, OK

ingrese la descripción de la imagen aquí

KonstaNtie
fuente
3
Buen intento. Pero desafortunadamente esto se aplica solo a la capa que ha agregado al documento de mapa. La clase de entidad seguirá teniendo los campos en el orden definido. Técnicamente hablando, no existe un "orden" de campos en las bases de datos, pero como usuario final es posible que desee poder agregar una clase de entidad a un documento de mapa y abrir una tabla de atributos para ver los campos en el orden correspondiente.
Alex Tereshenkov
1

Tengo un método para hacerlo completamente dentro del generador de modelos de una manera relativamente robusta. Es un poco tedioso configurarlo, pero al menos se puede insertar como parte de un análisis más grande del generador de modelos:

Disolver herramienta - de objeto como el campo de disolverse. Agregue los campos restantes (Estadísticas) en el orden deseado y elija la opción (Primero) del menú desplegable Tipo estático. En el siguiente ejemplo, he movido el campo SaltMarsh_Pct hacia arriba desde la lista de campos hasta la posición 6.

Disolver modelo con campos reordenados

Generalmente copio los resultados y luego cambio el nombre de cada campo (la copia es funcionalmente redundante y el cambio de nombre también se puede hacer allí, pero es escamoso)

Use la herramienta Alterar campo para cambiar el nombre de cada campo

Alterar los nombres de los campos nuevamente al original (eliminando PRIMERO)

Todos juntos en un modelo se ve así:

Ejemplo de modelo para reordenar

Robbie
fuente