วิธีที่ดีที่สุดในการคลิปไฟล์ ECW แรสเตอร์ขนาดใหญ่?


9

ฉันพยายามคลิป ECW ขนาดใหญ่ (รายละเอียดด้านล่าง) แต่ไฟล์แรสเตอร์มีขนาดใหญ่เกินไปที่จะประมวลผลทั้งหมด

รายละเอียดบางส่วนของ ECW ด้านล่าง

ไดร์เวอร์: ECW / ERDAS เวฟที่บีบอัด (SDK 5.0)

ขนาดไฟล์: 50gb ขนาดคือ 450000, 565081 ขนาดพิกเซล: 0.15 0.15 COLORSPACE = RGB COMPRESSION_RATE_TARGET = 9 VERSION = 2 จำนวนวง: 4

พื้นที่ที่ฉันต้องการคลิปมีขนาดประมาณ 1/5 ของไฟล์ต้นฉบับ

นี่คือวิธีที่ฉันได้ลองโดยไม่ประสบความสำเร็จ:

  1. ใช้ Arcgis เพื่อบันทึก ecw เป็นรูปแบบ / รูปแบบอื่น ๆ ... (ฉันเลิกไปอย่างรวดเร็ว)

  2. Qgis ใช้แล้วและเครื่องมือ clipper ของมัน ... การสร้างไฟล์ยังคงค้างอยู่ที่ประมาณ 40%

  3. ใช้ gdal_translate จาก OSGeo4W พร้อมตัวเลือกอื่นนอกเหนือจาก Qgis (พยายามคิดว่า MAYBE จะช่วยให้ความทรงจำบางอย่างที่ไม่ได้ใช้ Qgis จะเป็นเคล็ดลับ)

  4. ใช้ gdal_retile คิดว่าฉันจะตัดภาพออกเป็นชิ้น ๆ แล้วหยิบภาพที่ฉันต้องการ คำสั่ง "gdal_retile -ps 10000 10000 -of ecw -tileIndex tile.shp -targetDir input.ecw สิ่งนี้ขัดข้องเร็วยิ่งขึ้น"

ไม่มีใครมีความคิด?

สำหรับข้อมูลฉันเรียกใช้ windows 7 64 บิตบน i5-3470 3.2Ghz ที่มีหน่วยความจำ 16gb

คำตอบ:


5

ความคิดอื่น ๆ ที่คุณสามารถลอง:

  1. gdal_translate ด้วยสวิตช์ -srwin
  2. gdalwarp พร้อมสวิตช์ -cutline และ -crop_to_cutline และ -wm อันสุดท้ายระบุหน่วยความจำสำหรับการแคชและอาจทำให้คุณได้รับปัญหาที่คุณมีโดยใช้ clipper ใน QGIS (เพราะนี่คือฟังก์ชั่นหลักเดียวกัน)
  3. เครื่องคำนวณแรสเตอร์ QGIS ตั้งค่าขอบเขตพื้นที่ที่คุณต้องการ (ง่ายกว่า clipper)
  4. SAGA-> คลิปกริดที่มีรูปหลายเหลี่ยม - ใครจะรู้อาจเป็นหน่วยความจำที่มีประสิทธิภาพมากกว่า
  5. โค้ดวิธีแก้ปัญหาโดยใช้ Python และ Numpy / SciPy เพื่ออ่านเพียงส่วนย่อยของแรสเตอร์ลงในหน่วยความจำและบันทึกไว้

ฉันสงสัยว่าการทำครอบตัดที่ง่ายมาก (ไม่ว่าจะใช้เครื่องคำนวณแรสเตอร์หรือสวิตช์ -srcwin ใน gdal_translate) จะมีหน่วยความจำน้อยหิวกว่าการครอบตัดด้วยรูปหลายเหลี่ยมเพราะคุณไม่มีการตรวจสอบและแปลงรูปทรงเรขาคณิต ตัวเลือกที่ 5 ควรใช้หน่วยความจำน้อยที่สุดเท่าที่คุณอ่านในสิ่งที่คุณต้องการ ดูบทช่วยสอนนี้ถ้าคุณต้องการ 'วิธีการ' (ปรับบิตในการอ่านและการเขียนโดยบล็อก)


ขอบคุณสำหรับคำตอบ! ฉันจะลองใช้ SAGA และถ้ามันไม่ทำงานฉันจะไปกับ Numpy
Blue

5

คุณสามารถตัดมันโดยตรงด้วยเครื่องมือของgdal gdal_translate ถ้าคุณรู้พิกัดของพื้นที่ที่คุณสนใจถ้าอ้างอิงทางภูมิศาสตร์:

gdal_translate -projwin [ulx uly lrx lry] infile outfile  

หากไม่ได้ใช้-srswinธงดังนี้:

gdal_translate -srcwin [xoff yoff xsize ysize] infile outfile

อีกตัวเลือกหนึ่งคือการสร้างแรสเตอร์ 'เสมือน' (ไม่กี่กิโลไบต์) จุดที่ชุดแรกของคุณกับgdalbuildvrt

gdalbuildvrt -te [xmin ymin xmax ymax] infile outfile.vrt

โชคไม่ดีที่คุณจะต้องมีไฟล์อ้างอิงทางภูมิศาสตร์สำหรับการใช้ gdalbuildvrt

หลังจากที่คุณคลิปแล้วอย่าลืมสร้างปิรามิดเพื่อให้ดูง่าย คำสั่งต่อไปนี้จะสร้างปิรามิดภายนอกที่ถูกบีบอัดด้วยอัลกอริทึมDEFLATE (lossless):

gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16

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

gdalinfo -stats outfile

ขอบคุณสำหรับคำตอบ ฉันได้สร้างแรสเตอร์เสมือนจริงแล้วและรัน <code> gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16 </code> ฉันไม่แน่ใจเหมือนกันว่าทำไมฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ข้อผิดพลาด 1: ไม่สามารถสร้างไฟล์ TIFF เนื่องจากหายไป ตัวแปลงสัญญาณสำหรับ DEFLATE การสร้างภาพรวมล้มเหลว
บลู

ตรวจสอบข้อบกพร่องqgis-bug: 8782และosge4w-bug: 382หากพวกเขาอธิบายกรณีของคุณ ในขณะเดียวกันพยายามที่จะสร้างภาพรวมโดยไม่มีกลไกการบีบอัดใด ๆ หรือเลือกอีกหนึ่ง
nickves

ดูเหมือนว่าฉันได้มันทำงานในขั้นตอนที่ 2: จากนั้นgdaladdo -ro input.vrt 2 4 8 16 gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE input.vrt 2 4 8 16เป้าหมายของฉันคือท้ายด้วย ECW ดังนั้นฉันพยายามgdal_translate -of ECW input.vrt output.ecw และมีข้อผิดพลาดต่อไปนี้:0ERROR 6: GDALDriver::Create() ... no create method implemented for this format.
สีฟ้า

@blue ECW เป็นรูปแบบที่เป็นกรรมสิทธิ์และต้องการการดูแลเป็นพิเศษ กรุณาตรวจสอบก่อนหาก GDAL สามารถเขียนใน ECW gdalinfo --formatsกับ หากคุณไม่เห็น ECW ในรายการให้ลองทำตามคำแนะนำเหล่านี้: faunalia.pt/node/438
nickves

0

การใช้ 'คลิป' แบบตรงgdalwarpควรใช้งานได้ (ฉันรู้ว่านี่เป็นคำถามเก่าแก่ของเฮลล่า: 18 เดือน IRL เป็นเหมือนยุคทางธรณีวิทยาในอินเทอร์เน็ตปี)

ฉันมีเสาอากาศ 70Gb (ECW, 94000x81000 พิกเซลที่ 10 ซม. / พิกเซล) และ GDAL สามารถคลิปมันโดยใช้ไฟล์รูปร่างโดยพลการ

gdalwarp -cutline [clipfile] -crop_to_cutline [infile] [outfile]

ที่บรรทัดรับคำสั่งของ Windows (ฉันรู้ว่าโซลูชันนี้ต้องการสร้างรูปร่างไฟล์สำหรับพื้นที่เป้าหมายที่น่าสนใจ แต่นั่นไม่ใช่ความท้าทายที่ยิ่งใหญ่ที่สุดที่ GIS รู้จัก)

หากต้องการแยกก้อนขนาดครึ่งชานเมืองใช้เวลา ~ 0.4 วินาที เพื่อแบ่งไฟล์เป็นไตรมาสใช้เวลา 4sec รายละเอียดเครื่องของฉันไม่แตกต่างกันอย่างมาก (i7-4770 @ 3.4GHz, RAM 16GB, Win7-64 Ultimate)


gdalwarp ถูกกล่าวถึงแล้ว ข้อมูลเกี่ยวกับผลการปฏิบัติงานและขนาดตัวอย่างภาพที่เฉพาะเจาะจงเป็นยังยินดีต้อนรับ แต่จริงๆนี้ควรจะเป็นความคิดเห็นที่gis.stackexchange.com/a/74450/108 (และทำให้การแก้ไขปัญหามีบรรทัดคำสั่งที่มีรหัสการจัดรูปแบบจะได้รับการต้อนรับด้วย ง่ายต่อการอ่าน)
matt wilkie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.