FAQ
ArcPy (ArcMap): 外部アプリケーションからフィールド演算を実行する方法

ナレッジ番号:2891 | 登録日:2023/05/29 | 更新日:2024/06/20

概要

ArcGIS のフィールド演算は、Python を使うことで ArcMap を起動しなくても実行することができます。 ここでは外部アプリケーションである PyScripter から、Python の条件分岐や繰り返し処理の構文を使用したフィールド演算を実行する方法をご紹介します。

フィーチャクラスに新規フィールドを追加し、フィールド演算を実行します。フィールド演算では、既存の属性値を使用して、Python の if 文を用いた演算を実行します。

手順

  1. PyScripter を起動します。
    Image
  2. [エディタ] ウィンドウにコードを記述します。
    Image
  3. コードの記述が完了したら、[デバッグ ツールバー] ツールバーの [実行] ボタン Imageをクリックします。
  4. 問題なく完了した場合は、[Pythonインタプリタ] ウィンドウに ”Finish” が表示されます。
    Image

サンプル コード

# coding:cp932
# ArcPy サイト パッケージをインポートします。
import arcpy

# ワークスペースを設定します。
arcpy.env.workspace = r"C:\FAQ\database.gdb"

# ジオプロセシング ツールのパラメータに使用する変数を設定します。
inputFeatureClass = "japan_ver71"
addField = "fam_rank"

# [フィールドの追加(Add Field)] ツールを実行して、対象となるデータに新規フィールドを追加します。
arcpy.AddField_management(inputFeatureClass, addField, "TEXT")

# 高度な演算式に使用するコード ブロックを設定します。
# PyScripter でコード ブロックを記述する際は、改行やインデントを含めた文字列を記述する必要があります。
# トリプル クォーテーションを使用することで、改行を含んだ文字列として設定することができます。
codeblock = """
def rankfam(p_num, h_num):
    family = p_num / h_num
    if family < 2.0:
        return "single"
    elif family < 3.0:
        return "couple"
    else:
        return "with children"
"""

# 条件式を設定します。
expression = "rankfam(!P_NUM!, !H_NUM!)"

# [フィールド演算(Calculate Field)] ツールを実行します。
arcpy.CalculateField_management(inputFeatureClass, addField, expression, "PYTHON_9.3", codeblock)

print "Finish"

このように作成した Python ファイル (.py) は、コマンド プロンプトなどから単体で実行させることができます。

免責事項

こちらのサンプルはあくまでもコーディングの見本であり、実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。なお、コードを実行して生じたいかなる損害についても弊社では責任を負いかねます。

メタデータ

種類

製品