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

サーバ上のジョブのステータスを返します。

  • 0: 新規
  • 1: 送信済み
  • 2: 待ち状態
  • 3: 実行中
  • 4: 完了
  • 5: 失敗
  • 6: タイムアウト
  • 7: キャンセル中
  • 8: キャンセル済み
  • 9: 削除中
  • 10: 削除済み

cancel()

サーバ上のジョブをキャンセルします。

getInput(index)

指定された入力を返します。レコード セットまたはラスタ データ オブジェクトの場合、RecordSet または RasterData オブジェクトが返されます。

getMapImageURL(ParameterList, Height, Width, Resolution)

指定された出力に対するマップ サービス イメージを取得します。

getMessage(index)

特定のメッセージを返します。

getMessages(severity)

返されるメッセージのタイプ。0 はメッセージ、1 は警告、2 はエラーです。値を指定しない場合は、すべてのメッセージ タイプが返されます。

getOutput(index)

指定された出力を返します。レコード セットまたはラスタ データ オブジェクトの場合、RecordSet または RasterData オブジェクトが返されます。

getSeverity(index)

特定のメッセージの重要度を返します。

結果のプロパティとメソッド

関連トピック

9/14/2013