Verwenden von Umgebungseinstellungen in Python

Jedes Werkzeug verfügt über mehrere Parameter, die zum Ausführen eines Vorgangs verwendet werden. Einige dieser Parameter sind bei allen Werkzeugen gleich, wie z. B. Toleranz oder Ausgabeverzeichnis. Die Standardwerte für diese Parameter können aus einer Geoverarbeitungsumgebung abgerufen werden, auf die alle Werkzeuge bei der Ausführung zugreifen. Beim Ausführen eines Werkzeugs können die aktuellen Umgebungseinstellungen auch als globale Eingabeparameterwerte verwendet werden. Verschiedene Einstellungen, wie z. B. ein Interessenbereich, der Raumbezug des Ausgabe-Datasets oder die Zellengröße eines neuen Raster-Datasets, können in der Geoverarbeitungsumgebung angegeben werden.

Ein Skript kann auf verschiedene Weisen ausgeführt werden. Es kann als Skriptwerkzeug in einer ArcGIS-Anwendung ausgeführt werden. Es kann auch aus einem anderen Skript heraus oder eigenständig aus dem Python-Fenster heraus ausgeführt werden. Wenn ein Skript in einer ArcGIS-Anwendung innerhalb eines Werkzeugs oder aus einem anderen Geoverarbeitungsskript heraus ausgeführt wird, werden die Umgebungseinstellungen der aufrufenden Anwendung bzw. des Skriptes an das Skript übergeben. Diese Einstellungen dienen als Standardeinstellungen für das Skript des Werkzeugs, wenn dieses ausgeführt wird. Das aufgerufene Skript kann die übergebenen Einstellungen ändern. Diese Änderungen gelten jedoch ausschließlich innerhalb des Skriptes und für Werkzeuge, die von diesem Skript aufgerufen werden. Die Änderungen werden nicht an das aufrufende Skript bzw. die aufrufende Anwendung zurückgegeben. Das Umgebungsmodell lässt sich am besten als kaskadierend beschreiben, wobei Werte an jeden Prozess abwärts in der Aufrufhierarchie weitergereicht werden, der die Geoverarbeitungsumgebung verwendet.

Abrufen und Festlegen von Umgebungseinstellungen

Umgebungseinstellungen werden als Eigenschaften in der arcpy.env-Klasse verfügbar gemacht. Über diese Eigenschaften können die aktuellen Werte abgerufen und festgelegt werden. Auf Umgebungen kann als Lese-/Schreibeigenschaften von der Umgebungsklasse aus zugegriffen werden.

import arcpy
arcpy.env.workspace = "c:/data"
Beispiel 1: Festlegen von Werten für Umgebungseinstellungen
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")
Beispiel 2: Abrufen und Festlegen eines Wertes für eine Umgebungseinstellung
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)
Vorsicht:

Beachten Sie beim Festlegen von Eigenschaften in Python die Schreibweise und die Groß-/Kleinschreibung. Das Zuweisen eines Wertes zu arcpy.env.Workspace ist nicht dasselbe wie das Festlegen von arcpy.env.workspace. (Hinweis: arcpy.env.workspace ist die korrekte Form.) Wenn Sie eine Umgebung festgelegt haben, die Auswirkung in nachfolgenden Werkzeugen jedoch nicht sehen, überprüfen Sie die Schreibweise und die Groß-/Kleinschreibung.

Verwenden von Umgebungseinstellungen zur Handhabung von Scratch-Daten

scratchGDB- und scratchFolder sind schreibgeschützte Umgebungen, die eine Geodatabase und einen Ordner an einem Speicherort bereitstellen, der mit Sicherheit vorhanden ist. Das bedeutet, dass Sie zu jedem Zeitpunkt eine Geodatabase oder einen Ordner verwenden können, ohne diese bzw. diesen erstellen oder verwalten zu müssen.

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)

Die scratchFolder-Umgebung wird folgendermaßen festgelegt:

  • Wenn scratchWorkspace nicht festgelegt wurde, wird scratchFolder standardmäßig im Verzeichnis für temporäre Dateien des aktuellen Benutzers festgelegt.
  • Wenn scratchWorkspace auf eine Geodatabase verweist, ist scratchFolder der Ordner, der die Geodatabase enthält.
  • Wenn scratchWorkspace auf einen Ordner festgelegt ist, stimmt scratchFolder mit scratchWorkspace überein.

Die scratchGDB-Umgebung wird folgendermaßen festgelegt:

  • Wenn scratchWorkspace nicht festgelegt wurde, wird scratchGDB standardmäßig auf eine Geodatabase mit der Bezeichnung scratch.gdb im Verzeichnis für temporäre Dateien des aktuellen Benutzers festgelegt.
  • Wenn scratchWorkspace auf eine Geodatabase verweist, stimmt scratchGDB mit scratchWorkspace überein.
  • Wenn scratchWorkspace auf einen Ordner festgelegt ist, wird scratchGDB auf eine Geodatabase mit der Bezeichnung scratch.gdb im Verzeichnis scratchWorkspace festgelegt.

Zurücksetzen von Umgebungen

Da sich Geoverarbeitungsumgebungen erheblich auf den Umgang mit und die Ausgabe von Werkzeugen auswirken können, ist es wichtig, dass Umgebungseinstellungen nachverfolgt und Umgebungen auf die Standardeinstellung zurückgesetzt werden, wenn dies erforderlich ist.

Innerhalb einer with-Anweisung kann die EnvManager-Klasse verwendet werden, um eine oder mehrere Umgebungen temporär festzulegen. Wenn Sie den with-Block beenden, werden die Umgebungen auf ihre vorherigen Werte zurückgesetzt.

Im folgenden Code werden die Umgebungen "cellSize" und "extent" nur für die Dauer der with-Anweisung festgelegt.

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

Darüber hinaus kann die Funktion ResetEnvironments verwendet werden, um alle Umgebungen auf ihre Standardwerte zurückzusetzen. Mit der Funktion ClearEnvironment kann eine bestimmte Umgebung zurückgesetzt werden.

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