Dauerhafte Neuordnung von Feldern mit dem ArcGIS-Werkzeug "Abfragetabelle erstellen"?


15

In den Feldern Antwort auf Neuanordnen (dauerhaft) in File-Geodatabase mit ArcGIS Desktop? Es wurde angegeben, dass das Werkzeug Abfragetabelle erstellen verwendet werden kann, um Felder in Tabellen und Feature-Classes dauerhaft neu anzuordnen.

Wenn ich jedoch den Dialog für dieses Tool öffne, sehe ich nirgendwo etwas, das die Neuordnung von Feldern ermöglicht. Alles, was ich sehen kann, ist, dass Felder mit Hilfe von Kontrollkästchen in derselben Reihenfolge übertragen oder gelöscht werden können.

Unter der Annahme, dass es möglich ist, kann jemand die Schritte genauer beschreiben, bitte?

Dialogfeld "Abfragetabelle erstellen"

Antworten:


13

Ich fand heraus , wie Sie dies tun , indem Sie die Verwendung von Abfragetabelle Werkzeug Kopieren als Python - Snippet , das Python - Fenster und das Kopierfunktionen Werkzeug.

Nachdem ich das Werkzeug Abfragetabelle erstellen ausgeführt habe, um nur die Felder durchzugehen, die in der Ausgabe angezeigt werden sollen, konnte ich diesen Code aus der Geoverarbeitung | als Python-Snippet kopieren Ergebnisfenster in das Python-Fenster von 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 #","#")

und bearbeite es, um zu werden:

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

Beachten Sie, dass die neue QueryTable2 das Shape-Feld beibehält (damit ich CopyFeatures verwenden kann) und die Felder NAME, YR11STUDENT und YR12STUDENT neu angeordnet wurden. Ich habe auch die Gelegenheit genutzt, noch ein paar Felder auszublenden.

Der letzte Schritt besteht darin, das Werkzeug Features kopieren in QueryTable2 zu verwenden, das ich über das Werkzeugdialogfeld ausgeführt habe, um eine neue Feature-Class mit den Feldern zu erstellen, die permanent neu angeordnet werden.


2
Hinweis: Sie können auch MakeQueryTable verwenden die Namen Ihrer Felder zu ändern , indem Sie eine Liste von Listen von Feldnamen und Aliase Eingeben ([[fieldname1, alias1], [FieldName2, alias2] ...])
ndimhypervol

1
Dieselbe Funktionalität wird bereitgestellt, wenn Sie Feature-Class für Feature-Class ausführen und dann Als Python-Snippet kopieren.
Alex Tereshenkov

2

Mit dem Merge-Tool können Sie Felder einfach dauerhaft neu anordnen. Es funktioniert mit Tabellen und Feature-Classes. Die Neuordnung kann über ein Python-Skript und sogar über das Werkzeug-Dialogfeld erfolgen (indem ein Feld entfernt und im Dialogfeld erneut hinzugefügt wird). Eine Nachbestellung über den Dialog ist jedoch kein perfekter Ansatz.

Es wird empfohlen, das Zusammenführungswerkzeug einmal zu verwenden und dann Als Python-Snippet kopieren zu verwenden und dann die Feldreihenfolge manuell zu ändern und den Python-Code in Python-Fenster einzufügen.

Hier ist ein Python-Skript, das das Merge-Tool verwendet, um Felder neu anzuordnen (von hier kopiert ).

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

VERWENDUNG:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)

Könnten Sie bitte die genauen Schritte, die Sie dazu ausführen, über den Werkzeugdialog auflisten? Ab meinem 10.3.1-Test sieht es so aus, als ob das Feldzuordnungsfenster keine Nachbestellung zulässt. Ich denke auch, dass diese Antwort besser auf eine andere Frage ( gis.stackexchange.com/questions/32119/… ) gestellt werden kann, da sich diese speziell auf die Verwendung des Werkzeugs Abfragetabelle erstellen bezieht.
PolyGeo

Ja, das ist mir in Ihrem Fragentitel aufgefallen. In diesem Beitrag werden jedoch möglicherweise zukünftige Besucher bevorzugt, die nur die Felder neu anordnen müssen. Dies ist der einfachste Weg.
Farid Cheraghi

Sie können die Reihenfolge ändern, indem Sie ein Feld entfernen und es im Dialogfeld erneut hinzufügen. Kein perfekter Ansatz.
Farid Cheraghi

1
Ich habe für diese Antwort bei der anderen Frage gestimmt, bei der ich denke, dass dies jetzt die beste Antwort ist. Da es sich jedoch um eine "doppelte Antwort" und keine direkte Antwort auf die hier gestellte Frage handelt, halte ich eine zweite Abstimmung nicht für angemessen.
PolyGeo

@FaridCher, danke, dass du den Code geteilt hast. Ich musste nur die Felder in Python sehr schnell nachbestellen, und es hat großartig funktioniert. Genial.
Alex Tereshenkov

1

Nachdem ich dies gelesen und versucht hatte, die Reihenfolge der Attribute in einer Tabelle zu ändern und die Reihenfolge der Felder neu zu ordnen, fand ich diese einfache Lösung in ArcMap 10,1 ...

  1. Klicken Sie mit der rechten Maustaste auf die Funktion, die Sie im Inhaltsverzeichnis ändern möchten
  2. Klicken Sie auf Eigenschaften
  3. Klicken Sie auf die Registerkarte Felder
  4. Klicken Sie auf ein Feld
  5. Klicken Sie auf den Pfeil "Nach oben" oder "Nach unten"
  6. Übernehmen, OK

Bildbeschreibung hier eingeben


3
Guter Versuch. Dies gilt jedoch leider nur für die Ebene, die Sie dem Kartendokument hinzugefügt haben. In der Feature-Class sind die Felder weiterhin in der definierten Reihenfolge enthalten. Technisch gesehen gibt es keine "Reihenfolge" von Feldern in Datenbanken. Als Endbenutzer möchten Sie jedoch möglicherweise eine Feature-Class in ein Kartendokument einfügen und eine Attributtabelle öffnen, indem Sie die Felder in der für Sie relevanten Reihenfolge anzeigen.
Alex Tereshenkov

1

Ich habe eine Methode, mit der ich es relativ robust vollständig in Model Builder ausführen kann. Das Einrichten ist etwas mühsam, kann aber zumindest als Teil einer größeren Modellbauer-Analyse eingefügt werden:

Löse Werkzeug - ObjectID als auflösen Feld. Fügen Sie die verbleibenden (Statistik-) Felder in der gewünschten Reihenfolge hinzu und wählen Sie die Option (Erste) aus der Dropdown-Liste "Statischer Typ" aus. Im folgenden Beispiel habe ich das Feld SaltMarsh_Pct von oben nach unten in der Liste der Felder auf Position 6 verschoben .

Modell mit neu angeordneten Feldern auflösen

Ich kopiere im Allgemeinen die Ergebnisse und benenne dann jedes Feld um (die Kopie ist funktional redundant und die Umbenennung kann auch dort vorgenommen werden, ist aber schuppig).

Verwenden Sie das Werkzeug "Feld ändern", um jedes Feld umzubenennen

Feldnamen auf das Original zurücksetzen (FIRST entfernen)

Alles in allem sieht es in einem Modell so aus:

Beispielmodell zur Nachbestellung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.