ArcGIS Desktopを使用してフィーチャクラスのフィールドを自動インクリメントしますか?


8

そのため、ArcGISとArcCatalogは比較的初めてです。パーソナルジオデータベースのフィーチャクラスにPROJECTIDというフィールド名を作成しました。データ型はTEXTです。これは10桁のIDになります。最初の5文字は頭字語です。6番目の文字は、機能のタイプを表す数字になります。数字になります。最後の4文字は、0001から始まる番号です。

例:WATER-1-0001

フィールドのスクリーンショット: ここに画像の説明を入力してください

私の質問は、ArcCatalogでこれをどのように行うことができるかです。次のように自動インクリメントするPythonコードをいくつか見ました。

rec=[OBJECTID]
def autoIncrement(a): 
 global rec 
 return "water" + str(a) + "-" +  format(rec, '04d')

ここでも、ArcGISに関しては初心者です。現在、エラーNameError名 'OBJECTID'が定義されていません。

回答:


12

このコードは、ArcMapおよびフィールド計算機内で使用する必要があります。コンテンツのテーブルにフィーチャクラスを追加し、それを右クリックしてテーブルを開き、フィールドの名前を右クリックしてフィールド計算機を起動します。

次に、コードブロックを確認し、言及したコードをコピーします。

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

今あなたのコードスニペットのために、これは私が何をするかです

rec=0 
def autoIncrement(a): 
 global rec 
 pStart = 1  
 pInterval = 1 
 if (rec == 0):  
  rec = pStart  
 else:  
  rec += pInterval  
 return "water" + str(a) + "-" +  format(rec, '04d')

このコードを使用して呼び出します

autoIncrement(!name_of_field!)

name_of_fieldには、機能のタイプが含まれます

編集:OBJECTIDフィールドを直接使用する場合は、単純な連結で十分です

"WATER-" + str(!typrfield!) + "-" +  format(!OBJECTID!, '04d')

あなたの数がタイプに依存する必要がある場合は、Pythonコードブロックを使用することが理にかなっています

rec1=0 
rec2=0
def autoIncrement(a): 
 global rec1
 global rec2 
 pStart = 1  
 pInterval = 1 
 if (a == 1):
  if (rec1 == 0):  
   rec1 = pStart  
  else:  
   rec1 += pInterval
  out = "water-1-" +  format(rec1, '04d')  
 else:
  if (rec2 == 0):  
   rec2 = pStart  
  else:  
   rec1 += pInterval
  out = "water-2-" +  format(rec2, '04d')  
 return out

ああ おそらくすでにテーブルにあるOBJECTIDを使用できます。ありがとう、私はこれを試し、私が持っているすべての質問を投稿します。ほんとうにありがとう。
yams 2014年

recにpStartを使用する代わりに、recの属性テーブルのフィールドの1つを割り当てるにはどうすればよいですか?
yams 2014年

OBJECTID is not definedエラーが発生します。私のpythonコードは上に表示されています。
yams 2014年

「objectid」はフィールドであり単一の値ではないため、投稿で言及したように「objectid」に基づいてrecを初期化することはできません。あなたができることは、単純な連結(コードブロックを必要としない)です
radouxju

簡単な質問ですが、FacilityIDフィールドのNullエントリを確認するにはどうすればよいですか?
yams

2

これはupdateCursorで簡単に実現できると思います。

import arcpy

# Create update cursor for feature class 
fc = r'D:\temp\tempFGDB.gdb\point'
fields = "Munic; Point; UniqueID"
sort_fields="Munic A; Point A"

rows = arcpy.UpdateCursor(fc, fields=fields, sort_fields=sort_fields)
previousPoint = None
i = 0
for row in rows:
    munic = row.getValue('Munic')
    point = row.getValue('Point')
    if not previousPoint:
        i += 1
    elif previousPoint <> point:
        i = 1
    else:
        i += 1

    row.setValue('UniqueID', '-'.join([str(munic),str(point),str(i)]))
    previousPoint = point
    rows.updateRow(row)

1

最初に、連番(PROJECT_ID)の追加フィールドを作成します。このツールボックスをダウンロード http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

プロジェクトIDフィールドを右クリックし、[ フィールド計算 ]をクリックして 、次のように入力します。

"WATER" + [PROJECT_ID]

これにより、入力したテキストが対応するプロジェクトID番号と連結されます。頭字語とプロジェクトタイプの個別のフィールドが既にある場合は、同様のことを行うことができます。

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