概要
フィーチャクラス、フィーチャ レイヤー、またはラスターのフィールドの値を計算します。
使用法
Python 式の詳細については、「フィールド演算 (Calculate Field) の Python の例」をご参照ください。
Arcade 式の詳細については、「ArcGIS Arcade ガイド」をご参照ください。
SQL 式の詳細については、「フィールドの計算」をご参照ください。
[フィーチャ レイヤーの作成 (Make Feature Layer)] や [属性検索 (Select Layer By Attribute)] ツールでクエリから作成されたフィーチャなど、一連の選択されているフィーチャに対してこのツールを使用すると、選択されているレコードのみが更新されます。
既存のフィールドの値は上書きされます。元の値を維持するには、入力テーブルのコピーを作成します。
Python の演算の場合、フィールド名は感嘆符で囲まれている必要があります (!fieldname!)。
Arcade の演算の場合、フィールド名に接頭辞 $feature. が付与されている必要があります ($feature.fieldname など)。
テキスト フィールドまたは文字フィールドの文字列の演算を行う場合、ダイアログ ボックスでは、文字列を二重引用符で囲む必要があり (「"string"」)、スクリプトでは、二重引用符で囲まれた文字列をさらに一重引用符で囲む必要があります (「'"string"'」)。
数値を指定するフィールドの演算を行うには、[式] パラメーターに数値を入力します。値を引用符で囲む必要はありません。
[コード ブロック] パラメーターを使用すると、複雑な式を作成できます。コード ブロックは、ダイアログ ボックスに直接入力することも、スクリプトで連続する文字列として入力することもできます。式とコード ブロックは接続されています。コード ブロックの結果が式に渡される必要があるため、コード ブロックが式に関連付けられている必要もあります。
[コード ブロック] パラメーターは Python 式でのみサポートされています。
[コード ブロック] パラメーターでは、Python の math モジュールおよび形式を使用できます。追加のモジュールをインポートすることもできます。math モジュールは、数論的関数と表現関数、べき関数と対数関数、三角関数、角度変換関数、双曲線関数、および数学定数を提供します。math モジュールの詳細については、「Python」のヘルプをご参照ください。
type、extent、centroid、firstPoint、lastPoint、area、length、isMultipart、partCount などの Geometry オブジェクトのプロパティを使用して、Python 式 (たとえば、!shape.area!) を作成することができます。
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!)。
結合したデータの演算を行う際、結合された列を直接演算することはできません。元のテーブルの列の演算を直接行うことはできます。結合されたデータの演算を行うには、まず、結合されたテーブルまたはレイヤーをマップに追加する必要があります。そうすると、このデータの演算を単体で行うことができるようになります。これらの変更は結合された列に反映されます。
NULL を含む文字列フィールドの連結やゼロ除算を試みる Python 式は、このフィールド値として NULL を返します。
SQL 式は、フィーチャ サービスやエンタープライズ ジオデータベースの高速な計算をサポートします。一度に 1 つのフィーチャまたは行を計算する代わりに、サーバーまたはデータベースに 1 つのリクエストが設定されるので、計算が大幅に高速化します。
フィーチャ サービスとエンタープライズ ジオデータベースだけが SQL 式をサポートしています。他の形式では、Python または Arcade 式を使用します。
エンタープライズ ジオデータベースでの [式の種類] パラメーターの [SQL] オプションの使用には、次の制限があります。
- オプションは、Db2、Oracle、PostgreSQL、SAP HANA、および SQL Server にのみ対応しています。
- 結合テーブルのフィールド値の計算はサポートされていません。
- バージョン対応登録されたデータはサポートされていません。
- ジオプロセシング ツールを元に戻す機能はサポートされていません。
SQL 式のヘルプは、データベース ベンダーのドキュメントをご参照ください。
構文
arcpy.management.CalculateFields(in_table, expression_type, fields, {code_block})
パラメーター | 説明 | データ タイプ |
in_table | 新しい演算で更新されるフィールドを含んでいるテーブル。 | Table View; Raster Layer; Mosaic Layer |
expression_type | 使用される式のタイプを指定します。
Python 式の詳細については、「フィールド演算 (Calculate Field) の例」をご参照ください。 Arcade 式の詳細については、「ArcGIS Arcade ガイド」をご参照ください。 SQL 式の詳細については、「フィールドの計算」をご参照ください。 | String |
fields [[Field Name, Expression],...] | 計算されるフィールドとその条件式。 | Value Table |
code_block (オプション) | 複雑な条件式用の Python コードのブロック。 関数を使用し、複数の値を返すことはできません。 | String |
派生した出力
名前 | 説明 | データ タイプ |
out_table | 更新されたテーブル。 | テーブル ビュー; ラスター レイヤー; モザイク レイヤー |
コードのサンプル
次の Python ウィンドウ スクリプトは、Python 条件式タイプのイミディエイト モードで CalculateFields 関数を使用する方法を示しています。
import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"
arcpy.CalculateFields_management("parcels", "PYTHON3",
[["xCentroid", "!SHAPE.CENTROID.X!"],
["yCentroid", "!SHAPE.CENTROID.Y!"]])
次の Python ウィンドウ スクリプトは、SQL 文タイプのイミディエイト モードで CalculateFields 関数を使用する方法を示しています。
import arcpy
arcpy.CalculateFields_management("<a feature service url>", "SQL",
[["ceiling_field", "CEILING(field1)"],
["floor_field", "FLOOR(field1)"]])
次の Python ウィンドウ スクリプトは、Arcade 条件式タイプのイミディエイト モードで CalculateFields 関数を使用する方法を示しています。
import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"
arcpy.CalculateFields_management(
"parcels", "ARCADE",
[["max_value", "Max($feature.field1, $feature.field2)"],
["min_value", "Min($feature.field1, $feature.field2)"]])
ライセンス情報
- Basic: はい
- Standard: はい
- Advanced: はい