Установка в рабочей области памяти в ArcPy?

11

Можно ли настроить env.workspace = "in_memory"в ArcPy с использованием архитектур ArcGIS Pro и ArcGIS 10.2.2 (или 10.3)?

То, что я пытаюсь сделать, это получить результат операции мгновенной точки заливки, записанный в память, а не на диск.

Я понимаю, что могу записать на диск, а затем перенести его в память, но это не поможет. Я пытаюсь оптимизировать ряд задач, сводя к минимуму использование записи на физический носитель вывода процесса, который просто необходим в качестве входных данных для следующего процесса.

Если не знаешь - просто ГИС
источник

Ответы:

15

Я собираюсь дать ответ здесь, потому что оба ответа пока не являются на 100% правильными.

Есть 2 пункта, которые могут варьироваться от инструмента к инструменту.

  1. если он учитывает среду рабочего пространства (этот пункт всегда документируется на странице справки инструмента)
  2. если он может использовать in_memoryрабочее пространство (этот элемент может быть явно не задокументирован. Вы с большей вероятностью увидите заметку, если она НЕ поддерживает in_memory)

Чтобы просто ответить «можете ли вы установить рабочую область среды в in_memory». Ответ ДА.

>>> 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 соблюдает рабочую среду в соответствии с документацией и примерами Python. И тест показывает, что вы можете записать выходные данные in_memoryи работать с этой ссылкой на переменную ... чтобы вставить в другой инструмент или сохранить результат

>>> 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
источник
-1

К сожалению, я не думаю, что установка рабочего пространства в папку in_memory, как в вашем вопросе, возможна; Таким образом, инструменты геообработки по умолчанию будут определять свои выходные местоположения в рабочем пространстве in_memory.

Я только сейчас попытался настроить рабочее пространство для '\\in_memory'себя и протестировал его с помощью простого CopyFeatures_management()запуска инструмента. Строковое представление arcpy.env.workspaceдействительно установлено на '\\in_memory', но я думаю, что CopyFeatures_management()инструмент не учитывает настройки среды рабочего пространства в этом случае.

Было бы здорово, если бы мы могли установить in_memoryрабочее пространство по умолчанию на уровне документа карты. Может быть, вы могли бы поднять это как идею ArcGIS?

Удачи

РЕДАКТИРОВАТЬ:

Эй, я тоже думал, так как вы используете Snap Pour Point Tool, нам, возможно, придется подойти к этому по-другому. Snap Pour Point, кажется, действует непосредственно на класс пространственных объектов точек заливки и не создает выходной класс пространственных объектов как часть результата инструмента. Можем ли мы создать временную копию точек заливки in_memory и работать оттуда?

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ:

О, правда, хорошо, вы упомянули, что уже понимаете это - извините

Джим
источник
Я могу сделать это (идея ArcGIS). Интересно, почему люди проголосовали бы за этот вопрос? Я согласен с тобой, Джим, это было бы здорово.
Если вы не знаете, - просто ГИС
Ах, я понял вопрос сейчас. Да, Джим прав, настройка рабочего пространства таким образом ничего не делает. Вы должны указать in_memory для ваших отдельных процессов. Вы не можете получить его по умолчанию с таким поведением.
Томас
1
Отрицательное голосование, возможно, произошло из-за короткой длины вашего вопроса. Хотя я понимаю, что вы имеете в виду - может быть, отредактируйте ваш вопрос немного больше контекста, и другие снова проголосуют за него?
Джим
Хорошо, это такой прямой вопрос, я не видел необходимости взбивать его. Я сделаю, как вы говорите.
Если вы не знаете, - просто ГИС
перепишите вопрос, чтобы увидеть, существует ли другой путь.
Если не знаешь - просто ГИС