Постійне переупорядкування полів за допомогою інструменту ArcGIS Make Query Table?


15

У полі відповіді на упорядкування (постійно) у базі даних геоданих за допомогою ArcGIS Desktop? було зазначено, що інструмент Make Query Table можна використовувати для переупорядкування полів у таблицях та класах функцій постійно.

Однак, коли я відкриваю діалогове вікно цього інструменту, я не бачу ніде, що дозволяє переупорядкувати поля. Все, що я бачу, - це те, що поля можна переносити або видаляти за допомогою прапорців, але в тому ж порядку.

Припустивши, що можливо, може хтось описати кроки більш детально?

Зробіть діалогове вікно інструмента «Таблиця запитів»

Відповіді:


13

Я зрозумів, як це зробити, використовуючи інструмент « Зробити таблицю запитів », « Копіювати як фрагмент Python», вікно « Пітон» та інструмент « Копіювати функції ».

Після запуску інструменту Make Query Table для проходження лише тих полів, які я хотів з'явитись у висновку, я зміг скопіювати як фрагмент Python This code з 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 (тому я можу копіювати його функції), і я упорядкував поля NAME, YR11STUDENT & YR12STUDENT. Я також використав можливість викинути ще кілька полів.

Останнім кроком є ​​використання інструмента «Копіювати функції» на QueryTable2, який я зробив за допомогою діалогового вікна інструменту, щоб створити новий клас функцій з полями, упорядкованими постійно.


2
Примітка. Ви також можете використовувати MakeQueryTable для зміни назв ваших полів, ввівши список списків імен полів і псевдонімів ([[ім'я поля1, псевдонім1], [ім'я поля2, псевдонім2] ...])
ndimhypervol

1
Ця ж функціональність піддається, коли ви запускаєте клас Feature до класу Feature, а потім Copy As Python Snippet.
Олексій Терешенков

2

За допомогою інструмента злиття ви можете легко назавжди упорядкувати поля. Він працює з таблицями та функціональними класами. Переупорядкування може бути виконано за допомогою сценарію python і навіть за допомогою діалогового вікна інструмента (Видалення поля та повторне додавання його у діалоговому вікні). Хоча переупорядкування через діалог не є ідеальним підходом.

Рекомендується використовувати інструмент Merge один раз, а потім скопіювати Copy As Python Snippet, а потім вручну змінити порядки полів, а потім вставити код python у вікна python.

Ось сценарій python, який використовує інструмент об’єднання для впорядкування полів (скопійовано звідси )

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/… ), оскільки ця спеціально стосується використання інструменту «Зробити таблицю запитів».
PolyGeo

Так, я помітив це у вашому запитанні. Але ця публікація може віддавати перевагу майбутнім відвідувачам, яким потрібно лише переупорядкувати поля, найпростіший спосіб.
Фарид Черагі

Переупорядкування можна виконати, видаливши поле та повторно додавши його в діалоговому вікні. Не ідеальний підхід, хоча.
Фарид Черагі

1
Я проголосував за цю відповідь на інше питання, де я вважаю, що зараз це найкраща відповідь, але оскільки це "дублююча відповідь", а не пряма відповідь на поставлене тут питання, я не думаю, що другий голос був би доцільним.
PolyGeo

@FaridCher, дякую за те, що поділився кодом. Просто потрібно було швидко переупорядкувати поля в Python, і це спрацювало чудово. Дивовижно.
Олексій Терешенков

1

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

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

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


3
Гарна спроба. Але, на жаль, це стосується лише шару, який ви додали в документ про карту. Клас функцій все ще матиме поля у визначеному порядку. Технічно кажучи, немає "порядку" полів у базах даних, але, як кінцевий користувач, ви, можливо, захочете мати можливість додавати клас об’єктів у документ із картою та відкривати таблицю атрибутів, дивіться поля у відповідному для вас порядку.
Олексій Терешенков

1

У мене є метод зробити це повністю в модельєрі досить відносно. Налаштувати трохи нудно, але принаймні його можна вставити як частину більшого аналізу модель-конструктора:

Інструмент розчинення - ObjectID як поле для розчинення. Додайте решту полів (Статистика) у бажаному порядку та виберіть варіант (Перший) із випадаючого списку Статистичний тип. У наведеному нижче прикладі я перемістив поле SaltMarsh_Pct вгору вниз у списку полів до позиції 6.

Розпустіть модель з упорядкованими полями

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

Використовуйте інструмент Alter Field для перейменування кожного поля

Змінити імена полів назад до оригіналу (видалення ПЕРШЕ)

Все разом у моделі виглядає приблизно так:

Приклад моделі для впорядкування

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.