0

データに規定した順序に基づいて新しいシーケンシャル ID を発行するコード行が必要です。基本的に、好みに合わせてデータを並べ替えた後、元の Object_Id は意味のある順序ではなくなりました。私のテーブルでは、新しいフィールド (短い整数) を作成しました。フィールド計算機の事前ロジック スクリプト ボックスで、次のことを試みました。

counter = 0
 def uniqueID():
 global counter
 counter += 1
 return counter

しかし、それはうまくいかないようでした..私のテーブルがどのように見えるかの小さなサンプルは次のとおりです:(視覚化のため)

Object_ID    /    MMSI    /    TIME    /    VESSEL    /    NEW_ID

  1210            4444       01/10/10         01            NuLL
  1801            4444       02/10/10         01            NuLL
   303            4444       03/10/10         01            NuLL
  2839            4444       03/10/10         01            NuLL
 32100            5555       01/10/10         03            NuLL
    34            5555       02/10/10         03            NuLL

本質的に、これらの NuLL を 1、2、3、4... などにする必要があります。これは、データが好みに合わせて並べられているためです (最初は MMSI 番号順/MMSI 内で日付順)。

したがって、次のようになります: (New_ID フィールドが入力されていることに注意してください)

Object_ID    /    MMSI    /    TIME    /    VESSEL    /    NEW_ID

  1210            4444       01/10/10         01            1
  1801            4444       02/10/10         01            2
   303            4444       03/10/10         01            3
  2839            4444       03/10/10         01            4
 32100            5555       01/10/10         03            5
    34            5555       02/10/10         03            6

どうすればこれを達成できますか? ありがとう

4

5 に答える 5

0

私はこれを試しました、

新しいフィールド short integer を作成しました データを目的の配置に並べ替えます dbf を Excel データとしてエクスポートします。属性テーブルに配置された方法でエクスポートされることに注意してくださいdbf ファイル) Excel でシーケンス フィールドの列をコピーします。属性テーブルに戻り、そこに番号を貼り付けます。

オンラインで入手できるPythonコードがないため、機能しました

于 2018-08-14T07:41:19.157 に答える
0

arcpy ライブラリの updatecursor を使用できます

rows = arcpy.UpdateCursor("your attriubute table") 

counter = 1
for row in rows:
    row.NEW_ID = counter
    rows.updateRow(row)
    counter += 1

正しいデータ型であることを確認してください

于 2013-09-26T15:24:27.057 に答える