Utilizar configuraciones de entorno en Python

Cada herramienta tiene un conjunto de parámetros que utiliza para ejecutar una operación. Algunos de estos parámetros son comunes entre todas las herramientas, tales como la tolerancia o la ubicación de salida. Estos parámetros pueden obtener sus valores predeterminados de un entorno de geoprocesamiento que todas las herramientas utilizan durante su funcionamiento. Cuando se ejecuta una herramienta, las configuraciones de entorno actuales también se pueden utilizar como valores de parámetros de entrada globales. Las configuraciones tales como un área de interés, la referencia espacial del dataset de salida y el tamaño de celda de un nuevo dataset ráster se pueden especificar con entornos de geoprocesamiento.

Un script se puede ejecutar de varias maneras. Se puede ejecutar como una herramienta de script en una aplicación de ArcGIS. También se puede ejecutar desde otro script o de manera independiente, desde la ventana Python. Cuando se ejecuta un script dentro de una herramienta desde una aplicación ArcGIS, o desde otro script de geoprocesamiento, se le pasa la configuración de entorno utilizada por la aplicación o el script que realiza la llamada. Esta configuración se convierte en la configuración predeterminada utilizada por el script de la herramienta cuando se ejecuta. El script llamado puede modificar la configuración que se le pasa, pero esos cambios solo se utilizan dentro de ese script o de las herramientas a las que llame. Los cambios no se devuelven al script o la aplicación que realiza la llamada. El modelo de entorno se puede describir como en cascada, donde los valores fluyen hacia abajo a cualquier proceso que utilice el entorno de geoprocesamiento.

Obtener y establecer configuraciones de entorno

Las configuraciones del entorno se exponen como propiedades en la clase arcpy.env. Estas propiedades se pueden utilizar para recuperar los valores actuales o para establecerlos. Se puede obtener acceso a los entornos como propiedades de lectura y escritura desde la clase de entorno.

import arcpy
arcpy.env.workspace = "c:/data"
Ejemplo 1: establecer valores de entorno
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")
Ejemplo 2: obtener y establecer un valor de entorno
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)
Precaución:

La ortografía y el uso de mayúsculas y minúsculas son relevantes al establecer las propiedades en Python. Asignar un valor a arcpy.env.Workspace no es lo mismo que definir arcpy.env.workspace. (Nota: arcpy.env.workspace es la forma correcta). Si establece un entorno, pero no está viendo el efecto en las herramientas subsiguientes, compruebe la ortografía y el uso de mayúsculas y minúsculas.

Utilizar las configuraciones del entorno para manejar datos temporales

Los entornos scratchGDB y scratchFolder son entornos de solo lectura que proporcionan una ubicación de carpeta y una geodatabase que se garantiza que existen. Esto significa que puede usar con confianza una geodatabase o una carpeta en cualquier momento sin crear ni administrar una.

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)

El entorno scratchFolder se establece del modo siguiente:

  • Si scratchWorkspace no se ha definido, scratchFolder cambia de manera predeterminada al directorio de archivos temporales del usuario actual.
  • Si scratchWorkspace hace referencia a una geodatabase, scratchFolder será la carpeta que contenga la geodatabase.
  • Si scratchWorkspace se ha definido en una carpeta, scratchFolder coincidirá con scratchWorkspace.

El entorno scratchGDB se establece del modo siguiente:

  • Si scratchWorkspace no se ha definido, scratchGDB cambia de manera predeterminada a una geodatabase denominada scratch.gdb del directorio de archivos temporales del usuario actual.
  • Si scratchWorkspace hace referencia a una geodatabase, scratchGDB coincidirá con scratchWorkspace.
  • Si scratchWorkspace se ha definido en una carpeta, scratchGDB se establecerá en una geodatabase denominada scratch.gdb de la carpeta scratchWorkspace.

Restablecer entornos

Debido a que los entornos de geoprocesamiento pueden afectar de manera significativa la operación y la salida de la herramienta, es importante realizar un seguimiento de la configuración del entorno y restablecer los entornos a sus estados predeterminados cuando sea necesario.

Usada dentro de una sentencia with, la clase EnvManager puede usarse para establecer temporalmente uno o varios entornos. Al salir del bloque with, los entornos se restablecerán a sus valores anteriores.

En el siguiente código, los entornos cellSize y extent se establecen solo durante la ejecución de la sentencia with.

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

Además, la función ResetEnvironments se puede usar para restaurar todos los entornos a sus valores predeterminados, o la función ClearEnvironment para restablecer un entorno específico.

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