Python での環境設定の使用
各ツールには、操作を実行するときに使用するパラメータがあります。これらのパラメータの中には、許容値や出力場所など、すべてのツールに共有するものがあります。これらのパラメータのデフォルト値は、すべてのツールが実行時に利用するジオプロセシング環境から取得することができます。ツールを実行する際には、現在の環境設定をグローバル入力パラメータ値として使用することもできます。対象地域、出力データセットの空間参照、新しいラスタ データセットのセル サイズといった設定はすべて、ジオプロセシング環境で指定することができます。
スクリプトは何種類かの方法で実行できます。ArcMap などの ArcGIS アプリケーション内では、スクリプト ツールとして実行できます。また、Python ウィンドウでは、別のスクリプトから実行するか、単体で実行することもできます。ArcGIS アプリケーションから、または別のジオプロセシング スクリプトから、ツール内のスクリプトを実行している場合は、呼び出し元のアプリケーションまたはスクリプトで使用されている環境設定がスクリプトに渡されます。これらの設定は、ツールのスクリプトで実行時に使用されるデフォルト設定になります。呼び出されたスクリプトでは渡された設定を変更できますが、変更内容はそのスクリプト内、またはそのスクリプトが呼び出す他のツールにのみ適用されます。変更内容が呼び出し元のスクリプトまたはアプリケーションに返されることはありません。この環境モデルは、ジオプロセシング環境を使用するすべてのプロセスに値が流れ落ちる様子から、分かりやすくカスケード(滝)とも呼ばれます。
環境設定の取得と設定
環境設定は、env クラスのプロパティとして公開されます。これらのプロパティを使用して現在の値を取得したり、値を設定したりすることができます。それぞれの環境設定には名前とラベルが付いています。ラベルは、ArcGIS の [環境設定] ダイアログ ボックスに表示されます。名前はスクリプトで使用され、ArcGIS アプリケーションのコマンド ラインでも使用されます。次に、環境値を使用する方法の例を示します。
arcpy.env.<environmentName> のように、環境クラスから読み取り/書き込みプロパティとして環境にアクセスできます。また、それぞれの環境名に arcpy.env という接頭辞を付ける代わりに、Python の from-import ステートメントを利用してコードを単純化することもできます。この代替方式の利点は、コードが単純になり、読みやすくなることです。
arcpy のインポート |
|
arcpy からの env のインポート |
|
例 1:環境変数の設定
import arcpy
from arcpy import env
# Set the workspace environment setting
#
env.workspace = "c:/St_Johns/data.gdb"
# Set the XYTolerance environment setting
#
env.XYTolerance = 2.5
# Calculate the default spatial grid index, divide in half, then
# set the spatial grid 1 environment setting
#
result = arcpy.CalculateDefaultGridIndex_management("roads")
env.spatialGrid1 = float(result.getOutput(0)) / 2
# Clip the roads by the urban area feature class
#
arcpy.Clip_analysis("roads","urban_area","urban_roads")
例 2:環境値の取得と設定
import arcpy
from arcpy import env
# Check the current raster cell size and make sure it is a certain size
# for standard output
#
env.workspace = "c:/avalon/data"
if env.cellSize < 10:
env.cellSize = 10
elif env.cellSize > 20:
env.cellSize = 20
arcpy.HillShade_3d("island_dem", "island_shade", 300)
環境値を設定する際には、スペルと大/小文字が重要です。arcpy.env.Workspace に値を割り当てても、arcpy.env.workspace は設定されません(注: arcpy.env.workspace が正しい形式です)。環境を設定したにもかかわらず、以後実行するツールで設定が有効にならない場合は、スペルと大/小文字を確認してください。
ListEnvironments 関数を使用して、正しい環境名を確認できます。
import arcpy
print arcpy.ListEnvironments()
環境設定を使用してテンポラリ データを処理
scratchGDB および scratchFolder は、ジオデータベースとフォルダの確実な場所を表す読み取り専用の環境設定です。つまり、作成したり、管理したりしなくても、ジオデータベースやフォルダをいつでも確実に使用できます。
import arcpy
inputFC = arcpy.GetParameterAsText(0)
clipFC = arcpy.GetParameterAsText(1)
outputFC = arcpy.GetParameterAsText(2)
# Use scratchGDB environment to write intermediate data
#
tempData = arcpy.CreateScratchName(workspace=arcpy.env.scratchGDB)
bufferResult = arcpy.Buffer_analysis(inputFC, tempData, "50 METERS")
arcpy.Clip_analysis(clipFC, bufferResult, outputFC)
scratchFolder 環境は次のように設定されます。
- scratchWorkspace を設定していない場合、scratchFolder には、現在のユーザのテンポラリ ファイル ディレクトリが割り当てられます。
- scratchWorkspace がジオデータベースを参照する場合、scratchFolder はそのジオデータベースを含むフォルダになります。
- scratchWorkspace をフォルダに設定している場合、scratchFolder は scratchWorkspace と同じになります。
scratchGDB 環境は次のように設定されます。
- scratchWorkspace を設定していない場合、scratchGDB には、現在のユーザのテンポラリ ファイル ディレクトリにある scratch.gdb がデフォルトで割り当てられます。
- scratchWorkspace がジオデータベースを参照している場合、scratchGDB は scratchWorkspace と同じになります。
- scratchWorkspace をフォルダに設定している場合、scratchGDB には、scratchWorkspace フォルダにある scratch.gdb ジオデータベースが割り当てられます。
環境のリセット
ジオプロセシング環境は、ツールの操作と出力に大きな影響をおよぼすため、環境設定の履歴管理を行い、必要に応じて環境をデフォルトの状態にリセットできるようにすることが大切です。
デフォルトの環境値に戻すには ResetEnvironments 関数を使用し、特定の環境をリセットするには ClearEnvironment 関数を使用します。
# Reset geoprocessing environment settings
arcpy.ResetEnvironments()
# Reset a specific environment setting
arcpy.ClearEnvironment("workspace")