Ustawienie w obszarze roboczym pamięci w ArcPy?

11

Czy można ustawić env.workspace = "in_memory"w ArcPy przy użyciu architektury ArcGIS Pro i ArcGIS 10.2.2 (lub 10.3)?

To, co próbuję zrobić, to uzyskać wynik operacji punktu krzepnięcia zapisany w pamięci, a nie na dysku.

Zdaję sobie sprawę, że mógłbym zapisać na dysk, a następnie zapisać go w pamięci, ale to nie pomogłoby. Próbuję zoptymalizować serię zadań, minimalizując użycie zapisywania na nośnikach fizycznych wyniku procesu, który jest jedynie wymagany jako dane wejściowe do następnego procesu.

Jeśli nie wiesz - po prostu GIS
źródło

Odpowiedzi:

15

Przedstawię tutaj odpowiedź, ponieważ obie dotychczasowe odpowiedzi nie są w 100% poprawne.

Istnieją 2 elementy, które mogą się różnić w zależności od narzędzia.

  1. jeśli honoruje środowisko przestrzeni roboczej (ten element jest zawsze udokumentowany na stronie pomocy narzędzia)
  2. jeśli może korzystać z in_memoryobszaru roboczego (ten element może nie być wyraźnie udokumentowany. Bardziej prawdopodobne jest wyświetlenie notatki, jeśli NIE JEST obsługiwany in_memory)

Aby po prostu odpowiedzieć „czy możesz ustawić środowisko pracy środowiska na in_memory”. Odpowiedź brzmi tak.

>>> 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 honoruje środowisko robocze zgodnie z dokumentacją i wyjaśnił przykłady Pythona. Test pokazuje, że możesz zapisać dane wyjściowe in_memoryi pracować z tym odwołaniem do zmiennej ... w celu wprowadzenia innego narzędzia lub zapisania wyniku

>>> 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
źródło
-1

Niestety nie sądzę, aby ustawienie obszaru roboczego na lokalizację in_memory, tak jak w pytaniu, było możliwe; W taki sposób narzędzia geoprzetwarzania domyślnie lokalizują swoje wyjściowe obszary robocze w obszarze roboczym in_memory.

Właśnie próbowałem teraz ustawić obszar roboczy dla '\\in_memory'siebie i przetestowałem go za pomocą prostego CopyFeatures_management()uruchomienia narzędzia. Reprezentacja ciągu arcpy.env.workspacejest wprawdzie ustawiona na '\\in_memory', ale myślę, że CopyFeatures_management()w tym przypadku narzędzie nie przestrzega ustawienia środowiska roboczego.

Byłoby jednak niesamowicie, gdybyśmy mogli ustawić in_memoryjako domyślny obszar roboczy na poziomie dokumentu mapy. Może mógłbyś podnieść to jako pomysł ArcGIS?

Powodzenia.

EDYTOWAĆ:

Hej, myślałem również, ponieważ używasz narzędzia Snap Pour Point , być może będziemy musieli podejść do tego w inny sposób. Wydaje się, że Snap Pour Point działa bezpośrednio na klasę operacji punktów krzepnięcia i nie tworzy wyjściowej klasy operacji jako część wyniku narzędzia. Czy moglibyśmy stworzyć tymczasową, in_memory kopię punktów zalewania i pracować stamtąd?

EDYCJA do EDYCJI:

Och, prawda, ok, wspominałeś, że zdajesz sobie z tego sprawę - przepraszam.

Jim
źródło
Mogę to zrobić (pomysł ArcGIS). Zastanawiam się, dlaczego ludzie głosowaliby na to pytanie? Zgadzam się z tobą Jim, byłoby wspaniale.
Jeśli nie wiesz - wystarczy GIS
Ach, teraz mam pytanie. Tak, Jim ma rację, ustawienie takiego obszaru roboczego nic nie robi. Musisz podać in_memory dla swoich indywidualnych procesów. Nie można ustawić go domyślnie przy takim zachowaniu.
Thomas,
1
Głosowanie w dół mogło wynikać z krótkiej długości pytania. Rozumiem jednak, co masz na myśli - może zredagujesz swoje pytanie nieco bardziej kontekstowo, a inni zagłosują z powrotem?
Jim,
Ok, to jest tak bezpośrednie pytanie, że nie widziałem potrzeby, żeby go puchnąć. Zrobię jak mówisz.
Jeśli nie wiesz - wystarczy GIS
przeredagowano pytanie, aby sprawdzić, czy istnieje inny sposób.
Jeśli nie wiesz - wystarczy GIS