¿Configuración en el espacio de trabajo de memoria en ArcPy?


11

¿Es posible establecer env.workspace = "in_memory"en ArcPy usando las arquitecturas ArcGIS Pro y ArcGIS 10.2.2 (o 10.3)?

Lo que intento hacer es obtener la salida de una operación de punto de fluidez instantánea escrita en la memoria en lugar de en el disco.

Me doy cuenta de que podría escribir en el disco y luego llevarlo a la memoria, pero esto no ayudaría. Estoy tratando de optimizar una serie de tareas minimizando el uso de la escritura en medios físicos de la salida de un proceso que simplemente se requiere como entrada para el siguiente proceso.

Respuestas:


15

Voy a arrojar una respuesta aquí porque ambas respuestas hasta ahora no son 100% correctas.

Hay 2 elementos que pueden variar de una herramienta a otra.

  1. si respeta el entorno del espacio de trabajo (este elemento siempre se documenta en la página de ayuda de la herramienta)
  2. si puede hacer uso del in_memoryespacio de trabajo (es posible que este elemento no esté documentado explícitamente. Es más probable que vea una nota si NO es compatible in_memory)

Para responder simplemente a "¿puede configurar el espacio de trabajo del entorno en in_memory"? La respuesta es sí.

>>> 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 respeta el entorno del espacio de trabajo según su documentación y explica las muestras de Python. Y una prueba muestra que puede escribir resultados in_memoryy trabajar con esa referencia variable ... para poner en otra herramienta, o guardar el resultado

>>> 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

-1

Desafortunadamente, no creo que sea posible configurar el espacio de trabajo en la ubicación in_memory como en su pregunta; De tal manera que las herramientas de geoprocesamiento predeterminarán sus ubicaciones de salida al espacio de trabajo in_memory.

Acabo de intentar configurar el espacio de trabajo para '\\in_memory'mí y lo probé con una CopyFeatures_management()herramienta simple . La representación de cadena de arcpy.env.workspaceestá configurada de hecho '\\in_memory', pero creo que la CopyFeatures_management()herramienta no respeta la configuración del entorno del espacio de trabajo en este caso.

Sin embargo, sería increíble si pudiéramos establecer in_memoryel espacio de trabajo predeterminado en el nivel del documento de mapa. ¿Quizás podría plantear esto como una idea de ArcGIS?

La mejor de las suertes.

EDITAR:

Hola, estaba pensando también, ya que está utilizando la herramienta Ajustar punto de fluidez, es posible que necesitemos abordar esto de una manera diferente. Snap Pour Point parece actuar directamente sobre la clase de entidad de puntos de fluidez y no crea una clase de entidad de salida como parte del resultado de la herramienta. ¿Podríamos crear una copia temporal en memoria de los puntos de fluidez y trabajar desde allí?

EDITAR a EDITAR:

Oh cierto, ok, has mencionado que ya te das cuenta de esto, lo siento.


Puedo hacer eso (idea de ArcGIS). Me pregunto por qué la gente rechazaría esta pregunta. Estoy de acuerdo contigo Jim, sería increíble.
Si no sabe, solo GIS el

Ah, ahora tengo la pregunta. Sí, Jim tiene razón, configurar el espacio de trabajo de esa manera no hace nada. Debe especificar in_memory para sus procesos individuales. No puede hacer que su comportamiento sea predeterminado.
Thomas

1
El voto negativo puede provenir de la breve extensión de su pregunta. Sin embargo, entiendo lo que quieres decir: ¿quizás edites un poco tu pregunta con un poco más de contexto y otros la voten nuevamente?
Jim

Ok, es una pregunta tan directa que no vi la necesidad de suavizarla. Haré lo que dices.
Si no sabe, solo GIS el

pregunta redactada para ver si existe otra forma.
Si no lo sabes, solo GIS el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.