ฉันพยายามรวม 14 geotiff แบบนี้:
geotiff แต่ละอันมีค่าประมาณ 50Mb ฉันต้องการ geotiff ที่เอาต์พุต
เวิร์กโฟลว์ของฉัน:
gdalbuildvrt -input_file_list list.txt test.vrt
(ที่รายการของฉันมีชื่อของ tifs)
จากนั้น:
gdal_translate -of Gtiff test.vrt test.tif
Input file size is 79841, 59955
มันใช้งานได้ แต่ผลที่ได้คือ geotiff ที่ 13,3 Gb! สำหรับไฟล์ 14 ไฟล์แต่ละ 50 Mb ฉันพยายาม Geotiff ที่ 700 Mb ไม่ใช่ 13 Gb
ฉันรู้ว่า gdal ไม่บีบอัดตามค่าเริ่มต้นดังนั้นฉันลองคำสั่งนี้:
gdal_translate -of Gtiff -co COMPRESS=JPEG test.vrt test_compressed.tif
แต่ "ผสาน" ของไฟล์ใหญ่เกินไปสำหรับการบีบอัด JPEG:
Input file size is 79841, 59955
0ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: An error occured while writing a dirty block
...
ดังนั้นฉันจึงลองเวิร์กโฟลว์อื่นและแปลงไฟล์ tif ทั้งหมดของฉันเป็น jpeg (14 Mb แต่ละอัน) สร้างไฟล์ vrt และแปลด้วยการบีบอัด LZW แต่พิกัดผลผลิตมีค่าประมาณ 5 Gb
คุณช่วยบอกฉันได้ว่าวิธีปฏิบัติที่ดีที่สุดในการทำงานคืออะไรและถ้าเป็นไปได้ที่จะได้รับ geotiff 14 * 50Mb หนึ่งอัน?
ฉันไม่ได้ลอง แต่ฉันคิดถึงการรวม tifs นี้ใน photoshop จากนั้นทำการคำนวณตำแหน่งทางภูมิศาสตร์ใหม่ด้วยพิกัดบนซ้าย / ขวาล่าง ด้วยเวิร์กโฟลว์นี้ฉันคิดว่าฉันจะมี 14 * 50 Mb แต่ฉันไม่แน่ใจ และฉันต้องการเรียนรู้หลักปฏิบัติที่ดีที่สุดของ gdal ดังนั้นฉันจึงไม่ได้ลองสักครู่
การกัด: ถ้าอินพุตเป็น tif ด้วย 8 บิตและการส่งออกเป็น 32 บิตโดยค่าเริ่มต้นคุณจะพบปัญหาร้ายแรง เพื่อให้แน่ใจว่าคุณใช้คำจำกัดความของไบต์ตามที่เป็นอยู่ และจำไว้ว่า tif เต็มจะเป็นปัญหา มี 20x50mb เป็น tiff เป็นรูปสี่เหลี่ยมผืนผ้าเสมอ
ถ้าฉันเข้าใจตัวเลขที่ฉันชี้เป็นสีเขียวบนสกรีนช็อตนี้จะต้องเหมือนกันทางซ้ายและขวาใช่ไหม
ภาพที่ส่งออกของคุณจะมีพิกเซลมากกว่าผลรวมของภาพที่คุณป้อน แต่สิ่งนี้ไม่ได้อธิบายความแตกต่างที่มีขนาดใหญ่ ฉันขอแนะนำให้คุณดูที่ลักษณะของภาพของคุณตาม gdalinfo เพื่อดูว่ามีการใช้การบีบอัดใดและตรวจสอบว่าส่วนขยายนั้นถูกต้อง
14 tifs จาก 50 Mb เดิมที 14 tifs ของ 700 Mb ที่ฉันประมวลผลด้วย gdal_translate ด้วย -co COMPRESS = JPEG ฉันบีบอัดแรสเตอร์เพื่อลดจำนวน Mb แต่อาจไม่ใช่ความคิดที่ดีใช่ไหม
ภาพหน้าจอนี้แสดงถึงข้อมูล 2 gdal ของ geotiff เดียวกัน (01.tif) ที่ด้านซ้ายของภาพหน้าจอคือ gdalinfo ของ Gtiff ที่ไม่บีบอัด 700 Mb สิ้นสุด Gtiff เดียวกันด้วย COMPRESS = JPEG ดังนั้น 50 Mb, โดยความต่างของสีเขียว:
ตามที่ฉันขอบเขตถูกต้องเพราะใน qgis มันตรงกับแหล่งข้อมูลอื่นและภาพจากดาวเทียม
* สมมติว่าภาพอินพุตของคุณมีขนาดเท่ากันมันจะทำให้ 20,000 * 12000 พิกเซลต่อภาพอินพุตซึ่งมีขนาดใหญ่สำหรับภาพ 50 Mb บางทีคุณอาจข้ามขอบเขตของระบบพิกัดเมื่อคุณสร้างโมเสค *
ฉันไม่แน่ใจว่าจะเข้าใจสิ่งที่คุณหมายถึงโดย "ข้ามขอบเขต" แต่ฉันพยายามเปิด 5 Gb LZW ของฉันใน QGIS และขอบเขตนั้นดีเพราะมันตรงกับแหล่งข้อมูลอื่น ๆ
คำตอบของคุณทำให้ฉันรู้ว่า Gtiff มีขนาดไม่เท่ากันคุณคิดว่าอาจเป็นสาเหตุของการเพิ่มขนาดเมื่อรวมกันหรือไม่ เพราะ gdal ชอบไฟล์ที่มีขนาดเท่ากัน ฉันสร้าง gdalinfo ใน Gtiff แต่ละอันเพื่อให้ได้ขนาดของมันมีความแตกต่างเล็กน้อยระหว่างขนาดของ Gtiffs:
02.tif Size is 19956, 11981
03.tif Size is 19959, 11993
04.tif Size is 19961, 11992
05.tif Size is 19958, 11993
06.tif Size is 19958, 11990
07.tif Size is 19956, 11984
08.tif Size is 19956, 11993
09.tif Size is 19958, 11993
10.tif Size is 19958, 11989
11.tif Size is 19958, 11985
12.tif Size is 19958, 11993
13.tif Size is 19959, 11993
14.tif Size is 19960, 11994
จากนั้นคุณควรดูที่ความลึกพิกเซลของภาพของคุณ: หากอินพุตของคุณอยู่ในหน่วยไบต์> จากนั้นคุณควรเก็บไบต์ gdal_translate -of Gtiff -ot ไบต์ -co COMPRESS = LZW test.vrt test.tif
ฉันลองคำสั่งนี้ แต่ gdal บอกฉันว่าขนาดของ tiff เกิน
Input file size is 79841, 59955
0...10...20...30...40...50..ERROR 1: TIFFAppendToStrip:Maximum TIFF file size exceeded. Use BIGTIFF=YES creation option.
ERROR 1: WriteEncodedTile/Strip() failed.
แต่ถ้าฉันต้องสร้าง tiff ใหญ่มันก็ไม่ได้แก้ปัญหาของฉันเพราะมันเป็นมากกว่า 4 Gb ความลึกของพิกเซลมีความสำคัญในกรณีของฉันหรือไม่ (รูปภาพ HD ของแผนที่จากนั้นอ้างอิงทางภูมิศาสตร์ไม่ใช่ DEM)
หมายเหตุ 1: การแปลงภาพเป็น jpeg ก่อนการสร้าง vrt ไม่ได้ช่วยอะไรและคุณอาจสูญเสียข้อมูล
ไม่ร้ายแรงหากฉันปล่อยข้อมูลเล็กน้อย แน่นอนว่าฉันไม่ชอบที่จะทำแบบนี้ แต่ถ้าฉันต้องทำมันก็ไม่ใช่ปัญหา ฉันเชื่อว่าผลลัพธ์จะเบาลงหากฉันทำงานกับ jpeg แต่โดยสรุปแล้วมันไม่เป็นความจริงเมื่อผลผลิตเป็น Gtiff ดังนั้นนี่ไม่ใช่ทางออกที่ดี ฉันยอมแพ้วิธีนี้
> หมายเหตุ 2: การใช้ vrt มีประโยชน์: คุณแน่ใจหรือไม่ว่าคุณต้องการ GTiff
ใช่ฉันต้องการ Gtiff เพราะฉันต้องนำเข้ามันในแอปพลิเคชันมือถือซึ่งจำเป็นต้องใช้อินพุต geotiff ในการทำงาน (ฉันคิดว่าแอปสามารถใช้อินพุต PDF geospatial ด้วย แต่ฉันไม่เคยทำงานด้วยและฉันต้องการเข้าใจปัญหาของฉันด้วย gdal, เพราะมันไม่ใช่ครั้งแรกที่ฉันมี)
ฉันพยายาม -co tiled = ใช่ -co bigtiff = ใช่ -co compress = jpeg -co photometric = ycbcr และฉันลอง -co TILED = ใช่ -CO BLOCKXSIZE = 512 -co BLOCKYSIZE = 512
2 คำสั่งเหล่านี้ทำงานได้ดีฉันมีขนาด ~ 700 Mb มันเป็นสิ่งที่ฉันคาดไว้
ตอนนี้ฉันมีปัญหาอื่น: QGIS ไม่สามารถเปิดได้อย่างรวดเร็ว ฉันต้องรอ 15 นาที (แต่ฉันออกก่อน QGIS เปิด tif สำเร็จ) ฉันไม่รู้ว่าทำไม และในแอพ Android ของฉันมันไม่ทำงาน (อาจเป็นสาเหตุของ "tiled = ใช่") ฉันต้องอ่านเอกสารด้วยตัวเอง