[フィールド演算 (Calculate Field)] ツールは、[データ管理ツール] ツールボックスの [フィールド] ツールセットにあります。これは、属性テーブルのフィールド ショートカット メニューから [フィールド演算 (Calculate Field)] コマンドをクリックしたときに開くツールと同じです。フィールド演算を実行するときには、どのようなタイプのデータを使用しているのか、およびそのデータを将来どのような場面で使用するのかを理解しておくことが重要です。計算式で使用する構文は、データ ソースおよびスクリプト言語によって異なります。
[フィールド演算 (Calaulate Field)] ツールの使用に関する重要なヒントとベスト プラクティスを以下に列挙します。
フィールド演算 (Calculate Field) ツールの使用に関するヒントとベスト プラクティス
フィーチャクラス、フィーチャ レイヤー、またはラスターのフィールドの値を計算します。
式は、VBScript または標準 Python 形式を使用して作成できます。式に使用する文字列の書式スタイルは、環境 (タイプ) に適合している必要があります。
type、extent、centroid、firstPoint、lastPoint、area、length、isMultipart、partCount (たとえば、!shape.area!) などのジオメトリ オブジェクトのプロパティを使用して、Python 式を作成することができます。
Python 式では、ジオメトリの area プロパティや length プロパティに面積や長さの単位を指定して、値を異なる計測単位 (!shape.length@kilometers! など) に変換できます。データが地理座標系に格納されており、距離単位 (たとえば、マイル) が指定されている場合、長さは測地線アルゴリズムを使用して計算されます。地理データで面積単位を使用すると、グローブ全体で度 (10 進) が一定でないため、正確な結果になりません。
!shape.area@acres!
- 面積計測単位のキーワード:
- ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
- 長さ計測単位のキーワード:
- CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
[フィーチャ レイヤーの作成 (Make Feature Layer)] や [属性検索 (Select Layer By Attribute)] でクエリから作成されたフィーチャなど、一連の選択されているフィーチャに対してこのツールを使用すると、選択されているレコードのみが更新されます。
1 回の操作につき、1 つのフィールドにのみ演算を適用できます。
VBScript の場合、フィールドは常に角括弧 ([ ]) で囲みます。
Python の演算の場合、フィールド名は感嘆符で囲まれている必要があります (!fieldname!)。
テキスト フィールドまたは文字フィールドの文字列の演算を行う場合、ダイアログ ボックスでは、文字列を二重引用符で囲む必要があり (「"string"」) 、スクリプトでは、二重引用符で囲まれた文字列をさらに一重引用符で囲む必要があります (「'"string"'」)。
This tool can also be used to update character items. Expressions using a character string should be wrapped, using single quotes—for example, [CHARITEM] = 'NEW STRING'. However, if the character string has embedded single quotes, wrap the string using double quotes—for example, [CHARITEM] = "TYPE'A'".
数値を指定するフィールドの演算を行うには、[条件式] パラメーターに数値を入力します。値を引用符で囲む必要はありません。
arcgis.rand() 関数は [フィールド演算 (Calculate Field)] ツールにサポートされていますが、式タイプは Python でなければなりません。arcgis.rand() 関数は ArcGIS ツール用に作成されたものであり、Python Rand() 関数と混同しないようにしてください。
式とコード ブロックは接続されています。コード ブロックの結果が式に渡される必要があるため、コード ブロックが式に関連付けられている必要もあります。
[コード ブロック] パラメーターでは、Python の math モジュールおよび形式を使用できます。追加のモジュールをインポートすることもできます。math モジュールは、数論的関数と表現関数、べき関数と対数関数、三角関数、角度変換関数、双曲線関数、および数学定数を提供します。math モジュールの詳細については、Python のヘルプをご参照ください。
Saved VB .cal files from previous versions of ArcGIS may work or require minimal modifications. If you have VBA code from past releases that use ArcObjects, you will need to modify your calculations to work.
結合したデータの演算を行う際、結合された列の演算を直接行うことはできません。元のテーブルの列の演算を直接行うことはできます。結合されたデータの演算を行うには、まず、結合されたテーブルまたはレイヤーをマップに追加する必要があります。そうすると、このデータの演算を単体で行うことができるようになります。これらの変更は結合された列に反映されます。
ArcGIS Engine Runtime または ArcGIS for Server でフィールド演算を実行する場合、式のタイプは Python でなければなりません。ArcGIS for Server に公開されるモデルにツールが組み込まれている場合は、式のタイプとして Python のみを使用します。
フィールド演算 (Calculate Field) ツールを使用したコード ブロックの例
CalculateField (フィールド演算) の例: 重心の演算
CalculateField (フィールド演算) を使用して、新しいフィールドに重心の値を割り当てます。
# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields
# Import system modules import arcpy
try:
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
# Set local variables
inFeatures = "parcels"
fieldName1 = "xCentroid"
fieldName2 = "yCentroid"
fieldPrecision = 18
fieldScale = 11
# Add fields
arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE",
fieldPrecision, fieldScale)
arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE",
fieldPrecision, fieldScale)
# Calculate centroid
arcpy.CalculateField_management(inFeatures, fieldName1,
"!SHAPE.CENTROID.X!",
"PYTHON_9.3")
arcpy.CalculateField_management(inFeatures, fieldName2,
"!SHAPE.CENTROID.Y!",
"PYTHON_9.3")
except Exception:
e = sys.exc_info()[1]
print(e.args[0])
CalculateField (フィールド演算) の例: 範囲の演算
CalculateField (フィールド演算) とコード ブロックを使用して、範囲に基づいて値の演算を行います。
# Name: CalculateField_Ranges.py
# Description: Use CalculateField with a codeblock to calculate values
# based on ranges
# Import system modules import arcpy
# Set environment settings arcpy.env.workspace = "C:/data/airport.gdb"
# Set local variables inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"
codeblock = """def getClass(area):
if area <= 1000:
return 1
if area > 1000 and area <= 10000:
return 2
else:
return 3"""
# Execute AddField arcpy.AddField_management(inTable, fieldName, "SHORT")
# Execute CalculateField arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3",
codeblock)
CalculateField (フィールド演算) の例: ランダム値の演算
CalculateField (フィールド演算) を使用して、新しいフィールドにランダム値を割り当てます。
# Name: CalculateField_Random.py
# Description: Use CalculateField to assign random values to a new field
# Import system modules import arcpy
# Set environment settings arcpy.env.workspace = "C:/data/airport.gdb"
# Set local variables inFeatures = "parcels"
fieldName = "RndValue"
expression = "arcgis.rand('Integer 0 10')"
# Execute AddField arcpy.AddField_management(inFeatures, fieldName, "LONG")
# Execute CalculateField arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON_9.3")