Festlegen des Speicherarbeitsbereichs in ArcPy?

11

Ist es möglich, env.workspace = "in_memory"in ArcPy sowohl ArcGIS Pro als auch ArcGIS 10.2.2 (oder 10.3) zu verwenden?

Was ich versuche, ist die Ausgabe einer Snap-Pour-Point- Operation, die im Gegensatz zur Festplatte in den Speicher geschrieben wird.

Mir ist klar, dass ich auf die Festplatte schreiben und sie dann in den Speicher bringen könnte, aber das würde nicht helfen. Ich versuche, eine Reihe von Aufgaben zu optimieren, um die Verwendung des Schreibens auf physische Medien für die Ausgabe eines Prozesses zu minimieren, die lediglich als Eingabe für den nächsten Prozess erforderlich ist.

Wenn Sie nicht wissen, nur GIS
quelle

Antworten:

15

Ich werde hier eine Antwort geben, da beide Antworten bisher nicht 100% korrekt sind.

Es gibt 2 Elemente, die von Werkzeug zu Werkzeug variieren können.

  1. wenn die Arbeitsbereichsumgebung berücksichtigt wird (dieses Element wird immer auf der Hilfeseite des Tools dokumentiert)
  2. wenn es den in_memoryArbeitsbereich nutzen kann (dieses Element ist möglicherweise nicht explizit dokumentiert. Es ist wahrscheinlicher, dass ein Hinweis angezeigt wird, wenn es NICHT unterstützt wird in_memory).

Um einfach zu antworten: "Können Sie den Umgebungsarbeitsbereich auf in_memory setzen?" Die Antwort ist ja.

>>> import arcpy
>>> arcpy.env.workspace = r"in_memory"
>>> arcpy.CopyFeatures_management(r"c:\temp\foo.shp", "myinmemoutput")
<Result 'in_memory\\myinmemoutput'>
>>> arcpy.Exists("myinmemoutput")
True

Snap Pour Point berücksichtigt die Arbeitsbereichsumgebung gemäß der Dokumentation und den erläuterten Python-Beispielen. Ein Test zeigt, dass Sie eine Ausgabe in in_memorydiese Variablenreferenz schreiben und mit dieser arbeiten können, um sie in ein anderes Tool einzufügen oder das Ergebnis zu speichern

>>> import arcpy
>>> arcpy.env.workspace = r"in_memory"
>>> arcpy.CheckOutExtension("SPATIAL")
u'CheckedOut'
>>> snapOut = arcpy.sa.SnapPourPoint("e:/gpservices101/hydro/US30m/test.gdb/sourcepoint", "e:/gpservices101/hydro/US30m/Region08a/Input/elev_cm", 1,"PourPtID")
>>> snapOut
in_memory\SnapPou_sour1
>>> arcpy.Exists(snapOut)
True
>>> snapOut.save(r"c:\temp\todisk.tif")
>>> arcpy.Exists(r"c:\temp\todisk.tif")
True
KHibma
quelle
-1

Leider denke ich nicht, dass es möglich ist, den Arbeitsbereich wie in Ihrer Frage auf den Speicherort in_memory zu setzen. Auf diese Weise stellen Geoverarbeitungswerkzeuge ihre Ausgabepositionen standardmäßig auf den Arbeitsbereich in_memory.

Ich habe gerade versucht, den Arbeitsbereich auf '\\in_memory'mich selbst einzustellen , und ihn mit einem einfachen CopyFeatures_management()Tool-Run getestet . Die Zeichenfolgendarstellung von arcpy.env.workspaceist zwar auf festgelegt '\\in_memory', aber ich denke, das CopyFeatures_management()Tool berücksichtigt in diesem Fall nicht die Einstellung der Arbeitsbereichsumgebung.

Es wäre jedoch fantastisch, wenn wir in_memoryden Standardarbeitsbereich auf der Ebene des Kartendokuments festlegen könnten . Vielleicht könnten Sie dies als ArcGIS-Idee ansprechen?

Bestes Glück.

BEARBEITEN:

Hey, ich dachte auch, da Sie das Snap Pour Point Tool verwenden, müssen wir dies möglicherweise anders angehen. Snap Pour Point scheint direkt auf die Feature-Class Pour Points zu wirken und erstellt keine Ausgabe-Feature-Class als Teil des Tool-Ergebnisses. Könnten wir eine temporäre, in_memory-Kopie der Stockpunkte erstellen und von dort aus arbeiten?

BEARBEITEN zu BEARBEITEN:

Oh wahr, ok du hast erwähnt, dass du das schon realisierst - sorry.

Jim
quelle
Ich kann das tun (ArcGIS-Idee). Ich frage mich, warum die Leute diese Frage ablehnen würden. Ich stimme dir zu, Jim, es wäre großartig.
Wenn Sie nicht wissen - nur GIS
Ah, ich habe jetzt die Frage. Ja, Jim ist richtig. Wenn Sie den Arbeitsbereich so einstellen, geschieht nichts. Sie müssen in_memory für Ihre individuellen Prozesse angeben. Sie können es mit diesem Verhalten nicht auf den Standardwert bringen.
Thomas
1
Die Abwahl könnte von der kurzen Länge Ihrer Frage herrühren. Ich verstehe, was du meinst - vielleicht bearbeite ich deine Frage ein bisschen mit etwas mehr Kontext und andere werden sie wieder abstimmen?
Jim
Ok, es ist eine so direkte Frage, dass ich keine Notwendigkeit sah, sie aufzublähen. Ich werde tun, was du sagst.
Wenn Sie nicht wissen - nur GIS
Frage umformuliert, um zu sehen, ob es einen anderen Weg gibt.
Wenn Sie nicht wissen - nur GIS