サマリー
フィーチャクラス、フィーチャ レイヤー、またはラスターのフィールドの値を計算します。
使用法
[フィーチャ レイヤーの作成 (Make Feature Layer)] や [属性検索 (Select Layer By Attribute)] でクエリから作成されたフィーチャなど、一連の選択されているフィーチャに対してこのツールを使用すると、選択されているレコードのみが更新されます。
1 回の操作につき、1 つのフィールドにのみ演算を適用できます。
既存のフィールドの値は上書きされます。元の値を維持するには、入力テーブルのコピーを作成する必要があります。
Python の演算の場合、フィールド名は感嘆符で囲まれている必要があります (!fieldname!)。
VB の演算の場合、フィールド名は角括弧で囲まれている必要があります ([fieldname])。
テキスト フィールドまたは文字フィールドの文字列の演算を行う場合、ダイアログ ボックスでは、文字列を二重引用符で囲む必要があり (「"string"」)、スクリプトでは、二重引用符で囲まれた文字列をさらに一重引用符で囲む必要があります (「'"string"'」)。
このツールは、文字項目を更新するために使用することもできます。文字列を使用する式は、一重引用符で囲む必要があります (例: [CHARITEM] = 'NEW STRING')。ただし、文字列の一部に一重引用符が使用されている場合は、その文字列を二重引用符で囲みます (例: [CHARITEM] = "TYPE'A'")。
数値を指定するフィールドの演算を行うには、[条件式] パラメーターに数値を入力します。値を引用符で囲む必要はありません。
Python 式が指定されている場合は、このツールで arcgis.rand() 関数を使用することができます。arcgis.rand() 関数は ArcGIS ツール用に作成されたものであり、Python の random モジュールと混同しないようにしてください。arcgis.rand() 関数に使用できる分布の構文については、「ランダム値の分布構文」をご参照ください。
式とコード ブロックは接続されています。コード ブロックの結果が式に渡される必要があるため、コード ブロックが式に関連付けられている必要もあります。
[コード ブロック] パラメーターを使用すると、複雑な式を作成できます。コード ブロックは、ダイアログ ボックスに直接入力することも、スクリプトで連続する文字列として入力することもできます。
[コード ブロック] パラメーターでは、Python の math モジュールおよび形式を使用できます。追加のモジュールをインポートすることもできます。math モジュールは、数論的関数と表現関数、べき関数と対数関数、三角関数、角度変換関数、双曲線関数、および数学定数を提供します。math モジュールの詳細については、Python のヘルプをご参照ください。
以前のバージョンの ArcGIS で保存された VB の *.cal ファイルをそのまま、または最小限の修正を加えて使用できます。ArcObjects を使用する以前のリリースの VBA コードがある場合は、計算を修正する必要があります。
type、extent、centroid、firstPoint、lastPoint、area、length、isMultipart、partCount (たとえば、!shape.area!) などの Geometry オブジェクトのプロパティを使用して、Python 式を作成することができます。
Python 式では、ジオメトリの area プロパティや length プロパティに面積や長さの単位を指定して、値を異なる計測単位 (!shape.length@kilometers! など) に変換できます。データが地理座標系に格納されており、距離単位 (たとえば、マイル) が指定されている場合、長さは測地線アルゴリズムを使用して計算されます。地理データで面積単位を使用すると、グローブ全体で度 (10 進) が一定でないため、正確な結果になりません。
- 面積計測単位のキーワード:
- 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
- 面積計測単位のキーワード:
geodesicArea または geodesicLength プロパティを面積や長さの計測単位と組み合わせて Python 式で使用すると、測地線に基づくフィーチャの面積や長さを計算できます (例: !shape.geodesicArea@hectares! または !shape.geodesicLength@miles!)。
ArcGIS アプリケーションは、*.cal ファイルの読み書きに UTF-16-LE エンコードを使用します。出力が UTF-16-LE エンコードを使用して書き込まれている限り、その他のアプリケーション (メモ帳など) を使用して、*.cal ファイルを作成または変更できます。他のエンコードを使用すると、ファイルがコード ブロックに読み込まれなくなります。
結合したデータの演算を行う際、結合された列を直接演算することはできません。元のテーブルの列の演算を直接行うことはできます。結合されたデータの演算を行うには、まず、結合されたテーブルまたはレイヤーをマップに追加する必要があります。そうすると、このデータの演算を単体で行うことができるようになります。これらの変更は結合された列に反映されます。
VB を [式] の種類として使用するフィールド演算は 64 ビット製品でサポートされていません (ArcGIS Desktop (Background Geoprocessing (64-bit)) や ArcGIS Server など)。これらの製品で [フィールド演算 (Calculate Field)] を正しく使用するには、式を Python に変換する必要があります。また、Background Geoprocessing (64-bit) の場合は、バックグラウンド処理を無効にすることもできます。
NULL を含む文字列フィールドの連結やゼロ除算を試みる Python 式は、このフィールド値として NULL を返します。
このツールでは出力範囲の環境設定が考慮されるということに注意してください。この範囲内にあるフィーチャに対してのみ、フィールド値が計算されます。環境設定は、テーブルなどの非空間データに対しては効果がありません。
- フィールド演算の例
構文
CalculateField_management (in_table, field, expression, {expression_type}, {code_block})
パラメーター | 説明 | データ タイプ |
in_table | 新しい演算で更新されるフィールドを含んでいるテーブル。 | Raster Catalog Layer; Mosaic Layer; Raster Layer; Table View |
field | 新しい演算で更新されるフィールド。 | Field |
expression | 選択されている行を設定する値を作成するために使用される単純な演算式。 | SQL Expression |
expression_type (オプション) | 使用される式のタイプを指定します。
| String |
code_block (オプション) | 複雑な式に使用するコード ブロックを入力できるようにします。 | String |
コードのサンプル
CalculateField (フィールド演算) の例 (Python ウィンドウ)
次の Python ウィンドウ スクリプトは、イミディエイト モードで CalculateField 関数を使用する方法を示しています。
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.AddField_management("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.CalculateField_management("vegtable.dbf", "VEG_TYP2",
'!VEG_TYPE!.split(" ")[-1]', "PYTHON_9.3")
CalculateField (フィールド演算) の例: 重心の演算
CalculateField を使用して、新しいフィールドに重心の値を割り当てます。
# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields
# Import system modules
import arcpy
# 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")
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")
環境
ライセンス情報
- ArcGIS Desktop Basic: はい
- ArcGIS Desktop Standard: はい
- ArcGIS Desktop Advanced: はい