Pemesanan ulang bidang secara permanen menggunakan alat ArcGIS Make Query Table?

15

Dalam bidang Answer to Reordering (permanen) dalam file geodatabase menggunakan ArcGIS Desktop? dinyatakan bahwa alat Make Query Table dapat digunakan untuk memesan ulang bidang dalam tabel dan kelas fitur secara permanen.

Namun, ketika saya membuka dialog untuk alat itu, saya tidak bisa melihat di mana pun yang memungkinkan pemesanan ulang bidang. Yang bisa saya lihat adalah bahwa bidang dapat dilakukan melalui atau dijatuhkan menggunakan kotak centang tetapi dalam urutan yang sama.

Dengan asumsi bahwa mungkin seseorang dapat menjelaskan langkah-langkah tersebut dengan lebih detail, tolong?

Buat dialog alat Tabel Kueri

PolyGeo
sumber

Jawaban:

13

Saya menemukan cara untuk melakukan ini dengan menggunakan alat Make Query Table , Salin Sebagai Potongan Python , jendela Python dan alat Fitur Salin .

Setelah menjalankan alat Make Query Table untuk menarik hanya bidang yang saya ingin muncul dalam output saya bisa Salin Sebagai Python Snippet kode ini dari Geoprocessing | Jendela hasil ke dalam jendela Python dari 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 #","#")

dan edit menjadi:

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

Perhatikan bahwa QueryTable2 baru mempertahankan bidang Bentuk (jadi saya dapat menyalinFiturnya) dan saya telah memesan ulang bidang NAME, YR11STUDENT & YR12STUDENT. Saya juga menggunakan kesempatan untuk keluar beberapa bidang lagi.

Langkah terakhir adalah menggunakan alat Fitur Salin di QueryTable2 yang saya lakukan melalui dialog alat untuk membuat kelas fitur baru dengan bidang yang dipesan ulang secara permanen.

PolyGeo
sumber
2
Catatan: Anda juga dapat menggunakan MakeQueryTable untuk mengubah nama bidang Anda dengan memasukkan daftar daftar nama bidang dan alias ([[fieldname1, alias1], [fieldname2, alias2] ...])
ndimhypervol
1
Fungsionalitas yang sama terekspos ketika Anda menjalankan kelas fitur ke kelas fitur dan kemudian salin sebagai cuplikan Python.
Alex Tereshenkov
2

Dengan Alat Gabung , Anda dapat dengan mudah memesan ulang bidang secara permanen. Ini bekerja dengan tabel dan kelas fitur. Penataan ulang dapat dilakukan melalui skrip python dan bahkan dengan dialog Alat (Dengan menghapus bidang dan menambahkannya kembali dalam dialog). Meskipun pemesanan ulang melalui dialog bukanlah pendekatan yang sempurna.

Dianjurkan untuk menggunakan alat Gabung sekali dan kemudian menggunakan Salin Sebagai Potongan Python dan kemudian secara manual mengubah perintah bidang dan kemudian menempelkan kode python di jendela python.

Berikut ini adalah skrip python yang menggunakan Gabung Alat untuk menyusun ulang bidang (Disalin dari sini )

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

PEMAKAIAN:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)
Farid Cheraghi
sumber
Apakah Anda dapat membuat daftar langkah-langkah tepat yang Anda gunakan untuk melakukan ini melalui dialog alatnya? Dari tes 10.3.1 saya sekarang sepertinya panel pemetaan lapangan tidak memungkinkan pemesanan ulang. Juga, saya pikir jawaban ini akan lebih baik ditempatkan pada pertanyaan lain ( gis.stackexchange.com/questions/32119/… ) karena jawaban ini secara khusus berkaitan dengan penggunaan alat Make Query Table.
PolyGeo
Ya, saya perhatikan itu di judul pertanyaan Anda. Tetapi posting ini mungkin disukai pengunjung masa depan yang hanya perlu menyusun ulang bidang, cara termudah.
Farid Cheraghi
Penataan ulang dapat dilakukan dengan menghapus bidang dan menambahkannya kembali dalam dialog. Bukan pendekatan yang sempurna.
Farid Cheraghi
1
Saya memilih jawaban ini pada pertanyaan lain di mana saya pikir ini adalah jawaban terbaik tetapi karena itu adalah "jawaban duplikat", dan bukan jawaban langsung untuk pertanyaan yang diajukan di sini, saya tidak berpikir suara kedua akan sesuai.
PolyGeo
@FaridCher, terima kasih telah berbagi kodenya. Hanya perlu memesan ulang bidang dengan sangat cepat di Python, dan itu berfungsi dengan baik. Luar biasa.
Alex Tereshenkov
1

Setelah membaca ini Mengubah urutan atribut dalam tabel dan mencoba mengatur ulang urutan bidang, saya menemukan solusi sederhana ini di ArcMap 10,1 ...

  1. Klik kanan pada fitur yang ingin Anda ubah dalam daftar isi
  2. klik Properties
  3. klik tab Fields
  4. klik pada sebuah bidang
  5. klik panah "pindah ke atas" atau "pindah ke bawah"
  6. Berlaku, OK

masukkan deskripsi gambar di sini

KonstaNtie
sumber
3
Usaha yang bagus. Namun sayangnya ini hanya berlaku untuk layer yang telah Anda tambahkan ke dalam dokumen peta. Kelas fitur masih akan memiliki bidang dalam urutan yang ditentukan. Secara teknis, tidak ada "urutan" bidang dalam basis data, tetapi sebagai pengguna akhir Anda mungkin ingin dapat menambahkan kelas fitur ke dalam dokumen peta dan membuka tabel atribut melihat bidang di bidang yang relevan untuk pesanan Anda.
Alex Tereshenkov
1

Saya memiliki metode untuk melakukannya sepenuhnya dalam pembangun model dengan cara yang relatif kuat. Agak membosankan untuk mengatur tetapi setidaknya itu bisa dimasukkan sebagai bagian dari analisis pembangun model yang lebih besar:

Larutkan alat - objectID sebagai larut lapangan. Tambahkan bidang (Statistik) yang tersisa dalam urutan yang diinginkan dan pilih opsi (Pertama) dari drop-down Statstic Type. Pada contoh di bawah ini saya telah memindahkan bidang SaltMarsh_Pct ke atas formulir turun dalam daftar bidang ke posisi 6.

Larutkan Model dengan bidang yang disusun ulang

Saya biasanya menyalin hasilnya kemudian mengganti nama masing-masing bidang (salinan secara fungsional berlebihan dan mengganti nama dapat dilakukan di sana juga tetapi itu bersisik)

Gunakan alat Alter Field untuk mengganti nama setiap bidang

Ubah nama Field kembali ke aslinya (menghapus FIRST)

Semua bersama dalam model terlihat seperti ini:

Contoh model untuk memesan ulang

Robbie
sumber