การตั้งค่าหน่วยความจำในพื้นที่ทำงานใน ArcPy?


11

เป็นไปได้ไหมที่จะตั้งค่าenv.workspace = "in_memory"ใน ArcPy โดยใช้ทั้ง ArcGIS Pro และ ArcGIS 10.2.2 (หรือ 10.3)

สิ่งที่ฉันพยายามทำคือรับเอาต์พุตของการดำเนินการsnap pour point ที่เขียนลงหน่วยความจำตรงข้ามกับดิสก์

ฉันรู้ว่าฉันสามารถเขียนลงดิสก์แล้วนำไปไว้ในหน่วยความจำได้ แต่ก็ไม่ได้ช่วยอะไร ฉันกำลังพยายามเพิ่มประสิทธิภาพชุดของงานลดการใช้การเขียนลงในสื่อทางกายภาพผลลัพธ์ของกระบวนการที่จำเป็นเพียงแค่เป็นอินพุตสำหรับกระบวนการถัดไป

คำตอบ:


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

-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 ปรากฏขึ้นเพื่อกระทำโดยตรงกับคลาสคุณลักษณะจุดไหลและไม่สร้างคลาสคุณลักษณะเอาท์พุทเป็นส่วนหนึ่งของผลลัพธ์ของเครื่องมือ เราสามารถสร้างสำเนาเทมเพลตจุดไหลและทำงานจากที่นั่นชั่วคราวได้หรือไม่

แก้ไขเป็นแก้ไข:

โอ้จริงแล้วคุณพูดเรื่องนี้ไปแล้ว - ขอโทษ


ฉันอาจทำเช่นนั้น (ความคิด ArcGIS) ฉันสงสัยว่าทำไมผู้คนถึงลงคะแนนคำถามนี้ ฉันเห็นด้วยกับคุณจิมมันจะยอดเยี่ยม
หากคุณไม่ทราบ - เพียงแค่ GIS

อ่าฉันได้รับคำถามตอนนี้ ใช่จิมถูกต้องตั้งค่าพื้นที่ทำงานเหมือนที่ไม่ทำอะไรเลย คุณต้องระบุ in_memory สำหรับกระบวนการส่วนตัวของคุณ คุณไม่สามารถเริ่มต้นด้วยการทำงานนั้นได้
โทมัส

1
คะแนนโหวตอาจมาจากคำถามของคุณในระยะสั้น ฉันเห็นสิ่งที่คุณหมายถึง - อาจแก้ไขคำถามของคุณเล็กน้อยด้วยบริบทเพิ่มเติมและคนอื่น ๆ จะโหวตให้สำรอง
จิม

ตกลงมันเป็นคำถามที่ตรงไปตรงมาฉันไม่เห็นความจำเป็นที่จะต้องทำมันขึ้นมา ฉันจะทำตามที่คุณพูด
หากคุณไม่ทราบ - เพียงแค่ GIS

ตั้งคำถามใหม่เพื่อดูว่ามีวิธีอื่นอยู่หรือไม่
หากคุณไม่ทราบ - เพียงแค่ GIS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.