Python のツールの使用
各ジオプロセシング ツールには、ツールを実行するために必要な情報を提供する固定のパラメータがあります。通常、ツールには 1 つ以上のデータセットを定義する入力パラメータがあり、それらは一般に新しい出力データを生成するために使用されます。パラメータには重要なプロパティがいくつかあります。
名前 |
各ツール パラメータには一意の名前が付いています。 |
タイプ |
フィーチャクラス、整数、文字列、ラスタなどの、予期されるデータ タイプ。 |
方向 |
このパラメータが入力または出力のどちらの値を定義するか。 |
必須 |
値がパラメータとして指定されなければならないかどうかを示します。 |
ツールをスクリプトで使用する際、スクリプトの実行時にツールを実行するためには、ツールのパラメータ値が正しく設定されていなければなりません。各ツールのドキュメントには、そのパラメータとプロパティが明確に定義されています。有効なパラメータ値が指定されれば、ツールを実行する準備は完了です。
パラメータは、文字列またはオブジェクトのどちらかで指定されます。文字列は単純なテキストであり、データセットへのパスやキーワードといったパラメータ値を一意に識別します。
ほとんどのツール パラメータは、単純な文字列として指定できます。空間参照など、一部のパラメータには文字列の代わりにオブジェクトを使用できます。次のコード例では、[バッファ(Buffer)] ツールの入出力パラメータが定義されています。ツール名にはツールボックス エイリアスが常に付加されることに注意してください。この例では、ツールの呼び出しを読みやすくするために、入出力パラメータの定義に 2 つの文字列変数が使用されています。
import arcpy
roads = "c:/St_Johns/data.gdb/roads"
output = "c:/St_Johns/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")
次のコード例では、オプションの座標系パラメータに空間参照オブジェクトを指定して、[フィーチャクラスの作成(Create Feature Class)] ツールが実行されます。空間参照オブジェクトは SpatialReference クラスを使用して作成され、オブジェクトの情報は投影ファイルからロードされます。
import arcpy
inputWorkspace = "c:/temp"
outputName = "rivers.shp"
# Create a spatial reference object
#
spatialRef = arcpy.SpatialReference()
# Use a projection file to define the spatial reference's properties
#
spatialRef.createFromFile("c:/program files/arcgis/Desktop10.1/Coordinate Systems/" + \
"Projected Coordinate Systems/Continental/North America/North America Equidistant Conic.prj")
# Run CreateFeatureclass using the spatial reference object
#
arcpy.CreateFeatureclass_management(inputWorkspace, outputName,
"POLYLINE", "", "", "", spatialRef)
ツールの編成
ジオプロセシング ツールは 2 種類の方法で編成されています。すべてのツールは ArcPy 上の関数として使用できますが、ツールボックスのエイリアス名に一致するモジュールでも使用できます。ヘルプにある例のほとんどでは、ツールは ArcPy から使用できる関数としての編成方法で示されていますが、どちらの方法も同じように有効です。どちらの方法を使用するかは、ユーザの好みやコーディング上の習慣によって決めてください。次の例では、両方の方法を使用した GetCount ツールのコーディングを示しています。
import arcpy
inFeatures = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module, and
# from modules matching the toolbox name.
#
arcpy.GetCount_management(inFeatures)
arcpy.management.GetCount(inFeatures)
モジュール内のツールを使用する際に、スクリプトを読みやすくするために、モジュールを識別する名前を分かりやすくしたい場合があります。このような場合には、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"
streetsCopy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streetsBackup)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
ArcGIS Spatial Analyst エクステンション ツールは、マップ代数演算に対応するために扱いが異なっており、ArcPy の関数としてではなく arcpy.sa モジュール内でのみ使用できます。
ツールからの結果の取得
ツールが実行されるときに、ArcPy は Result オブジェクトとしてツールの出力値を返します。Result オブジェクトの利点は、メッセージ、パラメータ、出力など、ツールの実行に関する情報を維持できることです。これらの結果は、他のツールがいくつか実行された後でも維持できます。
次の例では、ジオプロセシング ツールの実行後に Result オブジェクトから出力を取得する方法を示しています。
import arcpy
arcpy.env.workspace = "D:/St_Johns/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
# To get the output value, the result object has a getOutput method
#
resultValue = result.getOutput(0)
Result オブジェクトの getOutput メソッドは、出力値を含む Result オブジェクトから Unicode 文字列を返します。GetCount(テーブル内のレコード数を取得)や CalculateDefaultClusterTolerance(クラスタ許容値を計算)など、派生出力パラメータを使用するツールを実行する場合は、このことを十分に考慮してください。必要なタイプに値を変換するには、int() や float() などの組み込み Python 関数を使用して、値を Unicode 文字列から変換する必要があります。
派生パラメータはユーザの操作を必要としません。ツールのダイアログ ボックスにも、Python でツールの引数としても表示されません。[Derived] タイプは必ず出力パラメータになります。
import arcpy
from arcpy import env
import types
env.workspace = "c:/St_Johns/data.gdb"
# Many geoprocessing tools return a result object of the derived
# output dataset. A print statement will display the string
# representation of the output.
#
result = arcpy.GetCount_management("roads")
resultValue = result.getOutput(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(resultValue)
print count
print types.TypeType(count)
プロパティとメソッド |
説明 |
---|---|
inputCount | 入力の数を返します。 |
outputCount |
出力数を返します。 |
messageCount |
メッセージ数を返します。 |
maxSeverity |
最大の重要度を返します。返される重要度は、0(エラー/警告なし)、1(警告が発生)、または 2(エラーが発生)です。 |
resultID |
一意の結果 ID を返します。ツールがジオプロセシング サービスでない場合、resultID は "" になります。 |
status |
サーバ上のジョブのステータスを返します。
|
cancel() |
サーバ上のジョブをキャンセルします。 |
getInput(index) |
指定された入力を返します。レコード セットまたはラスタ データ オブジェクトの場合、RecordSet または RasterData オブジェクトが返されます。 |
getMapImageURL(ParameterList, Height, Width, Resolution) |
指定された出力に対するマップ サービス イメージを取得します。 |
getMessage(index) |
特定のメッセージを返します。 |
getMessages(severity) |
返されるメッセージのタイプ。0 はメッセージ、1 は警告、2 はエラーです。値を指定しない場合は、すべてのメッセージ タイプが返されます。 |
getOutput(index) |
指定された出力を返します。レコード セットまたはラスタ データ オブジェクトの場合、RecordSet または RasterData オブジェクトが返されます。 |
getSeverity(index) |
特定のメッセージの重要度を返します。 |