Verwalten von Zwischendaten in gemeinsam verwendeten Modellen
Zwischendaten werden beim Ausführen eines Modellwerkzeugs erstellt und wieder gelöscht. In den meisten Fällen müssen Sie sich mit Zwischendaten nicht befassen, auch nicht bei gemeinsam verwendeten Modellen. In einigen Fällen können Modellwerkzeuge jedoch keine Zwischendaten erstellen. Im Modell tritt ein Fehler auf und die Fehlermeldungen weisen nicht direkt auf das Problem hin. Die Meldung kann z. B. "Unerwarteter Fehler" enthalten, wenn das Werkzeug die Ausgabe einfach nicht schreiben kann, weil der Ordner oder die Geodatabase nicht vorhanden ist.
Abgesehen davon wird möglicherweise die Leistung beeinträchtigt, wenn Sie nicht darauf achten, dass ein geeigneter Speicherort für die Zwischendaten verwendet wird. Die Zwischendaten sollten nicht an einen Remote-Computer oder eine ArcSDE-Geodatabase gesendet werden. Die Kommunikation über das Netzwerk mit dem entfernten Dateisystem oder der Remote-Datenbank ist in den meisten Fällen sehr aufwändig und kann die Modellleistung erheblich beeinträchtigen.
Das einfachste Verfahren, um sicherzustellen, dass in Ihren Modellen Zwischendaten erstellt und gelöscht werden können, lautet wie folgt:
- Definieren Sie sämtliche Zwischendatenvariablen als verwaltete Daten.
Weitere Informationen zum Definieren von Zwischendaten als verwaltete Daten
- Legen Sie als Umgebungseinstellung für den Scratch-Workspace eine vorhandene File-Geodatabase fest.
Die Schritte lauten wie folgt:
- Klicken Sie im Fenster Katalog mit der rechten Maustaste auf das Modellwerkzeug und anschließend auf Bearbeiten. ModelBuilder wird geöffnet.
- Klicken Sie in ModelBuilder mit der rechten Maustaste auf alle Zwischendatenvariablen, und wählen Sie Verwaltet aus. Ein Häkchen wird neben Verwaltet angezeigt.
- Speichern und schließen Sie das Modell.
- Wählen Sie im Menü Geoverarbeitung die Option Umgebungen aus und klicken Sie auf Workspace.
- Geben Sie für die Scratch-Workspace-Umgebungseinstellung eine neue File-Geodatabase ein, oder behalten Sie den Verweis auf die Standard-Geodatabase bei.
- Klicken Sie auf OK.
- Führen Sie das Modell aus, indem Sie im Fenster Katalog auf das Modellwerkzeug doppelklicken, Parameter eingeben und dann auf OK klicken. Wenn weiterhin Fehler auftreten, stellen Sie nochmals sicher, dass Sie alle Zwischendatenvariablen als verwaltete Daten festgelegt haben und dass der Scratch-Workspace richtig festgelegt wurde. Sollten weiterhin Probleme auftreten, trifft einer der folgenden Gründe zu:
- Das Problem hängt nicht mit den Zwischendaten zusammen.
- Die Scratch-Workspace-Umgebung wird vom Modell zurückgesetzt. Überprüfen Sie die Einstellungen für die Modellumgebung wie folgt:
- Klicken Sie im Fenster Katalog mit der rechten Maustaste auf das Modell und anschließend auf Eigenschaften.
- Klicken Sie im Dialogfeld "Eigenschaften" auf die Registerkarte Umgebungen.
- Wenn im Kontrollkästchen neben Workspace ein Häkchen angezeigt wird, klicken Sie auf das Pluszeichen.
- Heben Sie Scratch-Workspace hervor, indem Sie darauf klicken, und klicken Sie dann auf die Schaltfläche Werte.
- Wenn die Umgebungseinstellung für den Scratch-Workspace einen Pfad für einen Workspace enthält, überprüfen Sie, ob der Workspace vorhanden ist. (Sie können dies überprüfen, indem Sie auf klicken und zum entsprechenden Speicherort navigieren.) Wenn der Workspace nicht vorhanden ist, geben Sie den Pfad eines vorhandenen Workspace ein.
Verwalten von Zwischendaten durch Modelle
Sie müssen sicherstellen, dass alle freigegebenen Modelle über ein Verzeichnis verfügen, in dem Zwischendaten erstellt und gelöscht werden können. Die einfachste Methode ist das Definieren aller Zwischendaten als verwaltete Daten, wie in den oben erwähnten Schritten beschrieben.
Im restlichen Thema wird genauer betrachtet, wie Zwischendaten von der Geoverarbeitung verwaltet werden, und Sie erhalten die erforderlichen Informationen zur Problembehebung. In den folgenden Abschnitten wird Folgendes beschrieben:
- Automatisches Erstellen von Pfaden für die Ausgabe
- Nachverfolgen von Änderungen an Datenvariablen durch ModelBuilder
- Verwenden der Option "Verwaltet" für Zwischendaten
- Verwenden der Variablenersetzung für Ausgabepfade
- Überschreiben der Umgebungseinstellung für den Scratch-Workspace durch ArcGIS Server
- Entwerfen einer ToolShare-Ordnerstruktur zum Vereinfachen der Verwaltung von Zwischendaten
- Schreiben von Scratch-Daten in den In-Memory-Workspace
- Verwenden von Umgebungseinstellungen für den Scratch-Workspace bei der Skripterstellung
Automatisches Erstellen von Pfaden für die Ausgabe
Wenn Sie ein Werkzeug öffnen und Eingabe-Datasets bereitstellen, wird das Verzeichnis für die Ausgabedaten automatisch generiert. Dieser automatisch generierte Name wird unter Verwendung des Speicherorts für den Scratch-Workspace erstellt, sofern dieser festgelegt wurde. Anderenfalls wird der Speicherort des aktuellen Workspaces verwendet. Die Ausgabedatenvariable enthält den automatisch generierten Namen unabhängig davon, ob die Variable schließlich Zwischendaten, verwaltete Daten oder einen Werkzeugparameter darstellt.
Wenn Sie Modelle verteilen, gelten bei den Empfängern möglicherweise andere Einstellungen für den Scratch- und den aktuellen Workspace, und diese möchten ihre Umgebungseinstellungen beibehalten. Das heißt, wenn die Empfänger das Werkzeugdialogfeld für das Modell öffnen und ausführen, sollen sämtliche Zwischendaten in den Scratch-Workspace geschrieben werden, der in deren Umgebungseinstellungen festgelegt wurde. Dies trifft auch zu, sofern Sie nicht den automatisch generierten Namen in den Datenvariablen ändern, wie im Folgenden beschrieben.
Der geänderte Zustand von Datenvariablen
Wenn Sie den Wert einer Variable in ModelBuilder ändern, gilt diese als geändert. Nach dem Ändern einer Variablen geht ArcGIS davon aus, dass Sie den geänderten Wert auch anwenden möchten, und ändert diesen nicht mehr. Wenn die geänderte Variable einen Pfad mit Ordnern oder Workspaces enthält, die auf dem Computer eines anderen Benutzers nicht vorhanden sind, schlägt das Modell fehl.
Wenn es sich bei der Variablen um ein Ausgabe-Dataset handelt und der Wert leer oder unverändert ist, erstellen Geoverarbeitungswerkzeuge automatisch einen Pfad. Sie sollten dies ausnutzen und Parameter für Ausgabe-Datasets unverändert lassen, damit die Geoverarbeitung automatisch einen Pfad erstellt.
In ModelBuilder kann nicht bestimmt werden, ob eine Datenvariable als geändert gilt. Sie können jedoch den Änderungszustand einer Variablen zurücksetzen, indem Sie den vorhandenen Wert löschen (das Feld leeren) und anschließend das gesamte Modell validieren. Bei der Validierung wird dann festgestellt, dass der Ausgabewert leer ist, und es wird automatisch ein neuer Name für Zwischendaten festgelegt. Anschließend wird die Datenvariable als unverändert gekennzeichnet. Bei einem besseren Vorgehen, das im Folgenden beschrieben wird, wird die Variable als "Verwaltet" gekennzeichnet.
Verwenden von verwalteten Daten
Sie können den Speicherort der Zwischendaten von ModelBuilder verwalten lassen (wobei die bereits beschriebene Logik angewendet wird). Sie können eine zu verwaltende Datenvariable festlegen, indem Sie mit der rechten Maustaste auf die Variable klicken und anschließend auf die Option Verwaltet klicken. Nachdem Sie eine zu verwaltende Variable festgelegt haben, können Sie den Ausgabepfad in ModelBuilder nicht mehr ändern (das Parametersteuerelement ist dann grundsätzlich nicht verfügbar). Das bedeutet, dass der Änderungsstatus von verwalteten Daten nicht geändert werden kann und dass für diese Daten bei jeder Ausführung des Modells automatisch ein neuer Pfad generiert wird.
Verwenden von "%scratchworkspace%"
Benutzerdefinierte Skriptwerkzeuge stellen nicht immer einen automatisch generierten Ausgabepfad bereit. Wenn kein automatisch generierter Ausgabepfadname bereitgestellt wird, können Sie die Variablenersetzung in ModelBuilder für Ausgabepfade wie im Folgenden dargestellt verwenden.
Das Hauptproblem bei der Verwendung der Variablenersetzung ist, dass Sie nur in seltenen Fällen wissen, ob %scratchworkspace% bei der Ausführung des Werkzeugs ein Systemordner oder eine Geodatabase ist. Wenn es sich beim Erstellen des Modells in ModelBuilder bei dem Scratch-Workspace um einen Shapefile-Workspace (einen Ordner) gehandelt hat, hätte ModelBuilder automatisch .shp an den Namen des Feature-Datasets angehängt (d. h. Sie haben %scratchworkspace%/temp eingegeben, und ModelBuilder hat diese Eingabe automatisch durch %scratchworkspace%/temp.shp ersetzt). Wenn Sie später den Scratch-Workspace in eine File-Geodatabase ändern und das Modellwerkzeug mit dem zugehörigen Dialogfeld ausführen, schlägt das Modell fehl. Das liegt daran, dass das Modell versucht, temp.shp in die File-Geodatabase zu schreiben und Geodatabases keine Sonderzeichen wie den Punkt in .shp enthalten dürfen.
Der Scratch-Workspace-Typ kann nur in zwei Situationen sicher vorausgesagt werden:
- Das Werkzeug wird auf ArcGIS Server ausgeführt.
- Sie verwenden die empfohlene "ToolShare"-Ordnerstruktur, die einen Scratch-Ordner enthält.
Beide Fälle werden im Folgenden genauer untersucht.
Scratch-Workspaces für ArcGIS Server
Wenn ein Serverwerkzeug auf dem Server ausgeführt wird, erstellt ArcGIS Server einen eindeutigen Auftragsordner für das Werkzeug. Dieser Auftragsordner enthält einen Ordner mit dem Namen scratch, der wiederum eine File-Geodatabase mit der Bezeichnung scratch.gdb enthält, wie unten dargestellt.
ArcGIS Server legt die Umgebungseinstellung für den Scratch-Workspace auf Anwendungsebene auf den Speicherort dieses eindeutigen Scratch-Ordners fest. Die Einstellungen für Scratch-Workspaces auf Werkzeug-, Modell- und Modellprozessebene werden ignoriert. Bei der Ausführung des Serverwerkzeugs wird der Speicherort sämtlicher Variablen für Zwischendaten und verwaltete Ausgabedaten zurückgesetzt, sodass der Scratch-Workspace des Auftragsordners verwendet wird. Es sei denn, die Datenvariable ist nicht verwaltet und wurde geändert.
Da ArcGIS Server diesen Scratch-Ordner grundsätzlich mit einer Scratch-Geodatabase erstellt und die Umgebungseinstellung für den Scratch-Workspace auf den Scratch-Ordner festlegt, können Sie die Variablenersetzung problemlos für alle Ausgabepfade verwenden. Beispiele:
%scratchworkspace%/output_buffer.shp %scratchworkspace%/scratch.gdb/outBuffer
Verwenden der freigegebenen Ordnerstruktur
Das Thema Struktur für das gemeinsame Nutzen von Werkzeugen beschreibt die empfohlene Ordnerstruktur, die als "ToolShare"-Ordner bezeichnet und unten dargestellt wird.
Diese "ToolShare"-Ordnerstruktur ist besonders für das gemeinsame Nutzen von Werkzeugen geeignet, und zwar unabhängig davon, ob Sie diese in einem LAN freigeben oder auf ArcGIS Server veröffentlichen.
Beachten Sie, dass der "ToolShare"-Ordner genau wie der von ArcGIS Server erstellte eindeutige Auftragsordner einen Scratch-Ordner und die Datei scratch.gdb enthält. Im Folgenden wird beschrieben, wie Sie Ihr Modell so einrichten, dass die zugehörigen Zwischendaten immer in diesen Scratch-Ordner geschrieben werden:
- Legen Sie die Umgebungseinstellung für den Scratch-Workspace auf der Modellebene auf den Scratch-Ordner im freigegebenen Ordner fest.
- Richten Sie die Toolbox für die Verwendung von relativen Pfaden ein.
- Verwenden Sie im Modell für sämtliche Zwischendaten die Variablenersetzung.
%scratchworkspace%/output_buffer.shp %scratchworkspace%/scratch.gdb/outBuffer
Wenn Sie %scratchworkspace% in einem Modellparameter verwenden, wird der Scratch-Workspace auf Anwendungsebene, nicht der auf Modellebene verwendet, sodass Sie diese Vorgehensweise nur für Datenvariablen verwenden sollten, die keine Parameter darstellen, z. B. für Zwischendaten.
Wenn Sie dieses Verfahren für die Freigabe einer Toolbox in einem LAN verwenden, werden bei jeder Ausführung eines Werkzeugs Zwischendaten in diesen Scratch-Ordner geschrieben. Folgende Konfiguration liefert hierfür ein Beispiel:
- Ein Benutzer auf \\pondermatic fügt eine Ordnerverbindung mit Ihrem freigegebenen Ordner \\cogitator\GPTools hinzu.
- Dann öffnet der Benutzer das Werkzeug in der Toolbox RetailFunctions und führt es aus.
- Da Sie die Toolbox RetailFunctions mit relativen Pfaden gespeichert haben, wird der Speicherort des Scratch-Workspaces %scratchworkspace% zu \\cogitator\GPTools\scratch erweitert, und sämtliche Zwischendaten werden in \\cogitator\GPTools\Scratch geschrieben.
Sie können entscheiden, ob Sie dieses Verfahren für die Freigabe in einem LAN verwenden möchten. Sie müssen zunächst entscheiden, ob Sie anderen Benutzern die Berechtigung für das Schreiben in den freigegebenen Ordner gewähren möchten. Zweitens müssen Sie berücksichtigen, dass das Schreiben von Daten in einem LAN im Allgemeinen langsamer ist als auf einem lokalen Datenträger. Es wird empfohlen, die Umgebungseinstellung für den Scratch-Workspace zu verwenden, die vom Benutzer des Werkzeugs festgelegt wurde. Sie wissen aber, wie bereits erwähnt, nicht, ob die Benutzer ihren Scratch-Workspace auf einen Ordner oder eine Geodatabase festgelegt haben. Bei dieser Vorgehensweise können Sie den Typ von Scratch-Workspace nicht im Voraus kennen.
Schreiben von Scratch-Daten in den In-Memory-Workspace
Die Geoverarbeitung bietet den in-memory-Workspace, in den Sie Features und Tabellen schreiben können.
Weitere Informationen zum In-Memory-Workspace
-
Hinweis:
Nur Tabellen und Feature-Classes (Punkte, Linien, Polygone) können in den In-Memory-Workspace geschrieben werden. Der In-Memory-Workspace unterstützt keine erweiterten Geodatabase-Elemente wie Subtypes, Domänen, Repräsentationen, Topologien, geometrische Netzwerke und Netzwerk-Datasets. Es können nur Simple Features und Tabellen geschrieben werden.
Legen Sie die Umgebungseinstellung für den Scratch-Workspace nicht im In-Memory-Workspace fest. Verwenden Sie in_memory nur für Ausgaben, bei denen Sie wissen, dass es sich um Simple Features und Tabellen handelt.
Gehen Sie bei der Verwendung von In-Memory-Workspaces umsichtig vor. Sie sollten nur Datasets schreiben, von denen Sie genau wissen, dass sie nicht zu groß für den In-Memory-Workspace sind.
Scratch-Daten bei der Skripterstellung
Sie müssen in Skripten häufig einen Speicherort für das Schreiben von Scratch-Daten erstellen.
Weitere Informationen zum Erstellen von Scratch-Daten in Skripten.