Ich habe ein Skript, das als Geoverarbeitungsdienst auf ArcGIS Server veröffentlicht werden muss. Dieses Skript berechnet eine Reihe von Datensätzen in Tabellenform. Ich muss einen Ausgabeparameter festlegen, damit er die Tabelle (Recordset) zurückgibt.
Um sicherzustellen, dass ich eine Tabelle (keine Feature-Class) habe, verwende ich arcpy.TableToTable_conversion () und gebe die Tabelle an den Arbeitsbereich in_memory aus. Ich weiß also, dass ich einen Tisch habe. Ich weiß, dass es Datensätze hat, da ich einen arcpy.GetCount ausführen und die Anzahl der Datensätze abrufen kann.
Ich habe den Ausgabeparameter definiert. So sieht es aus:
arcpy.SetParameter(2, theTable)
Egal was ich versuche, das funktioniert nicht. In meiner Toolbox ist der Ausgabeparameter als RecordSet festgelegt. Ich habe versucht, ein Recordset-Objekt, den Pfad zur In-Memory-Feature-Class und viele andere Ideen bereitzustellen.
Wie geht man mit der Ausgabe einer Tabelle in eine Recordset-Ausgabe mit SetParameter for ArcGIS Server richtig um?
Antworten:
Nach meiner Erfahrung (und ich bin mehr als glücklich, dies zu korrigieren) ist das Argument, das Sie für die Ausgabe angeben, beim Erstellen eines Geoverarbeitungsdienstes nicht das Objekt selbst, sondern ein Verweis auf das Objekt (den Dateipfad).
Der Datentyp teilt dem Server lediglich mit, wie die Daten zu interpretieren sind, je nachdem, wie Sie das Tool ausführen (innerhalb einer App wird der Datensatz möglicherweise automatisch angezeigt, von SOAP wird der Datensatz möglicherweise als Datenstrom abgerufen (obwohl ich nicht sicher bin) ) und über REST erhalten Sie nur einen Link).
Grundsätzlich müssen Sie Ihre Tabelle in diese Datei schreiben. Der ArcGIS-Server stellt automatisch einen Ordner- / Job-ID-Pfad nach vorne, basierend auf Ihrem Ausgabeordner, ab dem Zeitpunkt, an dem Sie das Modell zum Server hinzugefügt haben. z.B
C:/arcgisserver/arcgisoutput
/arcgisoutput
/arcgisoutput/tabletoolbox
%scratchworkspace%/tablename.csv
Beachten Sie, dass der
%scratchworkspace%
ArcGIS-Server in die Ausgabeverzeichnisse aufgenommen werden kann. Siehe Schlüsselkonzepte für Geoverarbeitungsdienste in der ESRI-Hilfe.Der Server erstellt also automatisch eine Job-ID (UUID), erstellt einen Ordner für Sie in der Ausgabe und stellt diesen Ihrem Ausgabeargument voran. Schreiben Sie Ihre Daten dort und wenn Sie sie vom arcgis-Server zurückerhalten, erhalten Sie einen href-Link wie:
http://server_name/arcgisoutput/tabletoolbox/job_id/tablename.csv
Sie sollten jetzt auf die Datei zugreifen können, wie Sie möchten (
urllib2.urlopen(path).read()
in Python als schnelle Verknüpfung verwenden).Hoffe das alles ist klar! -H
quelle
Ich gehe davon aus, dass der Recordset-Parameter im Parameterskript auf abgeleitet gesetzt wurde.
Ich gehe auch davon aus, dass Sie das Tool entweder direkt mit einer Toolbox oder über ein mxd-Projekt veröffentlichen. Nach meiner Erfahrung war ich mit Tools, die in mxd-Projekten veröffentlicht wurden, erfolgreicher.
Manchmal habe ich Probleme mit Geoverarbeitungsdiensten gelöst, indem ich ein ModelBuilder-Modell veröffentlicht habe, das nur ein Wrapper um das Python-Skript war, dh innerhalb des Modells hatte ich nur das Skript und habe die Skriptparameter außerhalb des Modells verfügbar gemacht.
quelle