Ausführen von benutzerdefinierten Werkzeugen (Modell oder Skript) im Hintergrund

Beim Ausführen eines Werkzeugs im Hintergrund können Sie weiterhin mit der Anwendung (z. B. ArcMap) interagieren und andere Tasks ausführen.

Standardmäßig werden Modell- oder Skriptwerkzeuge im Vordergrund ausgeführt. Falls Sie das Werkzeug im Hintergrund ausführen möchten, müssen Sie die unten beschriebenen Probleme lösen. Nachdem Sie sichergestellt haben, dass diese Probleme für die Modelle und Skripte behoben wurden, können Sie das Werkzeug mit den folgenden Schritten im Hintergrund ausführen:

  1. Klicken Sie im Fenster Katalog oder ArcToolbox mit der rechten Maustaste auf das Werkzeug, und wählen Sie Eigenschaften. Deaktivieren Sie auf der Registerkarte Allgemein die Option Immer im Vordergrund ausführen, und klicken Sie auf OK.
  2. Klicken Sie im ArcMap-Menü auf Geoverarbeitung > Geoverarbeitungsoptionen. Aktivieren Sie unter Hintergrundverarbeitung die Option Aktivieren.

Folgende Probleme müssen gelöst werden:

  1. Verwendung von Kartendokument-Layern: Dieses Problem betrifft sowohl Modellwerkzeuge als auch Skriptwerkzeuge.
  2. Verwendung von aktuellen Kartendokumenten in Skriptwerkzeugen: Dieses Problem gilt speziell für Skriptwerkzeuge.

1. Problem – Verwenden von Kartendokument-Layern

Modellbeispiel

Wenn ein Modellwerkzeug im Hintergrund ausgeführt wird, sind nur die Layer, die als Modellparameter beteiligt sind, für den Hintergrundprozess verfügbar. Beim folgenden Modell können Benutzer z. B. einen Interessensbereich, eine Basiskonturlinie und ein Konturlinienintervall eingeben, um eine Contour-Feature-Class zu erzeugen. Dieses Modell verfügt über vier Parameter (drei Eingabeparameter und einen Ausgabeparameter). Beachten Sie, dass die Variable Elevation Raster ein Layer im ArcMap-Inhaltsverzeichnis ist, aber nicht als Modellparameter festgelegt ist. Wenn dieses Modell über sein Werkzeugdialogfeld ausgeführt wird, gibt der Benutzer den Layer "Potential Landfill Site" für den Parameter Interessensbereich ein. Der Layer "Elevation Raster" muss jedoch nicht angegeben werden, weil es kein Parameter ist.

Verwenden von Layern in einem Modell

Das obige Modell wird im Vordergrund wie erwartet ausgeführt. Wenn für dieses Modell jedoch die Ausführung im Hintergrund festgelegt wird, schlägt dies mit der Warnmeldung "Es ist kein Prozess zur Ausführung bereit" fehl. Dies ist unten dargestellt. Der Grund für das Fehlschlagen ist, dass im Hintergrund ausgeführte Prozesse keine Layer verwenden können, bei denen es sich nicht um Werkzeugparameter handelt. In diesem Fall ist die Modellvariable Elevation Raster kein Parameter. Der Hintergrundprozess kann sie also nicht finden und schlägt mit der Warnmeldung fehl.

Warnmeldung für ein Modell mit Layer im Hintergrund

Lösungen

Es gibt mehrere Methoden zum Ändern des Modells, damit es im Hintergrund ausgeführt wird.

  • Machen Sie die Layer-Variable zu einem Modellparameter. Der Layer wird dann an den Hintergrundprozess übergeben, und das Werkzeug wird im Hintergrund ausgeführt. Dies ist die einfachste Lösung.
  • Verwenden Sie anstelle eines Layers ein Dataset auf Datenträger. Im Beispiel oben doppelklicken Sie auf das Werkzeug Extract by Mask und ändern den Parameter Eingabe-Raster (dargestellt von der Variablen Elevation Raster), um anstelle eines Layers aus dem Inhaltsverzeichnis ein Raster-Dataset zu verwenden. Das einzige Problem bei dieser Lösung ist, dass Layer über eine Auswahl verfügen können, während dies für Datasets auf Datenträger nicht möglich ist. Falls Sie eine Layer-Variable verwenden, weil Sie Layer-Auswahlen nutzen möchten, können Sie kein Dataset auf Datenträger verwenden. In diesem Fall haben Sie zwei Möglichkeiten (neben dem Ändern der Variablen in einen Modellparameter):
    • Fügen Sie im Modell das Werkzeug Feature-Layer erstellen hinzu, um eine Layer-Variable aus einer Dataset-Variable zu erstellen und die Layer-Variable als Eingabe für den nächsten Modellprozess zu verwenden. (Mit dem Werkzeug Feature-Layer erstellen können Sie einen Auswahlausdruck eingeben.)
    • Erstellen Sie eine Layer-Datei (.lyr), und verwenden Sie die LYR-Datei im Modell. Im oben beschriebenen Modell würde die Variable Elevation Raster dann auf eine LYR-Datei zeigen. Sie können eine LYR-Datei mit dem Werkzeug In Layer-Datei speichern erstellen.
HinweisHinweis:

Zusätzlich zum Festlegen der Modellparameter für Eingabe-Layer müssen alle anderen Layer, die vom Modell erstellt oder aktualisiert werden, als Modellparameter festgelegt werden.

Beispiel für Skriptwerkzeug

Beim Verwenden von Layern als Eingaben weisen Skriptwerkzeuge das gleiche Problem wie Modellwerkzeuge auf. Jeder Layer muss sowohl als Parameter übergeben werden als auch den passenden Geoverarbeitungsdatentyp aufweisen. Skriptwerkzeuge bieten Ihnen Flexibilität und Auswahlmöglichkeiten. Sie können sie z. B. für Layer einsetzen, indem Sie einen Zeichenfolgen-Datentyp verwenden, der einem Layer-Namen im Inhaltsverzeichnis entspricht. Obwohl diese Methode im Vordergrund funktioniert, ist dies im Hintergrund nicht möglich, weil keine Verbindung zwischen dem Karten-Layer-Verweis und dem Hintergrundprozess besteht. Die folgende Abbildung zeigt einen Parameter-Layer, der als Zeichenfolge übergeben wird, und die geänderten Skripteigenschaften zum Verwenden eines Layers als Eingabe. Ändern des Datentyps eines Skriptwerkzeugparameters

Lösungen

Stellen Sie sicher, dass die Skriptwerkzeugparameter geeignete Datentypen aufweisen, z. B. Feature-Layer, Raster-Layer und Tabellensicht.

Falls das Skriptwerkzeug einen Layer verwendet, der kein Parameter ist, gehen Sie wie folgt vor:

  • Machen Sie den Layer zu einem Parameter.
  • Verwenden Sie anstelle eines Layers das Dataset auf Datenträger oder eine LYR-Datei auf Datenträger.

2. Problem: Verwendung von aktuellen Kartendokumenten in Skriptwerkzeugen

Skriptwerkzeuge, die für das aktuelle Kartendokument verwendet werden, müssen im Vordergrund ausgeführt werden. Die arcpy.MapDocument-Klasse ist eine effektive Möglichkeit, das aktuelle Kartendokument mithilfe von Skriptwerkzeugen zu bearbeiten. Angenommen, Sie verwenden ein Skript, bei dem automatisch auf ausgewählte Features gezoomt wird. Beim Ausführen des Skripts wird der Fehler "Object: CreateObject cannot open map document" angezeigt.

Beispielskript, das Features auswählt und per "arcpy.mapping" auf diese Features zoomt

idvalue = arcpy.GetParameterAsText(0)
SelectLayerByAttribute_management("Parcels","NEW_SELECTION","ID' = " + idvalue)
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.zoomToSelectedFeatures()
Weitere Informationen zum Arbeiten mit CURRENT in der "arcpy.MapDocument"-Klasse.

Lösung

Skriptwerkzeuge, die das aktuelle Kartendokument verwenden, müssen immer im Vordergrund ausgeführt werden. Klicken Sie im Fenster Katalog mit der rechten Maustaste auf das Skriptwerkzeug, und wählen Sie Eigenschaften. Aktivieren Sie auf der Registerkarte Allgemein die Option Immer im Vordergrund ausführen.

Werkzeuge, die Werkzeuge ausführen

Angenommen, Sie setzen ein Skriptwerkzeug ein, das das aktuelle Kartendokument wie oben beschrieben verwendet. Nehmen wir weiter an, dass das Werkzeug immer im Vordergrund ausgeführt werden muss. Was geschieht, wenn Sie dieses Skriptwerkzeug in einem Modellwerkzeug verwenden und das Modellwerkzeug im Hintergrund ausgeführt wird? Die Antwort ist, dass Modelle erkennen, wenn Werkzeuge innerhalb des Modells im Vordergrund ausgeführt werden müssen. Falls die Ausführung für Werkzeuge im Vordergrund zwingend erforderlich ist, wird das Modell automatisch im Vordergrund ausgeführt.


7/10/2012