ArcGIS Make Query Tableツールを使用して永続的にフィールドを並べ替えますか?


15

回答のArcGIS Desktopを使用してファイルジオデータベース内(永久に)並べ替えフィールド?[クエリテーブルの作成(Make Query Table)]ツールを使用して、テーブルおよびフィーチャクラスのフィールドを永続的に並べ替えることができると述べられました。

ただし、そのツールのダイアログを開くと、フィールドの順序を変更できる場所は表示されません。私が見ることができるのは、チェックボックスを使用してフィールドを同じ順序でキャリーまたはドロップできることです。

可能であれば、誰かがステップをより詳細に説明できますか?

クエリテーブルツールの作成ダイアログ

回答:


13

Make Query Tableツール、Copy As Python SnippetPythonウィンドウCopy Featuresツールを使用して、これを行う方法を見つけました。

[クエリテーブルの作成(Make Query Table)]ツールを実行して、出力に表示したいフィールドだけを取得した後、[ジオプロセシング| ArcMapのPythonウィンドウへの結果ウィンドウ。

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スニペットとしてコピーを実行すると、同じ機能が公開されます。
アレックステレシェンコフ14

2

マージツールは、簡単に再注文のフィールドを永続的にすることができます。テーブルとフィーチャクラスで機能します。並べ替えは、Pythonスクリプトを介して行うことも、[ツール]ダイアログを使用して行うこともできます(フィールドを削除して、ダイアログで再度追加することにより)。ダイアログを介した並べ替えは完璧なアプローチではありませんが。

マージツールを1回使用してから、[ Pythonスニペットとしてコピー]を使用し、フィールドの順序を手動で変更してから、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
私はそれが現在最良の答えであると思う他の質問でこの答えに投票しましたが、それは「重複した答え」であり、ここで尋ねられた質問に対する直接的な答えではないため、2番目の投票は適切ではないと思います。
PolyGeo

@FaridCher、コードを共有してくれてありがとう。Pythonでフィールドを本当にすばやく並べ替える必要がありましたが、うまくいきました。驚くばかり。
アレックステレシェンコフ16

1

これを読んで、テーブル内の属性の順序を変更し、フィールドの順序を並べ替えようとして、ArcMap 10,1でこの簡単なソリューションを見つけました...

  1. 目次で変更する機能を右クリックします
  2. プロパティをクリック
  3. [フィールド]タブをクリックします
  4. フィールドをクリックします
  5. 「上に移動」または「下に移動」の矢印をクリックします
  6. 適用、OK

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


3
がんばったね。ただし、残念ながら、これはマップドキュメントに追加したレイヤーにのみ適用されます。フィーチャクラスには、定義された順序でフィールドが残ります。技術的に言えば、データベースにはフィールドの「順序」はありませんが、フィーチャクラスをマップドキュメントに追加し、属性テーブルを開くときにエンドユーザーとして、注文に関連するフィールドを参照できます。
アレックステレシェンコフ

1

モデルビルダー内で比較的堅牢な方法で完全に行う方法があります。設定するのは少し面倒ですが、少なくとも大規模なモデルビルダー分析の一部として挿入できます。

ディゾルブツール- ディゾルブフィールドとしてのObjectID。残りの(統計)フィールドを希望の順序で追加し、[統計タイプ]ドロップダウンからオプション(最初)を選択します。以下の例では、フィールドのリストでSaltMarsh_Pctフィールドを位置6まで下に移動しました。

並べ替えられたフィールドでモデルを分解する

通常、結果をコピーしてから各フィールドの名前を変更します(コピーは機能的に冗長であり、名前の変更もそこで実行できますが、不安定です)

フィールドの変更ツールを使用して各フィールドの名前を変更します

フィールド名を元に戻す(FIRSTを削除)

モデル内では、すべて次のようになります。

再注文するモデルの例

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.