ArcPy'de bellek çalışma alanında ayarlama?


11

env.workspace = "in_memory"ArcPy'ye hem ArcGIS Pro hem de ArcGIS 10.2.2 (veya 10.3) mimarilerini kullanarak girmek mümkün müdür ?

Ne yapmaya çalışıyorum disk yerine belleğe yazılmış bir ek akma noktası işlemi çıktı almaktır.

Diske yazabileceğimi ve onu belleğe getirebileceğimin farkındayım ama bu yardımcı olmaz. Sadece bir sonraki işleme girdi olarak gerekli olan bir işlemin çıktısını fiziksel ortama yazma kullanımını en aza indiren bir dizi görevi optimize etmeye çalışıyorum.

Yanıtlar:


15

Buraya bir cevap vereceğim çünkü her iki cevap da% 100 doğru değil.

Aletten alete değişebilen 2 öğe vardır.

  1. çalışma alanı ortamını onurlandırıyorsa (bu öğe her zaman araç yardım sayfasında belgelenir)
  2. in_memoryçalışma alanını kullanabilirse (bu öğe açıkça belgelenmemiş olabilir. Desteklemiyorsa bir not görme olasılığı daha yüksektir in_memory)

Basitçe "çevre çalışma alanını in_memory olarak ayarlayabilir misiniz?" Cevap Evet.

>>> 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 , çalışma alanı ortamını belgelerine ve açıkladığı Python örneklerine göre onurlandırır. Bir test, in_memorybaşka bir araca koymak veya sonucu kaydetmek için bu değişken referansına çıktı yazabileceğinizi ve bu referansla çalışabileceğinizi gösterir.

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

Ne yazık ki, çalışma alanını sorunuzdaki gibi in_memory konumuna ayarlamak mümkün değil; Bu şekilde, coğrafi işleme araçları çıkış konumlarını varsayılan olarak çalışma alanına döndürür.

Şimdi çalışma alanını '\\in_memory'kendime ayarlamaya çalıştım ve basit bir CopyFeatures_management()araç çalışmasıyla test ettim . Dize temsili arcpy.env.workspacegerçekten ayarlanır '\\in_memory', ancak CopyFeatures_management()araç bu durumda çalışma alanı ortam ayarına saygı olmadığını düşünüyorum .

in_memoryHarita belge düzeyinde varsayılan çalışma alanı olarak ayarlayabilirsek harika olurdu . Belki bunu bir ArcGIS fikri olarak gündeme getirebilirsin ?

İyi şanslar.

DÜZENLE:

Hey, ayrıca, Akma Noktası Ekleme Aracını kullandığınızdan, buna farklı bir şekilde yaklaşmamız gerekebileceğini düşünüyorum. Yapış Akma Noktası doğrudan akma noktaları özellik sınıfına etki eder ve araç sonucunun bir parçası olarak bir çıkış özellik sınıfı oluşturmaz. Akma noktalarının geçici, bellek içi bir kopyasını oluşturabilir ve oradan çalışabilir miyiz?

DÜZENLEME DÜZENLEME:

Ah doğru, tamam bunu zaten fark ettiğinden bahsettin - üzgünüm.


Bunu yapabilirim (ArcGIS fikri). Acaba insanlar neden bu soruyu oylayacaklar? Sana katılıyorum Jim harika olur.
Eğer bilmiyorsanız

Ah şimdi soruyu alıyorum. Evet Jim, çalışma alanını böyle ayarlamak hiçbir şey yapmaz. Bireysel işlemleriniz için in_memory belirtmelisiniz. Bu davranışla varsayılanı alamazsınız.
Thomas

1
Aşağı oylama sorunuzun kısa süresinden gelmiş olabilir. Ne demek istediğini anlıyorum - belki sorunuzu biraz daha bağlamla düzenleyin ve diğerleri oyunuzu destekleyecek?
Jim

Tamam, bu doğrudan bir soru, onu kabartmak için bir ihtiyaç görmedim. Söylediğin gibi yapacağım.
Eğer bilmiyorsanız

başka bir yol olup olmadığını görmek için soruyu yeniden düzenledi.
Eğer bilmiyorsanız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.