Configuration de l'espace de travail en mémoire dans ArcPy?

11

Est-il possible de définir env.workspace = "in_memory"dans ArcPy à l'aide des architectures ArcGIS Pro et ArcGIS 10.2.2 (ou 10.3)?

Ce que j'essaie de faire est d'obtenir la sortie d'une opération de point d'écoulement instantané écrite dans la mémoire par opposition au disque.

Je me rends compte que je pouvais écrire sur le disque puis le mettre en mémoire, mais cela n'aiderait pas. J'essaie d'optimiser une série de tâches en minimisant l'utilisation de l'écriture sur un support physique de la sortie d'un processus qui est simplement requise comme entrée pour le processus suivant.

Si vous ne connaissez pas - juste le SIG
la source

Réponses:

15

Je vais jeter une réponse ici parce que les deux réponses jusqu'à présent ne sont pas 100% correctes.

Il y a 2 éléments qui peuvent varier d'un outil à l'autre.

  1. s'il respecte l'environnement de l'espace de travail (cet élément est toujours documenté sur la page d'aide de l'outil)
  2. s'il peut utiliser l' in_memoryespace de travail (cet élément peut ne pas être explicitement documenté. Vous êtes plus susceptible de voir une note s'il ne prend pas en charge in_memory)

Pour répondre simplement au "pouvez-vous définir l'espace de travail d'environnement sur in_memory". La réponse est oui.

>>> 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 respecte l'environnement de l'espace de travail conformément à sa documentation et aux exemples Python expliqués. Et un test montre que vous pouvez écrire la sortie in_memoryet travailler avec cette référence de variable ... à mettre dans un autre outil, ou enregistrer le résultat

>>> 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
la source
-1

Malheureusement, je ne pense pas que la définition de l'espace de travail à l'emplacement in_memory comme dans votre question soit possible; De telle manière que les outils de géotraitement transfèreront par défaut leurs emplacements de sortie à l'espace de travail in_memory.

Je viens d'essayer de définir l'espace de travail pour '\\in_memory'moi-même et de le tester avec un simple CopyFeatures_management()outil. La représentation sous forme de chaîne de arcpy.env.workspaceest en effet définie sur '\\in_memory', mais je pense que l' CopyFeatures_management()outil ne respecte pas le paramètre d'environnement de l'espace de travail dans ce cas.

Ce serait génial si nous pouvions définir in_memoryl'espace de travail par défaut au niveau du document ArcMap. Peut-être pourriez-vous en faire une idée ArcGIS?

Bonne chance.

ÉDITER:

Hé, je pensais aussi puisque vous utilisez l' outil Snap Pour Point , nous devrons peut-être aborder cela différemment. Snap Pour Point semble agir directement sur la classe d'entités points d'écoulement et ne crée pas de classe d'entités en sortie dans le résultat de l'outil. Pourrions-nous créer une copie temporaire et in_memory des points d'écoulement et travailler à partir de là?

EDIT to EDIT:

Oh vrai, ok tu as dit que tu le savais déjà - désolé.

Jim
la source
Je peux le faire (idée ArcGIS). Je me demande pourquoi les gens voteraient contre cette question? Je suis d'accord avec toi Jim, ce serait génial.
Si vous ne savez pas - juste GIS
Ah je comprends la question maintenant. Oui, Jim a raison, définir l'espace de travail comme ça ne fait rien. Vous devez spécifier in_memory pour vos processus individuels. Vous ne pouvez pas le faire par défaut avec ce comportement.
Thomas
1
Le vote négatif peut provenir de la courte durée de votre question. Je vois ce que vous voulez dire cependant - peut-être modifier un peu votre question avec un peu plus de contexte et d'autres la voteront?
Jim
D'accord, c'est une question tellement directe que je n'ai pas vu la nécessité de la gonfler. Je ferai ce que tu dis.
Si vous ne savez pas - juste GIS
reformulé la question pour voir s'il existe un autre moyen.
Si vous ne savez pas - juste GIS