Python での環境設定の使用
各ツールには、操作を実行するときに使用するパラメータがあります。これらのパラメータの中には、許容値や出力場所など、すべてのツールに共有するものがあります。これらのパラメータのデフォルト値は、すべてのツールが実行時に利用するジオプロセシング環境から取得することができます。ツールを実行する際には、現在の環境設定をグローバル入力パラメータ値として使用することもできます。対象地域、出力データセットの空間参照、新しいラスタ データセットのセル サイズといった設定はすべて、ジオプロセシング環境で指定することができます。
スクリプトは何種類かの方法で実行できます。ArcMap などの ArcGIS アプリケーション内では、スクリプト ツールとして実行できます。また、Python ウィンドウでは、別のスクリプトから実行するか、単体で実行することもできます。ArcGIS アプリケーションから、または別のジオプロセシング スクリプトから、ツール内のスクリプトを実行している場合は、呼び出し元のアプリケーションまたはスクリプトで使用されている環境設定がスクリプトに渡されます。これらの設定は、ツールのスクリプトで実行時に使用されるデフォルト設定になります。呼び出されたスクリプトでは渡された設定を変更できますが、変更内容はそのスクリプト内、またはそのスクリプトが呼び出す他のツールにのみ適用されます。変更内容が呼び出し元のスクリプトまたはアプリケーションに返されることはありません。この環境モデルは、ジオプロセシング環境を使用するすべてのプロセスに値が流れ落ちる様子から、分かりやすくカスケード(滝)とも呼ばれます。
環境設定の取得と設定
環境設定は、env クラスのプロパティとして公開されます。これらのプロパティを使用して現在の値を取得したり、値を設定したりすることができます。それぞれの環境設定には名前とラベルが付いています。ラベルは、ArcGIS の [環境設定] ダイアログ ボックスに表示されます。名前はスクリプトで使用され、ArcGIS アプリケーションのコマンド ラインでも使用されます。次に、環境値を使用する方法の例を示します。
arcpy.env.<environmentName> のように、環境クラスから読み取り/書き込みプロパティとして環境にアクセスできます。また、それぞれの環境名に arcpy.env という接頭辞を付ける代わりに、Python の from-import ステートメントを利用してコードを単純化することもできます。この代替方式の利点は、コードが単純になり、読みやすくなることです。
arcpy のインポート |
arcpy からの env のインポート |
---|---|
import arcpy arcpy.env.workspace = "c:/data" |
import arcpy from arcpy import env env.workspace = "c:/data" |
例 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()
設定の保存とロード
設定の自動転送は、スクリプトがジオプロセシング ツールによって実行される場合に限って行われます。ジオプロセシング スクリプトが別のジオプロセシング スクリプトを実行する場合は、呼び出されるスクリプトに環境は自動的に渡されません。これは、呼び出されるスクリプトが ArcPy を使用しているかどうか呼び出し元のスクリプトが判別する方法がないからです。
スクリプト間での環境設定の転送、およびセッションから後続のセッションへの設定の保存を簡単に行えるように、設定をファイルに保存できます。このようにすれば、ArcPy は設定ファイルをロードして環境を設定できます。次に示す 1 つ目の例では、スクリプトの設定をファイルに保存し、そのファイル名をパラメータとして別のスクリプトに渡すことによって、スクリプトの設定を別のスクリプトに転送します。2 つ目の例では、スクリプトの引数として渡された名前を使用して、環境設定ファイルをロードします。
例 1:
# Import ArcPy site-package # import arcpy from arcpy import env import os # Set the raster environment settings and the workspace # env.cellSize = 25 env.mask = "D:/St_Johns/Landcover" env.workspace = "D:/St_Johns" # Save the environment settings # envfile = arcpy.SaveSettings("c:/St_Johns/settings") # Call Python script and pass file name as argument # os.system('MyHillshade.py ' + envfile)
例 2:
# Import ArcPy site-package # import arcpy # Get the input parameter value # envfile = arcpy.GetParameterAsText(0) # Load the environment settings # arcpy.LoadSettings(envfile) # Calculate hillshade # arcpy.Hillshade_3d("city_dem","city_shade",250)
環境値は、モジュール間で引数として受け渡すことができます。値を共有する目的では、実行中のモジュール間で設定を保存し、ロードする方法は非効率的です。設定ファイルを使用する方法は、同時に実行されないモジュール間では有効で、前述の例はこのことを示しています。