Definindo na área de trabalho da memória no ArcPy?

11

É possível configurar env.workspace = "in_memory"no ArcPy usando as arquiteturas ArcGIS Pro e ArcGIS 10.2.2 (ou 10.3)?

O que estou tentando fazer é obter a saída de uma operação de ponto de fluidez instantânea gravada na memória e não no disco.

Sei que poderia gravar em disco e trazê-lo para a memória, mas isso não ajudaria. Estou tentando otimizar uma série de tarefas, minimizando o uso da gravação em mídia física da saída de um processo que é meramente necessário como entrada para o próximo processo.

Se você não sabe, apenas GIS
fonte

Respostas:

15

Vou dar uma resposta aqui, porque ambas as respostas até agora não são 100% corretas.

Existem 2 itens que podem variar de ferramenta para ferramenta.

  1. se respeitar o ambiente da área de trabalho (este item está sempre documentado na página de ajuda da ferramenta)
  2. se ele puder usar o in_memoryespaço de trabalho (este item pode não estar explicitamente documentado. É mais provável que você veja uma observação se ele NÃO suportar in_memory)

Para responder simplesmente "você pode definir o espaço de trabalho do ambiente como in_memory". A resposta é sim.

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

O Snap Pour Point respeita o ambiente da área de trabalho de acordo com a documentação e explica exemplos de Python. E um teste mostra que você pode gravar a saída in_memorye trabalhar com essa referência variável ... para colocar em outra ferramenta ou salvar o 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
KHibma
fonte
-1

Infelizmente, não acho possível definir a área de trabalho para o local in_memory, como na sua pergunta; De tal maneira que as ferramentas de geoprocessamento padronizarão seus locais de saída para o espaço de trabalho in_memory.

Agora, tentei definir o espaço de trabalho para '\\in_memory'mim e testei-o com uma simples CopyFeatures_management()execução de ferramenta. A representação de string de arcpy.env.workspaceé realmente definida como '\\in_memory', mas acho que a CopyFeatures_management()ferramenta não está respeitando a configuração do ambiente da área de trabalho neste caso.

Seria incrível, se pudéssemos definir in_memorycomo o espaço de trabalho padrão no nível do documento do mapa. Talvez você possa levantar isso como uma idéia do ArcGIS?

Boa sorte.

EDITAR:

Ei, eu também estava pensando, já que você está usando a ferramenta Snap Pour Point Tool, talvez seja necessário abordar isso de uma maneira diferente. O Snap Pour Point parece atuar diretamente na classe de recurso de pontos de fluidez e não cria uma classe de recurso de saída como parte do resultado da ferramenta. Poderíamos criar uma cópia temporária em memória dos pontos de fluidez e trabalhar a partir daí?

EDIT para EDIT:

Oh verdade, ok, você mencionou que já percebe isso - desculpe.

Jim
fonte
Eu posso fazer isso (idéia do ArcGIS). Eu me pergunto por que as pessoas votariam contra essa pergunta? Concordo com você Jim, seria incrível.
Se você não sabe- apenas GIS
Ah, eu entendi a pergunta agora. Sim, Jim está correto, definir o espaço de trabalho dessa maneira não faz nada. Você precisa especificar in_memory para seus processos individuais. Você não pode obtê-lo como padrão com esse comportamento.
Thomas
1
O voto negativo pode ter sido causado pelo curto período de sua pergunta. No entanto, entendo o que você quer dizer - talvez edite sua pergunta um pouco mais com mais contexto e outras pessoas votem nela de volta?
Jim
Ok, é uma pergunta tão direta que não vi necessidade de exagerar. Eu farei o que você diz.
Se você não sabe- apenas GIS
pergunta reformulada para ver se existe outra maneira.
Se você não sabe- apenas GIS