Integrieren von Skripten in ein Modell
Python oder andere Sprachskripte können in Modelle integriert werden, indem sie einem Skriptwerkzeug und das Skriptwerkzeug einem Modell hinzugefügt werden. Dies ist sinnvoll, wenn Python oder eine andere Skriptsprachenlogik erforderlich ist, um ein Modell zu optimieren oder aus ArcGIS auf ein externes Paket oder Programm zuzugreifen.
Die Integration von Skripten in Modelle beginnt im tatsächlichen Skript. Das Skript muss so erstellt werden, dass es in die Geoverarbeitungsumgebung integriert werden kann. Weitere Informationen finden Sie unter Erstellen eines Python-Skripts.
Nach der Erstellung des Skripts kann ein Skriptwerkzeug erstellt und einer Toolbox hinzugefügt werden. Dieses Skriptwerkzeug kann einem Modell hinzugefügt und verwendet werden, um zusätzliche Funktionalität für das Modell bereitzustellen.
Beispielanwendung
ArcGIS ist nicht für HTML konzipiert. Die Python-Skripterstellung bietet jedoch Zugriff auf Methoden und Funktionen, mit denen HTML-Dokumente erstellt und geändert werden können. Um diese HTML-Funktionalität in ArcGIS zu integrieren, betten Sie ein Python-Skriptwerkzeug in ein Modell ein.
Im folgenden Beispiel werden räumliche Abfragen und Attributabfragen für den Layer eines Flurstücks ausgeführt und ein HTML-Bericht generiert, der die Attribute eines vom Benutzer angegebenen Flurstücks und benachbarter Flurstücke auflistet. Die HTML-Erstellung wird innerhalb eines Python-Skripts ausgeführt, das vom Modell ausgeführt wird.
Python-Skript
Das folgende Skript tabletohtml.py wird verwendet, um den Inhalt einer Eingabe-Tabelle zu lesen und einen HTML-Bericht zu generieren. Der Skriptcode wird am Ende dieses Themas bereitgestellt.
Erstellen eines Skriptwerkzeugs
Die Schritte unten zeigen, wie ein Skriptwerkzeug erstellt wird, das das Skript tabletohtml.py ausführt. Weitere Details zum Erstellen von Skriptwerkzeugen finden Sie unter Kurzer Überblick über das Erstellen von Skriptwerkzeugen
- Klicken Sie mit der rechten Maustaste auf die entsprechende Toolbox, und klicken Sie auf Hinzufügen > Skript.
Der Assistent Skript hinzufügen wird geöffnet.
- Verwenden Sie den Assistenten Skript hinzufügen", um allgemeine Skripteigenschaften anzugeben.
- Geben Sie auf der nächsten Seite des Assistenten Skript hinzufügen an, welches Skript ausgeführt wird, wenn das Skriptwerkzeug ausgeführt wird.
- Geben Sie auf der nächsten Seite des Assistenten Skript hinzufügen die Skriptwerkzeug-Parametereigenschaften an. Dieses Skriptwerkzeug verfügt über zwei Parameter: eine Eingabe-Tabelle und eine Ausgabe-HTML-Datei. Diese Parameter wurden auch in tabletohtml.py definiert.
- Klicken Sie auf Fertig stellen, um das Skriptwerkzeug zur Toolbox hinzuzufügen.
Hinzufügen des Skriptwerkzeugs zu einem Modell
- Das Modell "Flurstückbericht" führt räumliche Abfragen und Attributabfragen für den Layer eines Flurstücks aus. Fügen Sie das Tabelle-zu-HTML-Skript dem Modell hinzu, um die gewünschte HTML-Erstellungsfunktionalität hinzuzufügen.
- Verbinden Sie die Ausgabe des Werkzeugs Layer lagebezogen auswählen als Eingabe mit dem Skriptwerkzeug, und legen Sie den Pfad der Skriptwerkzeugausgabe fest (der Pfad der zu generierenden HTML-Datei). Benennen Sie die Ausgabe des Skriptwerkzeugs darüber hinaus in Bericht um, und wandeln Sie die Variable in einen Modellparameter um.
import sys, string, os, arcgisscripting gp = arcgisscripting.create(9.3) tablePath = gp.GetParameterAsText(0) filePath = gp.GetParameterAsText(1) outfile = open(filePath, "w") fields = gp.ListFields(tablePath) fieldNames = [] for field in fields: if (field.type <> "Geometry" and field.type <> "BLOB"): fieldNames.append(field.name) outfile.write("<table border=""1"">\n") outfile.write("<tr>\n") for fieldName in fieldNames: outfile.write("<th>" + fieldName + "</th>\n") outfile.write("</tr>\n") cur = gp.SearchCursor(tablePath) row = cur.Next() while row: outfile.write("<tr>\n") for fieldName in fieldNames: outfile.write("<td>" + str(row.getValue(fieldName)) + "</td>\n") outfile.write("</tr>\n") row = cur.Next() del cur outfile.write("</table>\n") outfile.flush() outfile.close()