Ausführen benutzerdefinierter Werkzeuge (Modell oder Skript) im Hintergrund
Durch die Ausführung eines Werkzeugs im Hintergrund können Sie die Interaktion mit der Anwendung (wie ArcMap) fortsetzen und andere Aufgaben ausführen während das Werkzeug ausgeführt wird.
Modell- oder Skriptwerkzeuge werden standardmäßig im Vordergrund ausgeführt. Wenn Sie das Werkzeug im Hintergrund ausführen möchten, müssen Sie die nachfolgend beschriebenen Probleme lösen. Nachdem Sie sichergestellt haben, dass Ihre Modelle und Skripte diese Probleme behoben haben, können Sie das Werkzeug im Hintergrund ausführen, indem Sie die folgenden Schritte ausführen:
- Klicken Sie im Fenster Katalog oder ArcToolbox mit der rechten Maustaste auf das Werkzeug, und klicken Sie dann auf Eigenschaften. Deaktivieren Sie auf der Registerkarte Allgemein die Option Immer im Vordergrund ausführen, und klicken Sie dann auf OK.
- Klicken Sie im ArcMap-Menü auf Geoverarbeitung > Geoverarbeitungsoptionen. Aktivieren Sie im Fenster Hintergrundverarbeitung die Option Aktivieren.
Folgende Probleme müssen behoben werden:
- Verwenden von Kartendokument-Layern – Dies ist ein Problem, das bei Modellen und Skriptwerkzeugen auftritt.
- Verwenden des aktuellen Kartendokuments in Skriptwerkzeugen – Dies ist ein Problem, das insbesondere im Zusammenhang mit Skriptwerkzeugen auftritt.
Problem 1 – Verwenden von Kartendokument-Layern
Modellbeispiel
Wenn ein Modellwerkzeug im Hintergrund ausgeführt wird, sind nur die Layer für den Hintergrundprozess verfügbar, die als Modellparameter beteiligt sind. Beispielsweise kann der Benutzer mit dem folgenden Modell einen Interessenbereich, eine Basiskonturlinie und ein Konturlinienintervall eingeben, um eine Konturlinien-Feature-Class zu erstellen. Dieses Modell verfügt über vier Parameter (3 Eingabe- und 1 Ausgabeparameter). Beachten Sie, dass es sich bei der Variablen Höhenraster um einen Layer im Inhaltsverzeichnis von ArcMap handelt, der jedoch nicht als Modellparameter festgelegt ist. Wenn dieses Modell unter Verwendung des Dialogfelds "Werkzeug" ausgeführt wird, gibt der Benutzer den Layer "Potenzielle Mülldeponie" für den Parameter Interessenbereich ein, muss den Layer "Höhenraster" jedoch nicht bereitstellen, der kein Parameter ist.
Das oben genannte Modell wird wie erwartet im Vordergrund ausgeführt. Wenn dieses Modell jedoch für die Ausführung im Hintergrund festgelegt ist, schlägt es fehl, und die Meldung "Es ist kein Prozess zur Ausführung bereit" wird angezeigt, wie unten dargestellt. Dies ist darauf zurückzuführen, dass Prozesse, die im Hintergrund ausgeführt werden, Layer verwenden, die keine Werkzeugparameter sind. In diesem Fall ist die Modellvariable Höhenraster kein Parameter, sodass Sie vom Hintergrundprozess nicht gefunden werden kann und mit der Warnmeldung fehlschlägt.
![]() |
Lösungen
Es gibt mehrere Möglichkeiten, das Modell so zu ändern, dass es im Hintergrund ausgeführt wird.
- Ändern Sie die Layer-Variable in einen Modellparameter. Dadurch wird der Layer 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 dem Datenträger. Doppelklicken Sie im Beispiel oben auf das Werkzeug Nach Maske extrahieren, und ändern Sie den Parameter Eingabe-Raster (dargestellt durch die Variable Höhenraster), um ein Raster-Dataset anstelle eines Layers aus dem Inhaltsverzeichnis zu verwenden. Das einzige Problem bei dieser Lösung besteht darin, dass Layer im Gegensatz zu Datasets auf dem Datenträger, über Auswahlen verfügen. Wenn Sie eine Layer-Variable verwenden, da Sie Layer-Auswahlen verwenden müssen, können Sie kein Dataset auf dem Datenträger verwenden. In diesem Fall, haben Sie zwei Möglichkeiten (neben der Änderung der Variablen in einen Modellparameter):
- Fügen Sie im Modell das Werkzeug Feature-Layer erstellen hinzu, um eine Layer-Variable aus einer Dataset-Variablen zu erstellen, und verwenden Sie die Layer-Variable als Eingabe für den nächsten Modellprozess. (Mit dem Werkzeug Feature-Layer erstellen können Sie einen Auswahlausdruck eingeben.)
- Erstellen Sie eine Layer-Datei (.lyr), und verwenden Sie die Datei .lyr in dem Modell. Dies bedeutet, dass die Variable Höhenraster im Modell oben auf eine .lyr-Datei verweist. Sie können eine .lyr-Datei mit dem Werkzeug In Layer-Datei speichern erstellen.
![Hinweis Hinweis](rsrc/note.png)
Neben der Festlegung von Modellparametern für Eingabe-Layer müssen alle anderen vom Modell erstellten oder aktualisierten Layer als Modellparameter festgelegt werden.
Beispiel für das Skriptwerkzeug
Bei Skriptwerkzeugen besteht das gleiche Problem wie bei Modellwerkzeugen, wenn Layer als Eingaben verwendet werden. Jeder Layer muss an einen Parameter übergeben werden und dem entsprechenden Geoverarbeitungsdatentyp entsprechen. Skriptwerkzeuge bieten Flexibilität und Auswahlmöglichkeiten; sie können sich beispielsweise nachteilig auf Layer auswirken, indem ein Zeichenfolgendatentyp verwendet wird, der mit einem Layer-Namen im Inhaltsverzeichnis übereinstimmt. Diese Methode funktioniert zwar im Vordergrund, jedoch nicht im Hintergrund, da es keine Verbindung zwischen der Karten-Layer-Referenz und dem Hintergrundprozess gibt. Die folgende Abbildung zeigt einen Parameter-Layer, der als Zeichenfolge übergeben wird, und die geänderten Skripteigenschaften, die einen Layer als Eingabe verwenden sollen.
Lösungen
Stellen Sie sicher, dass Skriptparameterwerkzeuge geeignete Datentypen, wie Feature-Layer, Raster-Layer und Tabellenansicht, verwenden.
Wenn das Skriptwerkzeug einen Layer verwendet, der kein Parameter ist, müssen Sie folgende Schritte ausführen:
- Erstellen Sie den Layer als Parameter.
- Verwenden Sie anstelle eines Layers ein Dataset auf dem Datenträger oder eine .lyr-Datei auf dem Datenträger.
Problem 2 – Verwenden des Dokuments aktuelle Karte in Skriptwerkzeugen
Skriptwerkzeuge, die sich negativ auf das aktuelle Kartendokument auswirken, müssen im Vordergrund ausgeführt werden. Die MapDocument-Klasse stellt eine äußerst wirkungsvolle Methode dar, um das aktuelle Kartendokument über Skriptwerkzeuge zu nutzen. Sie können beispielsweise über ein Skript verfügen, das automatisch auf die Features zoomt, die Sie gerade ausgewählt haben. Die Ausführung des folgenden Skripts führt zu dem Fehler "Object: CreateObject cannot open map document".
Beispielskript, das Features auswählt und mit ArcPy Mapping auf sie zoomt
import arcpy
idvalue = arcpy.GetParameterAsText(0)
mxd = arcpy.mapping.MapDocument("CURRENT")
arcpy.SelectLayerByAttribute_management(
"Parcels", "NEW_SELECTION", '"ID" = ' + idvalue)
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.zoomToSelectedFeatures()
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 klicken Sie dann auf Eigenschaften. Aktivieren Sie auf der Registerkarte Allgemein die Option Immer im Vordergrund ausführen.
Werkzeuge, die Werkzeuge ausführen
Angenommen, Sie verfügen über ein Skriptwerkzeug, das das aktuelle Kartendokument wie oben beschrieben verwendet, und dieses Werkzeug muss immer im Vordergrund ausgeführt werden. Was geschieht, wenn Sie dieses Skriptwerkzeug in einem Modellwerkzeug verwenden, das im Hintergrund ausgeführt wird? Die Antwort lautet, dass diese Modelle Werkzeuge innerhalb des Modells erkennen, die im Vordergrund ausgeführt werden müssen. Wenn Werkzeuge im Vordergrund ausgeführt werden müssen, wird das Modell automatisch im Vordergrund ausgeführt.
![Hinweis Hinweis](rsrc/note.png)
Wenn Sie ein Modell im Hintergrund ausführen möchten und feststellen, dass Sie daran gehindert werden, da Immer im Vordergrund ausführen aktiviert, jedoch nicht verfügbar ist, überprüfen Sie die Eigenschaften des Modells oder der verwendeten Skriptwerkzeuge und stellen Sie sicher, dass Immer im Vordergrund ausführen für diese Werkzeuge deaktiviert ist.