Python での環境設定の使用

各ツールには、操作を実行するときに使用するパラメーターがあります。これらのパラメーターの中には、許容値や出力場所など、すべてのツールに共有するものがあります。これらのパラメーターのデフォルト値は、すべてのツールが実行時に使用するジオプロセシング環境から取得することができます。ツールを実行する際には、現在の環境設定をグローバル入力パラメーター値として使用することもできます。対象地域、出力データセットの空間参照、新しいラスター データセットのセル サイズといった設定はすべて、ジオプロセシング環境で指定することができます。

スクリプトは何種類かの方法で実行できます。ArcGIS アプリケーション内では、スクリプト ツールとして実行できます。また、Python ウィンドウでは、別のスクリプトから実行するか、単体で実行することもできます。ArcGIS アプリケーションから、または別のジオプロセシング スクリプトから、ツール内のスクリプトを実行している場合は、呼び出し元のアプリケーションまたはスクリプトで使用されている環境設定がスクリプトに渡されます。これらの設定は、ツールのスクリプトで実行時に使用されるデフォルト設定になります。呼び出されたスクリプトでは渡された設定を変更できますが、変更内容はそのスクリプト内、またはそのスクリプトが呼び出す他のツールにのみ適用されます。変更内容が呼び出し元のスクリプトまたはアプリケーションに返されることはありません。この環境モデルは、ジオプロセシング環境を使用するすべてのプロセスに値が流れ落ちる様子から、分かりやすくカスケード (滝) とも呼ばれます。

環境設定の取得と設定

環境設定は arcpy.env クラスのプロパティとして示されます。これらのプロパティを使用して現在の値を取得したり、値を設定したりすることができます。環境クラスから読み取り/書き込みプロパティとして環境にアクセスできます。

import arcpy
arcpy.env.workspace = "c:/data"
例 1: 環境値の設定

import arcpy
# Set the workspace environment setting
arcpy.env.workspace = "c:/St_Johns/data.gdb"
# Set the XYTolerance environment setting
arcpy.env.XYTolerance = 2.5
# Calculate the default spatial grid index, divide in half, then
#   set the spatial grid 1 environment setting
grid_index = arcpy.CalculateDefaultGridIndex_management("roads")[0]
arcpy.env.spatialGrid1 = float(grid_index) / 2
# Clip the roads by the urban area feature class
arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
例 2: 環境値の取得と設定

import arcpy
# Check the current raster cell size and make sure it is a certain size
#   for standard output
arcpy.env.workspace = "c:/avalon/data"
if arcpy.env.cellSize < 10:
    arcpy.env.cellSize = 10
elif arcpy.env.cellSize > 20:
    arcpy.env.cellSize = 20
arcpy.HillShade_3d("island_dem", "island_shade", 300)
注意:

Python でプロパティを設定する際には、スペルと大/小文字の区別が重要です。arcpy.env.Workspace に値を割り当てても、arcpy.env.workspace は設定されません。(注: arcpy.env.workspace が正しい形式です)。環境を設定したにもかかわらず、以後実行するツールで設定が有効にならない場合は、スペルと大/小文字を確認してください。

環境設定を使用してテンポラリ データを処理

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)
result = arcpy.Buffer_analysis(inputFC, tempData, "50 METERS")
arcpy.Clip_analysis(clipFC, result, outputFC)

scratchFolder 環境は、次のように設定します。

  • scratchWorkspace を設定していない場合、scratchFolder には、現在のユーザーのテンポラリ ファイル ディレクトリが割り当てられます。
  • scratchWorkspace がジオデータベースを参照している場合、scratchFolder がジオデータベースのあるフォルダーになります。
  • scratchWorkspace をフォルダーに設定している場合、scratchFolderscratchWorkspace と同じです。

scratchGDB 環境は、次のように設定します。

  • scratchWorkspace を設定していない場合、scratchGDB には、現在のユーザーのテンポラリ ファイル ディレクトリにある scratch.gdb ジオデータベースが割り当てられます。
  • scratchWorkspace がジオデータベースを参照している場合、scratchGDBscratchWorkspace と同じです。
  • scratchWorkspace をフォルダーに設定している場合、scratchGDB には、scratchWorkspace フォルダーにある scratch.gdb ジオデータベースが割り当てられます。

環境のリセット

ジオプロセシング環境は、ツールの操作と出力に大きな影響をおよぼすため、環境設定の履歴管理を行い、必要に応じて環境をデフォルトの状態にリセットできるようにすることが大切です。

EnvManager クラスは、with ステートメント内で使用された場合、1 つ以上の環境を一時的に設定するために使用できます。with ブロックを終了するときに、環境が以前の値にリセットされます。

次のコードでは、セル サイズ環境および範囲環境が、with ステートメントが継続している間にのみ設定されます。

import arcpy
with arcpy.EnvManager(cellSize=10, extent='-16, 25, 44, 64'):
    # Code to be executed with the environments set

さらに、すべての環境をデフォルト値に戻すには ResetEnvironments 関数を使用し、特定の環境をリセットするには ClearEnvironment 関数を使用できます。

import arcpy
# Reset geoprocessing environment settings
arcpy.ResetEnvironments()
# Reset a specific environment setting
arcpy.ClearEnvironment("workspace")