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() メソッドを使用したりすると、返り値は Unicode 文字列になります。[行のカウント(Get Count)](テーブル内のレコード数を取得)や [デフォルトのクラスタ許容値の計算(Calculate Default Cluster Tolerance)](クラスタ許容値を計算)など、派生出力パラメータを使用するツールを実行する場合は、このことを十分に考慮してください。Unicode 文字列から必要なタイプに変換するには、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(), long(), float()
count = int(result_value)
print count
print types.TypeType(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")
ArcGIS Spatial Analyst エクステンション ツールは、マップ代数演算に対応するために扱いが異なっており、ArcPy の関数としてではなく arcpy.sa モジュール内でのみ使用できます。