データ(shp、gdb)のフィールドを永続的に並べ替える


24

永続的に並べ替えたいフィールドを持つシェープファイルまたはジオデータベースフィーチャクラスがある場合、このタスクをすばやく完了するのに役立つツール、スクリプト、またはユーティリティはありますか?

一般に、新しいフィールドを作成し、古い値を入力してから古いフィールドを削除する必要があることを知っています。これに役立つ何かが既にそこに作成されていることを願っています。FMEまたは別のETLツールを使用できないと仮定した場合、次に最適な提案は何ですか?

これはビューレベルの変更(つまり、フィールドを順番にドラッグ/ドロップする)ではなく、新しいシェープファイルまたはフィーチャクラスに書き出します。ありがとう。


信じがたいですが、これを行う方法が見つかりません。フィールドを並べ替える必要があるユースケースは何ですか?ArcMapのレイヤープロパティの[フィールド]タブでフィールドを並べ替えるのは解決策ではありませんか?
デレクスイングリー

2
フィールドの並べ替えは、データがArcMapで使用されないためですが、1)シェープファイルを使用し、2)クライアント側での並べ替えを許可しない、3)クライアントがキー属性は「識別」ツリーの上部に表示されます。
ライアンダルトン

以前に削除した回答を編集しました。うまくいけば、あなたはコマンドラインを怖がらない;)。
デレクスイングリー


2
@ SaultDon-これは同じ質問ではありません。RECORDS(行)をソートしたい質問を参照しましたが、FIELDS(列)をソートしたいです。
ライアンダルトン

回答:


13

ツールのフィールドマップセクションでフィールドを並べ替えることにより、フィーチャクラスからフィーチャクラスでこれを実行できると確信しています。

編集:FC2FCはこれを行いませんが...救助に。

ogr2ogrでこれができることを確認しました。-selectスイッチでフィールド名の順序を指定します。たとえば、「Name」と「FolderPath」の2つのフィールドを持つシェープファイルが(この順序で)あるが、最初に「FolderPath」を持つ新しいシェープファイルが必要な場合は、次のようにします。

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

2
それは私が望んでいたほどユーザーフレンドリーなオプションではありませんでしたが、間違いなくトリックを行います。入力の作成に役立つArcGIS Pythonスクリプトを作成しました。ユーザーは-select "field1、field2、etc"オプションを含めるだけです。resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…から
RyanDalton

ドメインを持つSDEにフィーチャクラスがあります。これは関連するドメインを保持しますか?
MjonesGEO

@joebobいや 知る限り、ogrはSDE GDBのデータセットをサポートせず、ドメインもサポートしません。
デレクスイングリー14年

おかげで、私はXRayを使用したばかりで、ドメインをSDEに保持したままフィールドを並べ替えたり置換したりできます。
MjonesGEO


7

QGIS「テーブルマネージャー」プラグインは、コマンドラインを必要とせずにこのタスクを簡単に実行する機能も備えています。


6

QGISでは、処理ツールボックス(Ctl + Alt + T)を使用して、QGISジオアルゴリズム>ベクターテーブルツール>リファクタリングフィールドに移動できます。

そこから、テーブル構造を編集するためのすべてのツールを使用できます。

ここに画像の説明を入力してください


4

X線アークマップアドインには、Geodatabes形式のフィールドを並べ替えるツールがありますX線フィールドの並べ替えツールはこちら


これは非常にうまく機能します。SDEを再注文する場合、ドメインをフィールドに保持します。素晴らしい提案!!
MjonesGEO 14年

3

参照用:MapInfoはそのまま使用することもできます。DBFを開いて、フィールドを永久に並べ替えるだけです。http://www.dbf-editor.comも同様です(40ドル)。他のDBFエディターもおそらくそれを行うことができます。


この行では、.dbfファイル形式の制限に耐える限りinfolibもおそらく機能するはずです(ascii(csv)に変換、適切に再配置、infoまたはdbfに再変換)。
マットウィルキー

CSV形式の制限に耐えることを意味しますか?DBFは、この質問の出発点です...
Uffe Kousgaard

csvにはフィールド名の長さやレコード値の長さに制限はなく、開始点はファイルgdbであると特に考えて、dbfの制限を意味しましたが、QIを読み直すとタイトルに「shp」と表示されます。だから、すべての周りの制限
;

3

私は同様の問題を抱えており、すでにQGISを持っている場合、データフィールドを永続的に並べ替える最速の方法は、以前に提案されたように「テーブルマネージャー」プラグインを使用することです。

以下のページで説明されているように、プラグインのインストールは簡単で、ユーザーフレンドリーです。

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

特定の順序で属性を移動し、フィールドの名前を変更し、新しいフィールドを挿入して複製することができます。また、元のファイルを保存することも、名前を変更して元のファイルとは異なる名前で保存することもできます。

ここに画像の説明を入力してください

これは、属性テーブルの管理の問題をすばやく簡単に解決する方法であり、特に関連する多数の属性を持つファイルの場合に強くお勧めします。


3

そうするための最良の方法は、フィールドマッピングを使用することです。私は何年もの間、ESRIソフトウェアのこの機能に苦労してきましたが、ついにこのソリューションに満足しています。基本的に、arcpy.FieldMappingsを使用して永続的に並べ替えられたフィールドでフィーチャクラスのコピーを作成できます。データもすべて引き継がれます。スクリプトが完成したら、古いフィーチャクラスをmyFeatureClass_oldに、新しいフィーチャクラスをmyFeatureClassに変更するだけです!

スクリプトは次のとおりです。非常に簡単です。

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

フィーチャクラスからフィーチャクラスは、GPツールフィールドマッピングセクションを使用して10.5でこれを実行できるようになりました。

ここに画像の説明を入力してください


2

MakeQueryTableを使用すると、テーブルまたはFCのフィールドの順序を定義できます(ジオデータベースのみ)。フィールドを指定する順序は、出力の順序です。このツールは使いにくいと思います。YMMV

Arctoolbox、データ管理ツール、レイヤー、テーブルビュー、クエリテーブル


2

フィーチャクラスを空のパーソナルジオデータベースにエクスポートし(ドラッグアンドドロップが最速です)、Accessで.mdbを開き、デザインビューでフィールドの順序を変更し、保存してから、ArcMap / Catalogをシェイプまたはファイルジオデータベースにコピーします。

同じ方法でフィールドの名前を変更することもできます。

ただし、コピーでのみ機能するため、すべてを台無しにするのは簡単です。(Karey Jackが別の回答で指摘しているように、Esri は.mdbへの直接アクセスを推奨していません)。安全のため、で始まるすべてのテーブルとGDB_で終わるテーブルはすべて無視してください_Shape_Index


1

OGR2OGRを試してください。SQLクエリを渡して、必要な順序でフィールドを配置できます。

ogr2ogr outdataset indataset -sql「src_field1 AS dst_field1、src_field2 AS dst_field2 FROM sourcelayerを選択してください」

これをテストしたところ、正常に動作しました!

参考までに、OGRをインストールする最も簡単な方法はFWTools使用することです。


1

MS Accessで .mdbファイルを開き、「デザインビュー」でドラッグアンドドロップを使用してフィールドの順序を変更します。

ESRIはAccess ESRIリンクのデータベースの編集を推奨していませんが


2
私たちのサイト、カレイへようこそ!これは、Matt Wilkieがこのスレッドで18か月前に与えた同じ回答ではありませんか(gis.stackexchange.com/a/5879)?
whuber

0

今回のパーティーには少し遅れましたが、ESRI Geodatabase Diagrammerについて誰も言及していないことに驚いています。

ジオデータベースとファイルのXML構造を編集するためにESRIが提供するリソース。私が考える限り、デザインが完璧でなければならない場所で作業している場合、それは不可欠です(長期プロジェクト)。単純なミスを犯した後、ファイルを継続的に再作成する必要がなくなります。


1
これはデータベースの再編成ではなく、データをエクスポートするために必要であるというコメントを(質問自体に)見ましたか?
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.