Python のツールの使用

ジオプロセシング ツールには、ツールを実行するために必要な情報を提供する固定のパラメーターがあります。通常、ツールには 1 つ以上のデータセットを定義する入力パラメーターがあり、それらは一般に新しい出力データを生成するために使用されます。パラメーターには重要なプロパティがいくつかあります。

  • それぞれのパラメーターは、フィーチャクラス、整数、文字列、ラスターなど、特定のデータ タイプを要求します。
  • パラメーターは、入力値と出力値のいずれかを想定しています。
  • パラメーターは、値が必須の場合とオプションの場合があります。
  • 各ツール パラメーターには一意の名前が付いています。

ツールを Python で使用する際、スクリプトの実行時にツールを実行するには、ツールのパラメーター値が正しく設定されていなければなりません。有効なパラメーター値が指定されれば、ツールを実行する準備は完了です。パラメーターは、文字列またはオブジェクトのどちらかで指定されます。

文字列はテキストであり、データセットへのパスやキーワードといったパラメーター値を一意に識別します。次のコード例では、[バッファー (Buffer)] ツールの入出力パラメーターが定義されています。ツール名にはツールボックス エイリアスが付加されることに注意してください。この例では、ツールの呼び出しを読みやすくするために、入出力パラメーターの定義に 2 つの文字列変数が使用されています。

import arcpy
roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"
# Run Buffer using the variables set above and pass the remaining 
# parameters in as strings
arcpy.Buffer_analysis(roads, output, "distance", "FULL", "ROUND", "NONE")

空間参照など一部のパラメーターは、オブジェクトも指定できます。次のコード例では、オプションの座標系パラメーターに SpatialReference オブジェクトを指定して、[フィーチャクラスの作成 (Create Feature Class)] ツールが実行されます。

import arcpy
in_workspace = "c:/temp"
output_name = "rivers.shp"
# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')
# Run CreateFeatureclass using the spatial reference object
arcpy.CreateFeatureclass_management(
    in_workspace, output_name, spatial_reference=spatial_ref)

ほとんどのジオプロセシング ツールには、必須の引数とオプションの引数が含まれています。オプションの引数は、それほど多く使用せずに済む場合がほとんどです。これらの使用しない引数の扱い方には、2 つの方法があります。1 つ目の方法は、オプションの引数の順序は変えず、必要のない引数は空の文字列 ""、シャープ記号 "#" として参照するか、None を付けて参照します。2 つ目の方法は、キーワード引数を使用する方法で、引数名を使用して値を割り当てます。キーワード引数を使用すると、使用しないオプションの引数を省略したり、順序を変えて指定したりできます。

空の文字列を使用したオプションの引数の省略

import arcpy
arcpy.AddField_management("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

推奨方法: キーワード引数を使用したオプションの引数の省略

import arcpy arcpy.AddField_management("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

ツールの出力

ツールが実行されるときに、ArcPy は Result オブジェクトとしてツールの出力値を返します。Result オブジェクトの利点は、メッセージ、パラメーター、出力など、ツールの実行に関する情報を維持できることです。これらの結果は、他のツールがいくつか実行された後でも維持できます。

次の例では、ジオプロセシング ツールの実行後に Result オブジェクトから出力を取得する方法を示しています。

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.CopyFeatures_management("roads", "urban_roads")
# A print statement will display the string representation of the output.
print(result)
# A result object can be indexed to get the output value. Note: a result object 
# also has a getOutput() method that can be used for the same purpose.
result_value = result[0]

結果オブジェクトにインデックスを付けたり、その getOutput() メソッドを使用したりすると、戻り値は文字列になります。[行のカウント (Get Count)] (テーブル内のレコード数を取得) や [デフォルトのクラスター許容値の計算 (Calculate Default Cluster Tolerance)] (クラスター許容値を計算) など、派生出力パラメーターを使用するツールを実行する場合は、このことを十分に考慮してください。必要なタイプに変換するには、int()float() などの組み込み Python 関数を使用できます。

メモ:

派生パラメーターはユーザーの操作を必要としません。ツールのダイアログ ボックスにも、Python でツールの引数としても表示されません。[Derived] タイプは必ず出力パラメーターになります。

import arcpy
import types
arcpy.env.workspace = "c:/base/data.gdb"
# Many geoprocessing tools return a result object of the derived output dataset.
result = arcpy.GetCount_management("roads")
result_value = result[0]
# The result object's getOutput method returns values as a unicode string. To 
# convert to a different Python type, use built-in Python functions: str(), 
# int(), float()
count = int(result_value)
print(count)
print(type(count))

大きなワークフローの中間段階だけで使用する出力を作成する場合、出力引数を省略して、ツールが出力用の一意のパスと名前を作成することができます。これには、出力を "#" や None に設定するか、出力が最後の引数の場合は完全に省略します。どちらの場合も、戻り値は新しいデータソースへの絶対パスになります。

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
result = arcpy.CopyFeatures_management("roads", "#")
result = arcpy.CopyFeatures_management("roads", "")
result = arcpy.CopyFeatures_management("roads")

ArcPy でのツールの編成

ジオプロセシング ツールは 2 種類の方法で編成されています。すべてのツールは ArcPy 上の関数として使用できますが、ツールボックスのエイリアス名に一致するモジュールでも使用できます。ヘルプにある例のほとんどでは、ツールは ArcPy から使用できる関数としての編成方法で示されていますが、どちらの方法も同じように有効です。どちらの方法を使用するかは、ユーザーの好みやコーディング上の習慣によって決めてください。次の例では、両方の方法を使用した [行のカウント (Get Count)] ツールのコーディングを示しています。

import arcpy
in_features = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)
# Or from modules matching the toolbox name
arcpy.management.GetCount(in_features)

モジュール内のツールを使用する際に、スクリプトを読みやすくするために、モジュールを識別する名前をわかりやすくしたい場合があります。この場合は、from - import - as を使用できます。

# Clean up street centerlines that were digitized without
# having set proper snapping environments
import arcpy
from arcpy import edit as EDIT
from arcpy import management as DM
streets = "c:/data/streets.gdb/majorrds"
streets_copy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
ライセンス:

Spatial Analyst および Image Analyst ツールは、マップ代数演算に対応するために扱いが異なっており、ArcPy の関数としてではなく arcpy.sa モジュールおよび arcpy.ia モジュール内でのみ使用できます。