Налаштування в робочій області пам'яті в ArcPy?


11

Чи можливо встановити env.workspace = "in_memory"в ArcPy, використовуючи як ArcGIS Pro, так і ArcGIS 10.2.2 (або 10.3) архітектури?

Те, що я намагаюся зробити, це отримати результат операції з швидкою заливкою, записаної в пам'ять, а не на диск.

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

Відповіді:


15

Я хочу на це відповісти, тому що обидві відповіді досі не є 100% правильними.

Є два елементи, які можуть відрізнятися від інструменту до інструменту.

  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

-1

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

Я тільки зараз спробував встановити робочу область для '\\in_memory'себе і протестував її за допомогою простого CopyFeatures_management()запуску інструментів. Рядкове представлення arcpy.env.workspaceдійсно встановлено '\\in_memory', але я думаю, що CopyFeatures_management()в цьому випадку інструмент не поважає налаштування середовища робочої області.

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

Найкраща удача.

Редагувати:

Гей, я думав також, оскільки ви використовуєте інструмент Snap Pour Point , можливо, нам доведеться підійти до цього по-іншому. Здається, що Snap Pour Point діє безпосередньо на клас функції функцій точок лиття і не створює вихідний клас функцій як частина результату інструменту. Чи можемо ми створити тимчасову, пам’ятну копію точок заливання та працювати звідти?

EDIT to EDIT:

О правда, гаразд, ви вже згадали, що це вже розумієте - вибачте.


Я можу це зробити (ідея ArcGIS). Цікаво, чому люди би голосували за це питання? Я згоден з тобою, Джим, це було б дивним.
Якщо ви не знаєте - просто ГІС

Ах, я зараз розумію це питання. Так, Джим правильно, якщо встановити робочу область так, що це нічого не робить. Ви повинні вказати in_memory для своїх окремих процесів. Ви не можете встановити його за замовчуванням такою поведінкою.
Томас

1
Проголосування проголосу може виникнути через короткочасність вашого питання. Я бачу, що ти маєш на увазі, - може, відредагуй своє запитання трохи більше контексту, а інші проголосують за нього?
Джим

Гаразд, це таке пряме запитання, що я не бачив необхідності розкривати його. Я зроблю так, як ви кажете.
Якщо ви не знаєте - просто ГІС

переформульоване запитання, щоб побачити, чи існує інший спосіб.
Якщо ви не знаєте - просто ГІС
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.