วันพุธที่ 23 กุมภาพันธ์ พ.ศ. 2554

จัดเก็บไฟล์ภาพ "ปิรามิดภายนอก" หรือ "ปิรามิดภายใน" ดี

ในกลุ่มวิจัยผม หลายปีก่อนมีนักวิจัยทำงาน mapserver / map service ปัญหาที่พบบ่อย คือตัดสินใจว่า จะนำไฟล์แผนที่ภาพขนาดใหญ่ในรูปแบบ GeoTIFF ติดตั้งเข้าในระบบเซอฟร์แวอร์ อย่างไรดี เพื่อให้เรียกดู การย่อขยายทำได้เร็ว
ปกติเรามี 2 แนวทาง
1) "ปิรามิดภายใน" นำ GeoTIFF มาสร้าง image pyramid ด้วย gdal_addo "gdal add overlay" ข้อดีคือจัดการง่าย มีไฟล์ GeoTIFF หนึ่งไฟล์เช่นเดิม แม้ว่าขนาดไฟล์จะเพิ่ม 33% ก็ยินดีรับไปใช้อย่างยิ่ง
2) "ปิรามิดภายนอก" นำ GeoTIFF มาสร้างปิรามิดหลายชั้น แต่ละชั้นคือไฟล์ GeoTIFF ใหม่ วิธีนี้จะได้ไฟล์ geotiff เล็ก แล้วจัดโครงสร้างใน mapfile (UMN Mapserver) คุมด้วย scale min/max

ที่คาใจคือแบบใหนเร็วกว่า และโปรแกรมประยุกต์ผ่านเวปประเภทให้บริการแผนที่ภาพ เราให้ความสำคัญกับความเร็วเป็นเรื่องแรก
แล้วคำถามนี้ประทุขึ้น ผมเชื่อสะสมหลายๆค่ายทั่วโลก จนร้อนถึงศาสดา Frank Warmerdam ได้รับการเรียกร้องจากผู้ใช้และการสนับสนุนจาก MapGears และ USACE ให้ตรวจสอบและปรับปรุง ซึ่ง Frank อธิบายให้พวกเราฟังว่า โดยโลจิก เราน่าจะเห็นการอ่าน "ปิรามิดภายใน" น่าจะเร็วกว่า การอ่าน "ปิรามิดภายนอก" ที่ต้องวิ่งไปเปิดภายหลายไฟล์ อีกทั้งตัดสิ้นใจเงื่อนใขสเกล แต่ในความเป็นจริงปัจจุบัน "ปิรามิดภายใน" กลับประสิทธิภาพต่ำกว่าถึง 3 เท่า ตามกราฟ


หลังจากนี้น่าจะสบายใจได้ Frank ได้แก้ใข และสร้างกลับเข้าไปที่ไลบรารี่พื้นฐานคือ libtiff ในเร็ววัน
สรุป หลังจาก libtiff ใหม่ ซอฟต์แวร์ ทุกตัวที่ใช้ ความสามารถทั้งสองแบบนี้ได้ ก็จะทำงานได้เร็วพอๆกัน
อ่านกูรู ว่าเขาค้นหาปัญหาและแก้ใขอย่างไร เต็มๆได้ที่
http://fwarmerdam.blogspot.com/2011/02/mapserver-tiff-overview-performance.html

อนี่งจะเห็นว่ากรณี Super Overlay ของ GoogleEarth ใช้ ปิรามิดภายนอก + ไทล ร่วมกัน เช่น gdal2tiles ทำให้

ไม่มีความคิดเห็น: