Urutkan ulang bidang secara permanen dalam data (shp, gdb)


24

Jika saya memiliki kelas fitur shapefile atau geodatabase yang memiliki bidang yang ingin saya pesan ulang secara permanen, apakah ada alat, skrip, atau utilitas yang akan membantu saya menyelesaikan tugas ini dengan cepat?

Secara umum saya tahu Anda harus membuat bidang baru, lalu mengisinya dengan nilai-nilai lama, lalu hapus bidang lama. Saya berharap ada sesuatu yang sudah dibuat di luar sana yang akan membantu ini. Dengan asumsi Anda tidak memiliki FME atau alat ETL lain yang tersedia, apa saran terbaik berikutnya?

Ini BUKAN perubahan tingkat tampilan (mis .- seret / letakkan bidang secara berurutan), melainkan tuliskan ke shapefile baru atau kelas feature. Terima kasih.


Saya merasa sulit untuk percaya, tetapi saya tidak dapat menemukan cara untuk melakukan ini. Apa kasus penggunaan Anda karena perlu memesan ulang bidang? Pemesanan ulang bidang pada tab bidang properti lapisan di ArcMap bukan solusi?
Derek Swingley

2
Penyusunan ulang bidang adalah karena data tidak akan digunakan dalam ArcMap, tetapi dengan perangkat lunak pemetaan yang kurang canggih yang 1) menggunakan shapefile dan 2) tidak memungkinkan untuk menyusun ulang pada sisi klien dan 3) klien perlu melihat atribut kunci muncul di bagian atas pohon "identifikasi".
RyanDalton

Baru diedit jawaban saya yang sebelumnya dihapus. Semoga Anda tidak takut dengan baris perintah;).
Derek Swingley


2
@ SaultDon- ini bukan pertanyaan yang sama. Anda mereferensikan pertanyaan yang ingin mengurutkan RECORDS (baris), tapi saya ingin mengurutkan FIELDS (kolom).
RyanDalton

Jawaban:


13

Saya cukup yakin Anda bisa melakukan ini dengan Kelas Fitur ke Kelas Fitur dengan memesan kembali bidang di bagian peta bidang alat.

Sunting: FC2FC tidak melakukan ini tetapi ... ya untuk menyelamatkan.

Saya baru saja mengkonfirmasi bahwa ogr2ogr dapat melakukan ini. Tentukan urutan nama bidang Anda pada sakelar -select. Misalnya, jika saya memiliki shapefile dengan dua bidang, "Nama" dan "FolderPath" (dalam urutan itu), tetapi saya ingin shapefile baru dengan "FolderPath" pertama saya akan melakukan ini:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"

2
Meskipun itu bukan opsi yang ramah pengguna seperti yang saya harapkan, itu pasti melakukan trik. Saya telah membuat skrip python ArcGIS yang membantu membangun input untuk itu, dan pengguna hanya perlu menyertakan opsi "field1, field2, dll". Anda dapat mengunduhnya di resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…
RyanDalton

Saya memiliki kelas fitur di SDE dengan domain. Apakah ini akan menampung domain terkait?
MjonesGEO

@ joebob no. AFAIK, ogr tidak mendukung kumpulan data dari SDE GDB dan juga tidak mendukung domain.
Derek Swingley

Terima kasih, saya hanya menggunakan XRay dan itu bisa mengatur ulang atau mengganti bidang sambil memegang domain mereka di SDE.
MjonesGEO


7

Plugin "Table Manager" QGIS sekarang juga memiliki kemampuan untuk melakukan tugas ini dengan mudah tanpa perlu baris perintah.


6

Di QGIS Anda sekarang dapat menggunakan toolbox pemrosesan (Ctl + Alt + T) dan pergi ke geoalgoritma QGIS> Alat tabel vektor> Bidang refactor.

Dari sana Anda akan memiliki semua alat untuk mengedit struktur tabel Anda.

masukkan deskripsi gambar di sini


4

X-Ray menambahkan arcmap memiliki alat untuk menyusun ulang bidang format Geodatabesx-ray mengatur ulang bidang alat di sini


Ini bekerja dengan sangat baik. Bahkan akan menahan domain Anda di bidang jika Anda memesan ulang SDE. Saran bagus !!
MjonesGEO

3

Untuk referensi: MapInfo juga dapat melakukannya di luar kotak. Buka saja DBF dan susun ulang bidang secara permanen. http://www.dbf-editor.com melakukannya juga ($ 40). Editor DBF lain mungkin dapat melakukannya juga.


di baris ini, infolib mungkin juga berfungsi (konversikan ke ascii (csv) , atur kembali sesuai, konversikan kembali ke info atau dbf), selama Anda bersedia hidup dengan batasan format file .dbf.
matt wilkie

Maksud Anda hidup dengan keterbatasan format CSV? DBF adalah titik awal untuk pertanyaan ini ...
Uffe Kousgaard

Maksud saya batas dbf, berpikir secara spesifik bahwa csv tidak memiliki batasan panjang nama bidang atau panjang nilai catatan, dan titik awal adalah file gdb, tetapi membaca ulang QI lihat "shp" disebutkan dalam judul. Jadi, batasi sekitar ;-)
matt wilkie

3

Saya memiliki masalah serupa, dan cara tercepat untuk menyusun ulang bidang data secara permanen, jika Anda sudah memiliki QGIS, adalah dengan menggunakan plugin 'Table Manager' seperti yang disarankan sebelumnya.

Mudah untuk menginstal plugin dan mudah digunakan, seperti yang dijelaskan pada halaman di bawah ini:

http://www.qgistutorials.com/en/docs/using_plugins.html

Ini memungkinkan Anda untuk memindahkan atribut dalam urutan tertentu, mengganti nama bidang, menyisipkan bidang baru dan mereplikasi mereka. Ini juga memungkinkan Anda untuk menyimpan file asli, atau mengganti nama dan menyimpannya secara berbeda dari aslinya.

masukkan deskripsi gambar di sini

Ini adalah penyelesaian yang cepat dan mudah untuk masalah manajemen tabel atribut saya, dan sangat disarankan, terutama untuk file dengan sejumlah besar atribut yang terkait dengannya.


3

Cara terbaik untuk melakukannya adalah dengan menggunakan Pemetaan Lapangan. Saya telah berjuang dengan fitur perangkat lunak ESRI ini selama bertahun-tahun, tetapi saya akhirnya puas dengan solusi ini. Pada dasarnya, Anda bisa membuat salinan Kelas Fitur Anda dengan bidang yang disusun ulang secara permanen menggunakan arcpy.FieldMappings . Semua data dibawa juga. Setelah skrip selesai, cukup ganti Kelas Fitur lama Anda ke myFeatureClass_old, dan yang baru ke myFeatureClass!

Ini skripnya, sangat mudah:

import arcpy
'''
This is possible in python using FeatureClasstoFeatureClass with Fieldmappings. You can also rename fields at the same time.
So if you have a Feature Class with FIELD3, FIELD2, FIELD1 and you want the result to be FIELD1, FIELD2, FIELD3 then the following code should accomplish this.
'''
arcpy.env.workspace = r"C:\Users\myself\ArcData\my_geodatabase.gdb"
arcpy.env.overwriteOutput = True

input_fpath = "Lakes"

output_dpath = arcpy.env.workspace
output_fname = "Lakes_new"

fms = arcpy.FieldMappings()

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD1")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD2")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD3")
fms.addFieldMap(fm)

arcpy.conversion.FeatureClassToFeatureClass(input_fpath,output_dpath,output_fname,"",fms)

3

Kelas Fitur ke Kelas Fitur sekarang dapat melakukan ini dalam 10,5 menggunakan bagian Pemetaan Bidang Alat GP.

masukkan deskripsi gambar di sini


2

MakeQueryTable akan memungkinkan Anda menentukan urutan bidang Anda untuk tabel atau FC (hanya Geodatabase). Urutan yang Anda tentukan bidang adalah urutan output. Saya menemukan alat ini sulit digunakan. YMMV

Arctoolbox, alat manajemen data, tampilan layer dan tabel, membuat Tabel permintaan


2

Ekspor kelas fitur ke yang kosong geodatabase pribadi (seret dan lepas paling cepat), buka .mdb di Access, susun ulang bidang di Design View , simpan, lalu dengan ArcMap / Katalog salin kembali ke bentuk atau file geodatabase.

Metode yang sama berfungsi untuk mengganti nama bidang.

Berhati-hatilah , hanya bekerja pada salinan, mudah untuk mengacaukan semuanya. (Seperti yang dicatat oleh Karey Jack dalam jawaban lain, Esri tidak menyarankan akses .mdb langsung ). Demi keamanan, abaikan semua tabel yang dimulai dengan GDB_dan juga tabel yang diakhiri _Shape_Index.


1

Coba OGR2OGR. Anda bisa melewati kueri SQL, dan meletakkan bidang dalam urutan yang Anda inginkan.

ogr2ogr outdataset indataset -sql "SELECT src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"

Baru saja menguji ini, dan itu berfungsi dengan baik!

FYI, Cara termudah untuk menginstal OGR adalah melalui FWTools .


1

Buka file .mdb di MS Access dan susun ulang bidang menggunakan seret dan letakkan di 'Design View'

Meskipun ESRI tidak mendukung pengeditan database di tautan Access ESRI


2
Selamat datang di situs kami, Karey! Bukankah ini jawaban yang sama yang diberikan Matt Wilkie di utas ini 18 bulan yang lalu ( gis.stackexchange.com/a/5879 )?
whuber

0

Saya agak terlambat ke pesta yang satu ini, tapi saya terkejut bahwa tidak ada yang menyebutkan ESRI Geodatabase Diagrammer .

Sumber daya yang disediakan oleh ESRI untuk mengedit struktur XML geodatabase dan file Anda. Sejauh yang saya ketahui, sangat penting jika Anda mengerjakan apa pun di mana desain harus sempurna (proyek jangka panjang). Ini akan membuat Anda tidak perlu membuat ulang file terus menerus setelah melakukan kesalahan sederhana.


1
Apakah Anda melihat komentar (untuk pertanyaan itu sendiri) yang menyatakan bahwa ini bukan reorganisasi database, melainkan diperlukan untuk mengekspor data?
whuber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.