วิธีการตัด 'ภาพซ้อน' จากชุดข้อมูลแบบแรสเตอร์โดยใช้ GDAL ได้อย่างไร


22

ฉันกำลังทำงานกับแอพที่ต้องการสร้างไทล์ (jpeg) จากชุดข้อมูลแบบแรสเตอร์ที่กำหนด ความชอบเริ่มต้นของฉันคือการใช้ gdal2tiles.py แต่ดูเหมือนว่าประสิทธิภาพจะดีขึ้น

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

ในต้นแบบของฉันฉันใช้การผูก MapServer C # MapScript เพื่อทำงาน นั่นคือฉันสร้างวัตถุแผนที่วนรอบขอบกระเบื้องทั้งหมดที่ฉันต้องการตัดตั้งขอบเขตวัตถุแผนที่แล้วบันทึกภาพที่ได้ ประสิทธิภาพของวิธีการนี้ดีกว่า gdal2tiles.py อย่างมาก แต่ฉันสงสัยว่าฉันใช้ GDAL โดยตรงหรือไม่ถ้าฉันไม่สามารถทำให้เร็วขึ้นได้ ใครช่วยแนะนำเวิร์กโฟลว์ที่คล้ายกันด้วยวิธี GDAL ได้บ้าง

แก้ไข: หลังจากการวิจัยเพิ่มเติมในวันนี้ฉันพบคำตอบที่อยู่ตรงหน้าฉัน หากคุณดาวน์โหลด FWTools แล้วโฟลเดอร์ csharp \ apps มีจำนวนคลาสที่จะสาธิตการผูก C # GDAL ในกรณีของฉัน GDALRead.cs และ GDALReadDirect.cs เป็นสิ่งที่ฉันกำลังมองหา


2
@vadp, @markusn, @mapperz & คนอื่น ๆ - โปรดอธิบาย นอกเหนือจากการเชื่อมโยงประโยคหนึ่งหรือสองประโยคว่าทำไมคุณจึงคิดว่าเครื่องมือนี้ควรค่าแก่การดูและสิ่งที่แตกต่างจากที่อื่นจะเป็นประโยชน์ เราต้องการคำตอบที่จะเป็นประโยชน์ในอนาคตเช่นกัน ไม่ช้าก็เร็วลิงก์ link-rot นัดหยุดงานและถ้าเรามี URL มันก็ยากที่จะค้นหาว่าโครงการเกิดขึ้นใหม่ที่ไหน
matt wilkie

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

ฉันไม่สามารถเพิ่มความคิดเห็นให้กับโพสต์ของฉันเอง :( แต่ gdal_tiler.py ยังรองรับการประมวลผลแบบทวีคูณ แต่ด้วยวิธีการที่ดุร้ายมาก: มันประมวลผลแหล่ง 'n' ในครั้งเดียวอย่างไรก็ตามมันทำให้เกิดผลในเชิงบวก :)
Vadim

คำตอบ:


5

มีคนใช้เวลาทำ gdal2tiles.py ใช้โปรเซสเซอร์หลายตัว: ขนาน gdal

ฉันเคยใช้มันและดูเหมือนว่าจะทำงาน ประสบความสำเร็จในการใช้ประโยชน์จากทั้ง 4 คอร์ถึง 100% และลดเวลาทั้งหมดในการสร้างไทล์ลงเหลือ 1 ใน 4 ของเวลาดั้งเดิม


คุณสามารถตรวจสอบ gdal2tiles_parallel.py gitlab.com/GitLabRGI/geopackage-python ฉันชอบ comme
GeospatialInformationTech


1

ใน บริษัท ของฉันเราเขียนสคริปต์ไพ ธ อนแบบกำหนดเองโดยใช้ gdal_warp (ก่อนที่เราจะรู้ว่ามี gdal2tiles อยู่) มันเร็วขึ้นแล้ว g2t, esspecialy เมื่อเราเขียนมันใหม่เพื่อให้ทำงานบนหลายคอร์ (ใช้ python threadpool) นอกจากนี้ยังผลิตกระเบื้องคุณภาพสูงกว่า (การแก้ไข lanczos บน g2t ดูเหมือนว่าจะทำงานได้ไม่ดีใน gdal_warp ทำให้กระเบื้องมีความประหลาดใจ)

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



0

อีกทางเลือกหนึ่งคือใช้TileCache (WMS-C) แม้ว่าฉันไม่เคยใช้ gdal2tiles มาก่อนฉันไม่คาดหวังว่า TileCache จะปรับปรุงประสิทธิภาพการทำงานให้ดีขึ้น

อย่างไรก็ตามกลยุทธ์ต่อไปนี้สามารถเพิ่มความเร็วในการปูกระเบื้อง:

  • Metatiling หากใช้ TileCache (ฉันสงสัยว่า gdal2tiles มีคุณสมบัติคล้ายกัน)
  • ในกรณีที่ข้อมูลแรสเตอร์เป็น ortophoto ใหญ่ใช้รูปแบบเหมือนECW เนื่องจากรูปแบบนี้มีการคลายการบีบอัดบางส่วนโดยใช้รูปแบบนี้คุณจะได้รับประสิทธิภาพที่เพิ่มขึ้นอย่างมาก

0

สคริปต์ gdal_tiler.py จากhttp://code.google.com/p/tilers-toolsอาจเป็นตัวเลือกที่มีประโยชน์

โดยปกติแล้วจะแสดงประสิทธิภาพที่ดีมากเมื่อเปรียบเทียบกับ gdal2tiles.py และควรทำงานกับแหล่ง GDAL (ชุดข้อมูล) ใด ๆ โดยเฉพาะอย่างยิ่งไม่จำเป็นต้องมีการแปลงชุดข้อมูลต้นฉบับเป็น RGB


-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-pythonหาก geopackage หรือ MBTILES ไม่จำเป็นต้องใช้ python ซึ่งสร้างโดยกำเนิดด้วย gdal_translate.EXE คุณต้องเรียกใช้ gdaladdo เพื่อเพิ่มระดับการซูมมากกว่าหนึ่งระดับ ฉันยังใช้ qtiles / qmetatiles สำหรับเดสก์ท็อป qgis ยังคงไม่มีอะไรสามารถแข่งขันกับซอฟต์แวร์เชิงพาณิชย์ maptiler ถ้าคุณต้องการโฟลเดอร์ของไพ่เพียงแปลง MBTILES เป็น TMS หรือ XYZ ด้วย mbUtil python


ลิงก์ใช้งานไม่ได้อีกต่อไป
AndrewHarvey

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