フィールド演算 (複数) (Calculate Fields (multiple)) (データ管理)

サマリー

フィーチャクラス、フィーチャ レイヤー、またはラスターの 2 つ以上のフィールドの値を計算します。

使用法

    注意:

    このツールを実行すると、入力データが変更されます。 詳細と不要なデータの変更を回避するための方法については、「入力データを変更または更新するツール」をご参照ください。

  • Python 式の詳細については、「フィールド演算 (Calculate Field) の Python の例」をご参照ください。

    Arcade 式の詳細については、「ArcGIS Arcade ガイド」をご参照ください。

    SQL 式の詳細については、「フィールドの計算」をご参照ください。

    VBScript 式の詳細については、「フィールド演算 (Calculate Field) の VBScript の例」をご参照ください。

  • [フィーチャ レイヤーの作成 (Make Feature Layer)][属性検索 (Select Layer By Attribute)] ツールでクエリから作成されたフィーチャなど、一連の選択されているフィーチャに対してこのツールを使用すると、選択されているレコードのみが更新されます。

  • 既存のフィールドの値は上書きされます。 元の値を維持するには、入力テーブルのコピーをバックアップとして作成するか、[ジオプロセシング] ウィンドウの元に戻す有効化オプションを使用します。

  • Python の演算の場合、フィールド名は感嘆符で囲まれている必要があります (たとえば、!fieldname!)。

    Arcade の演算の場合、フィールド名に接頭辞 $feature. が付与されている必要があります (たとえば、$feature.fieldname)。

  • 異なるフィールド タイプの間での時間値の転送に関連する計算の場合は、代わりに [時間フィールドの変換 (Convert Temporal Field)] ツールの使用を検討してください。

  • テキスト フィールドまたは文字フィールドの文字列の演算を行う場合、ダイアログ ボックスでは、文字列を二重引用符で囲む必要があり (たとえば「"string"」)、スクリプトでは、二重引用符で囲まれた文字列をさらに一重引用符で囲む必要があります (たとえば、'"string"')。

  • 数値を指定するフィールドの演算を行うには、[式] パラメーターに数値を入力します。値を引用符で囲む必要はありません。

  • [コード ブロック] パラメーターを使用すると、複雑な式を作成できます。 コード ブロックは、ダイアログ ボックスに直接入力するか、スクリプトで文字列として入力します。 式とコード ブロックは接続されています。 コード ブロックの結果が式に渡される必要があるため、コード ブロックが式に関連付けられている必要もあります。

    [コード ブロック] パラメーターは Python 式でのみサポートされています。

  • [コード ブロック] パラメーターで、Pythonmath モジュールおよび形式を使用できます。 追加のモジュールをインポートすることもできます。 math モジュールは、数論的関数と表現関数、べき関数と対数関数、三角関数、角度変換関数、双曲線関数、および数学定数を提供します。 math モジュールの詳細については、「Python」のヘルプをご参照ください。

  • Python でジオメトリ情報を計算するには、Geometry オブジェクト プロパティを使用します。 たとえば、!shape.pointCount! の式を使用して、フィーチャ内の頂点の数を計算します。

    注意:

    [ジオメトリ属性の計算 (Calculate Geometry Attributes)] ツールでも、同様の計算を実行できます。

    Python で面積と長さを計算するには、getArea メソッドと getLength メソッドをメソッドおよび単位タイプと組み合わせて使用します。

    • ポリゴンの測地線の面積を平方キロメートル単位で計算するには、次の式を使用します。
      !shape.getArea('GEODESIC', 'SQUAREKILOMETERS')!
    • ポリライン (またはポリゴン) の平面の長さをヤード単位で計算するには、次の式を使用します。
      !shape.getArea('PLANAR', 'YARDS')

    詳細については、Polygon オブジェクトと Polyline オブジェクトをご参照ください。

    ジオプロセシング ツールと距離および面積単位の詳細

  • 結合されたデータを操作する場合は、結合元のテーブル内のフィールドのみ更新できます。 結合先のテーブル内のフィールドは更新できません。 結合されたテーブルで計算を実行する場合は、そのテーブルで直接計算を実行できます。

  • NULL を含む文字列フィールドの連結やゼロ値除算を試みる Python 式は、このフィールドの値として NULL を返します。

  • SQL 式は、フィーチャ サービスやエンタープライズ ジオデータベースの高速な計算をサポートします。 一度に 1 つのフィーチャまたは行を計算する代わりに、サーバーまたはデータベースに 1 つのリクエストが送信されるので、計算が高速化します。

    フィーチャ サービスとエンタープライズ ジオデータベースだけが SQL 式をサポートしています。 他の形式では、Python または Arcade 式を使用します。

    [式の種類] パラメーターの [SQL] オプションの使用には、次の制限があります。

    • このオプションは、Db2OraclePostgreSQLSAP HANA、および SQL Server のエンタープライズ ジオデータベースのみでサポートされています。
    • 結合テーブルのフィールド値の計算はサポートされていません。
    • バージョン対応登録されたエンタープライズ ジオデータベース データと履歴管理が有効化されたエンタープライズ ジオデータベース データはサポートされていません。
    • ジオプロセシング操作を元に戻すことはできません。

    SQL 式のヘルプは、データベース ベンダーのドキュメントをご参照ください。

パラメーター

ラベル説明データ タイプ
入力テーブル

新しい演算で更新するフィールドを含んでいるテーブル。

Table View; Raster Layer; Mosaic Layer
式の種類

使用される式の種類を指定します。

入力値がフィーチャ サービスの場合、デフォルトの式の種類は [SQL] になります。 それ以外の入力タイプでは、デフォルトの式の種類が [Python] になります。

Python 式の詳細については、「フィールド演算 (Calculate Field) の Python の例」をご参照ください。

Arcade 式の詳細については、「ArcGIS Arcade ガイド」をご参照ください。

SQL 式の詳細については、「フィールドの計算」をご参照ください。

VBScript 式の詳細については、「フィールド演算 (Calculate Field) の VBScript の例」をご参照ください。

  • PythonPython 式の種類が使用されます。
  • ArcadeArcade 式の種類が使用されます。
  • SQLSQL 式の種類が使用されます。
  • VBScriptVBScript 式の種類が使用されます。
String
フィールド

計算されるフィールド、その式、および WHERE 句。

レコードのサブセットを選択するために使用するオプションの SQL 式。 この WHERE 句に一致するレコードのみが計算されます。 WHERE 句を空白のままにすると、すべてのレコードが計算されます。 SQL 構文の詳細については「ArcGIS で使用されるクエリ式の SQL リファレンス」をご参照ください。

Value Table
コード ブロック
(オプション)

複雑な式に使用するコードのブロック。

関数を使用し、複数の値を返すことはできません。

String
ドメインを設定
(オプション)

フィールド ドメイン ルールを適用するかどうかを指定します。

  • オン - フィールド ドメイン ルールが適用されます。 フィールドを更新できない場合、フィールド値は変更されず、ツールのメッセージには警告メッセージが表示されます。
  • オフ - フィールド ドメイン ルールは適用されません。 これがデフォルトです。
Boolean

派生した出力

ラベル説明データ タイプ
出力テーブル

更新されたテーブル。

Table View; Raster Layer; Mosaic Layer

arcpy.management.CalculateFields(in_table, expression_type, fields, {code_block}, {enforce_domains})
名前説明データ タイプ
in_table

新しい演算で更新するフィールドを含んでいるテーブル。

Table View; Raster Layer; Mosaic Layer
expression_type

使用される式の種類を指定します。

  • PYTHON3Python 式の種類が使用されます。
  • ARCADEArcade 式の種類が使用されます。
  • SQLSQL 式の種類が使用されます。
  • VBVBScript 式の種類が使用されます。

入力値がフィーチャ サービスの場合、デフォルトの式の種類は SQL になります。 それ以外の入力タイプでは、デフォルトの式の種類が PYTHON3 になります。

Python 式の詳細については、「フィールド演算 (Calculate Field) の Python の例」をご参照ください。

Arcade 式の詳細については、「ArcGIS Arcade ガイド」をご参照ください。

SQL 式の詳細については、「フィールドの計算」をご参照ください。

VBScript 式の詳細については、「フィールド演算 (Calculate Field) の VBScript の例」をご参照ください。

String
fields
[[Field Name, Expression, {Where Clause}],...]

計算されるフィールド、その式、および WHERE 句。

レコードのサブセットを選択するために使用するオプションの SQL 式。 この WHERE 句に一致するレコードのみが計算されます。 WHERE 句を空白のままにすると、すべてのレコードが計算されます。 SQL 構文の詳細については「ArcGIS で使用されるクエリ式の SQL リファレンス」をご参照ください。

Value Table
code_block
(オプション)

複雑な式に使用するコードのブロック。

関数を使用し、複数の値を返すことはできません。

String
enforce_domains
(オプション)

フィールド ドメイン ルールを適用するかどうかを指定します。

  • ENFORCE_DOMAINSフィールド ドメイン ルールが適用されます。
  • NO_ENFORCE_DOMAINSフィールド ドメイン ルールは適用されません。 これがデフォルトです。
Boolean

派生した出力

名前説明データ タイプ
out_table

更新されたテーブル。

Table View; Raster Layer; Mosaic Layer

コードのサンプル

CalculateFields の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、CalculateFields 式タイプのイミディエイト モードで Python 関数を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"
arcpy.management.CalculateFields("parcels", "PYTHON3", 
                                 [["xCentroid", "!SHAPE.CENTROID.X!"], 
                                  ["yCentroid", "!SHAPE.CENTROID.Y!"]])
CalculateFields の例 2 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、SQL 式タイプのイミディエイト モードで CalculateFields 関数を使用する方法を示しています。

import arcpy
arcpy.management.CalculateFields("<a feature service url>", "SQL", 
                                 [["ceiling_field", "CEILING(field1)"], 
                                  ["floor_field", "FLOOR(field1)"]])
CalculateFields の例 3 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、CalculateFields 式タイプのイミディエイト モードで Arcade 関数を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"
arcpy.management.CalculateFields(
    "parcels", "ARCADE", 
    [["max_value", "Max($feature.field1, $feature.field2)"], 
     ["min_value", "Min($feature.field1, $feature.field2)"]])

関連トピック