Переупорядочивать поля постоянно с помощью инструмента ArcGIS Make Query Table?


15

В полях Ответ на Переупорядочение (навсегда) в файловой базе геоданных с использованием ArcGIS Desktop? было указано, что инструмент Make Query Table можно использовать для постоянного переупорядочения полей в таблицах и классах объектов.

Однако, когда я открываю диалоговое окно для этого инструмента, я не вижу нигде, где можно изменить порядок полей. Все, что я вижу, это то, что поля можно переносить или удалять с помощью флажков, но в том же порядке.

Предполагая, что это возможно, может кто-нибудь описать шаги более подробно, пожалуйста?

Диалог инструмента Создать таблицу запросов

Ответы:


13

Я понял, как это сделать, используя инструмент Make Query Table , Copy As Python Snippet , окно Python и инструмент Copy Features .

После запуска инструмента Make Query Table, который просматривал только те поля, которые я хотел отобразить в выводе, я смог скопировать этот фрагмент из Python из Geoprocessing | Окно результатов в окне Python 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 #","#")

и отредактируйте это, чтобы стать:

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

Обратите внимание, что новый QueryTable2 сохраняет поле Shape (так что я могу его CopyFeatures), и я изменил порядок полей NAME, YR11STUDENT и YR12STUDENT. Я также использовал возможность пропустить еще несколько полей.

Последний шаг - использовать инструмент «Копировать объекты» в QueryTable2, который я сделал через диалоговое окно инструментов, чтобы создать новый класс пространственных объектов с постоянным упорядочением полей.


2
Примечание: вы также можете использовать MakeQueryTable для изменения имен ваших полей, введя список списков имен и псевдонимов полей ([[fieldname1, alias1], [fieldname2, alias2] ...])
ndimhypervol

1
Та же функциональность предоставляется, когда вы запускаете класс Feature в классе Feature, а затем копируете как фрагмент Python.
Алекс Терешенков

2

С помощью Merge Tool вы можете легко изменить порядок полей. Работает с таблицами и классами пространственных объектов. Изменение порядка можно выполнить с помощью скрипта Python и даже с помощью диалогового окна «Инструмент» (удалив поле и повторно добавив его в диалоговое окно). Хотя изменение порядка в диалоге не идеальный подход.

Рекомендуется один раз использовать инструмент «Слияние», затем использовать « Копировать как Python Snippet», затем вручную изменять порядок полей, а затем вставлять код Python в окна Python.

Вот скрипт Python, который использует инструмент Merge для изменения порядка полей (скопировано здесь )

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

ИСПОЛЬЗОВАНИЕ:

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

Не могли бы вы перечислить точные шаги, которые вы используете для этого, через диалог инструментов, пожалуйста? Из моего теста 10.3.1 только сейчас выглядит, что панель отображения полей не позволяет переупорядочивать. Кроме того, я думаю, что этот ответ будет лучше размещен на другом вопросе ( gis.stackexchange.com/questions/32119/… ), поскольку этот вопрос конкретно относится к использованию инструмента Make Query Table.
PolyGeo

Да, я заметил это в названии вашего вопроса. Но этот пост может понравиться будущим посетителям, которым нужно всего лишь изменить порядок полей.
Фарид Чераги

Изменение порядка можно выполнить, удалив поле и повторно добавив его в диалоговом окне. Не идеальный подход, хотя.
Фарид Чераги

1
Я проголосовал за этот ответ по другому вопросу, где, по моему мнению, сейчас это лучший ответ, но поскольку это «дублирующий ответ», а не прямой ответ на заданный здесь вопрос, я не думаю, что второе голосование будет уместным.
PolyGeo

@FaridCher, спасибо, что поделились кодом. Просто нужно было очень быстро переупорядочить поля в Python, и это прекрасно работало. Потрясающие.
Алекс Терешенков

1

Прочитав это Изменяя порядок атрибутов в таблице и пытаясь изменить порядок полей, я нашел это простое решение в ArcMap 10,1 ...

  1. Щелкните правой кнопкой мыши на функцию, которую вы хотите изменить в оглавлении
  2. нажмите Свойства
  3. нажмите вкладку Поля
  4. нажмите на поле
  5. нажмите стрелку «двигаться вверх» или «двигаться вниз»
  6. Применить, ОК

введите описание изображения здесь


3
Хорошая попытка. Но, к сожалению, это относится только к слою, который вы добавили в документ карты. Класс объектов по-прежнему будет иметь поля в определенном порядке. Технически говоря, в базах данных нет «порядка» полей, но как конечный пользователь вы можете захотеть иметь возможность при добавлении класса объектов в документ карты и открытии таблицы атрибутов просматривать поля в соответствующем порядке.
Алексей Терешенков

1

У меня есть метод сделать это полностью в конструкторе моделей относительно надежным способом. Это немного утомительно, но, по крайней мере, его можно вставить как часть более крупного анализа модели:

Инструмент растворения - ObjectID как поле растворения. Добавьте оставшиеся поля (Статистика) в нужном порядке и выберите вариант (Первый) из выпадающего списка Статический тип. В приведенном ниже примере я переместил поле SaltMarsh_Pct вверх по форме вниз в списке полей в позицию 6.

Растворять модель с переупорядоченными полями

Я обычно копирую результаты, затем переименовываю каждое поле (копия функционально избыточна, и переименование может быть выполнено и там, но оно нестабильно)

Используйте инструмент «Изменить поле», чтобы переименовать каждое поле.

Изменить имена полей обратно на оригинал (удаляя ПЕРВЫЙ)

Все вместе в модели это выглядит так:

Пример модели для изменения порядка

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.