¿Cuál es la sintaxis y el uso adecuados para el espacio de trabajo de ArcGIS "en_memoria"?

32

No tengo claro cuál es la mejor forma de usar el espacio de trabajo in_memory en ArcGIS. El mejor recurso que he encontrado sobre el tema es de ESRI en Uso del espacio de trabajo en memoria . Desafortunadamente, la sección de ayuda no es muy informativa. Además, hay una publicación en este sitio que toca brevemente el tema aquí y aquí .

Mis preguntas específicas:

  • ¿Cuál es el uso y la sintaxis adecuados para usar el espacio de trabajo in_memory en ¿ArcGIS / arcpy scripts basados?
  • ¿Es el espacio de trabajo in_memory el mismo que, por ejemplo, creando una capa utilizando arcpy.MakeFeatureLayer_management() ?
  • ¿Existen estándares como eliminar el espacio de trabajo in_memory al final de el guión?
pregunta Aaron 10.10.2012 - 23:43

3 respuestas

38

He estado usando "in_memory" bastante recientemente. Puede ser muy útil, ya que tiene el potencial de aumentar drásticamente las velocidades de procesamiento para ciertas tareas, sin embargo, si está trabajando con conjuntos de datos muy grandes, es posible que su programa se bloquee.

Puede usar "in_memory" para definir salidas de proceso ... a menudo, si estoy realizando una tarea en una clase de entidad, primero la copiaré al espacio de trabajo "in_memory":

inFeature = r'C:\myDir.gdb\myFeature'
memoryFeature = "in_memory" + "\" + "myMemoryFeature"
arcpy.CopyFeatures_management(inFeature, memoryFeature)

Tenga en cuenta que no tiene que concatenar la función memory memory como lo hice yo, podría escribirla como "in_memory \ myMemoryFeature", me gusta hacerlo de esta manera para alternar entre "in_memory" y un directorio físico fácilmente. A continuación, puede realizar procesos en su función en la memoria. Cuando haya terminado, puede revertir el proceso para guardarlo nuevamente en un directorio.

Podría estar equivocado, pero creo que no es lo mismo que crear una capa de entidades. las capas de entidades le dan acceso a los métodos de selección y otras operaciones específicas de la capa. Piense en el directorio "in_memory" como el vector equivalente al objeto raster (raster = arcpy.Raster (myRasterLocation))

Para limpiar después de usar "in_memory" simplemente agregue la siguiente línea de código:

arcpy.Delete_management("in_memory")

Espero que ayude.

    
respondido por el egdetti 10.10.2012 - 23:56
11

No hay mucho de eso. Hay un directorio mágico al que puede acceder en herramientas de geoprocesamiento y cursores arcpy llamados in_memory . Debes hacer algo como arcpy.management.CreateTable('in_memory', 'my_new_table') o CreateFeatureClass para hacer una nueva clase o tabla. Luego tiene una nueva tabla en ese proceso con la ruta in_memory\my_new_table , si está en arcmap, agregará una vista de tabla a la tabla de contenido llamada my_new_table que puede usar como acceso directo para acceder a ella. Si se trata de una tabla de memoria temporal, solo use arcpy.management.Delete(r'in_memory\my_new_table') cuando haya terminado con él al final de su script.

    
respondido por el Jason Scheirer 10.10.2012 - 23:59
9

Un poco fuera de tema, pero creo que vale la pena señalarlo. En primer lugar, estoy de acuerdo con @JasonScheirer y @egdetti por encima de que in_memory puede ser muy útil. Lo más importante a tener en cuenta es que el espacio de trabajo in_memory no admite datos ráster. Si esto se convierte en un problema, recomendaría usar el módulo Python tempfile . Esto no será tan rápido, pero es más confiable. Por ejemplo, podrías hacer algo como:

import arcpy
import tempfile
import os.path
import shutil

try:
    temp_dir = tempfile.mkdtemp()
    temp_gdb = "temp.gdb"
    arcpy.CreateFileGDB_management(temp_dir, temp_gdb)
    arcpy.env.workspace = os.path.join(temp_dir, temp_gdb)

    #Some processing...

except Exception, e:
    #handle exceptions here
    print e
finally:
    shutil.rmtree(temp_dir, True)
    
respondido por el om_henners 11.10.2012 - 01:29

Lea otras preguntas en las etiquetas