การสร้างการวางซ้อนขั้นสูงด้วย gdal2tiles

Mano Marks จากทีม Google Geo API
กันยายน 2009

วัตถุประสงค์

บทแนะนํานี้จะแนะนําพื้นฐานในการสร้าง Superer-โฆษณาซ้อนทับ ซึ่งเป็นชุดสร้างภาพซ้อนพื้นฐานที่ใช้ NetworkLinks ตามภูมิภาค โดยใช้ยูทิลิตี ไลบรารีข้อมูลภูมิศาสตร์ แบบโอเพนซอร์ส

บทนำ

ภูมิศาสตร์ เช่น Google Earth และ Google Maps จะแสดงภาพจากดาวเทียมและแผนที่แผนที่ แต่บางครั้งคุณอาจต้องการใช้โดเมนของตนเอง ภาพหรือข้อมูลแรสเตอร์มีหลายรูปแบบและมีการใช้งานหลากหลาย

  • การวางภาพจากดาวเทียมหรือภาพถ่ายทางอากาศของคุณเองลงในเบราว์เซอร์ภูมิศาสตร์
  • การวางแผนที่ในอดีตไว้ด้านบนของภาพที่มีอยู่ เช่น เลเยอร์ Rumsey Maps ใน Google Earth
  • การนําเข้าข้อมูล GIS ในรูปแบบแรสเตอร์
  • การวาง LIDAR หรือภาพอินฟราเรดในภูมิศาสตร์ทางภูมิศาสตร์

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

ไทล์แบ่งไฟล์ภาพออกเป็นรูปภาพต่างๆ ที่โหลดเมื่อเข้ามาที่มุมมอง คุณจะสร้างรูปภาพความละเอียดต่ําหนึ่งรูปสําหรับแสดงขณะที่ผู้ใช้ซูมออก ในพื้นที่เดียวกัน คุณสร้างรูปภาพที่มีความละเอียดสูงขึ้น 4 ภาพเพื่อให้เห็นได้ใกล้ขึ้น สําหรับแต่ละพื้นที่ที่วางซ้อนด้วยรูปภาพ คุณสร้างรูปภาพความละเอียดสูงขึ้นอีก 4 ภาพสําหรับการซูมเข้าที่มากขึ้น และอื่นๆ ซึ่งเรียกว่าเมธอด quadtree และวิธีที่ไทล์ภาพสําหรับ Google Earth และ Google Maps ขั้นตอนดังกล่าวมีคําอธิบายโดยละเอียดอยู่ในบทความสําหรับนักพัฒนาซอฟต์แวร์ KML เกี่ยวกับภูมิภาค

คุณโดยใช้แอปพลิเคชันแก้ไขกราฟิก เช่น Adobe Shopphoto หรือ GIMP ของ Adobe ได้ด้วยตัวเอง ซึ่งอาจมีความซับซ้อน น่าเบื่อ และเกิดข้อผิดพลาดได้ง่าย นอกจากนี้ยังมีแอปพลิเคชันดีๆ จํานวนมากให้ใช้งานสําหรับ Windows โดยเฉพาะ เช่น Superโฆษณาซ้อนทับ, Arc2Earth และ MapCruncher รวมด้วย CrunchUp2KML

หากต้องการทําให้กระบวนการทํางานโดยอัตโนมัติ หรือเพิ่มฟังก์ชันให้กับแอปพลิเคชันของคุณเอง GDAL มีเครื่องมือจํานวนมากที่จะช่วยให้คุณทํางานกับแรสเตอร์และข้อมูลเวกเตอร์ได้ บทความนี้ครอบคลุมตัวเลือกบรรทัดคําสั่ง อย่างไรก็ตาม ไลบรารียังผสานรวมกับแอปพลิเคชันของคุณเองได้อย่างง่ายดาย สําหรับบทแนะนํานี้ คุณจะใช้ยูทิลิตี gdalinfo, gdal_translate, gdalwarp และ gdal2tiles ส่วนเอาต์พุตสุดท้ายคือการวางซ้อน

ขั้นตอนของบรรทัดคําสั่ง

การใช้ GDAL ที่บรรทัดคําสั่งมี 6 ขั้นตอน

  1. ดาวน์โหลดและติดตั้ง GDAL
  2. ดาวน์โหลดรูปภาพ
  3. ใช้ gdalinfo เพื่อระบุข้อมูลเกี่ยวกับรูปภาพ
  4. ใช้ gdal_translate เพื่ออ้างอิงรูปภาพทางภูมิศาสตร์
  5. ใช้ gdalwarp เพื่อเปลี่ยนการฉายภาพของรูปภาพ
  6. ใช้ gdal2tiles เพื่อแบ่งรูปภาพออกเป็นชิ้นส่วนและสร้างรหัส KML ที่เกี่ยวข้อง

ขั้นตอนที่ 1: ดาวน์โหลดและติดตั้ง GDAL

เริ่มต้นโดยการดาวน์โหลดและติดตั้ง GDAL ตามรายละเอียดที่นี่

ขั้นตอนที่ 2: ดาวน์โหลดรูปภาพ

คุณใช้รูปภาพใดก็ได้ แหล่งข้อมูลทางภูมิศาสตร์บนเว็บมีอยู่หลายแห่ง คุณใช้ทุกองค์ประกอบก็ได้ แต่ควรทราบขอบเขตของรูปภาพ เช่น ละติจูดและลองจิจูดของมุมแต่ละมุมของรูปภาพ บทแนะนํานี้ใช้รูปภาพ NASA Blue Marble ซึ่งพร้อมให้ดาวน์โหลดจากเว็บไซต์ของ NASA ภาพเหล่านี้ถ่ายในปี 2004 และนําเสนอภาพโลกที่สวยงามจากอวกาศ เลือกไฟล์ใดไฟล์หนึ่งที่ด้านล่างขวาของแถบนําทางด้านขวา

หากคุณใช้รูปภาพของตัวเองและทราบว่ารูปภาพดังกล่าวผ่านการระบุตําแหน่งทางภูมิศาสตร์แล้ว ให้ข้ามไปยังขั้นตอนที่ 5 หรือดําเนินการต่อในขั้นตอนที่ 3

ขั้นตอนที่ 3: ดูข้อมูลเกี่ยวกับรูปภาพ

เมื่อติดตั้งไลบรารี GDAL และเลือกรูปภาพแล้ว คุณต้องรับข้อมูลบางอย่างเกี่ยวกับอิมเมจดังกล่าวเพื่อให้สามารถระบุภูมิศาสตร์ได้ กล่าวคือคุณต้องมีตําแหน่งพิกเซลและเส้นของแต่ละมุมของรูปภาพ ถ้าคุณคิดว่ารูปภาพเป็นตารางที่มีคอลัมน์และแถว พิกเซลจะเป็นคอลัมน์ และเส้นคือแถว

GDAL มีเครื่องมือ gdalinfo ที่มีประโยชน์สําหรับจับภาพข้อมูลนี้ เพียงพิมพ์ gdalinfo filename ในบรรทัดคําสั่ง แทนที่ filename ด้วยเส้นทางไปยังไฟล์ คุณจะได้รับเอาต์พุตที่มีลักษณะดังนี้

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

ข้อมูลสําคัญสําหรับบทแนะนํานี้คือบรรทัดด้านซ้ายบน ด้านซ้ายล่าง ด้านขวาบน ด้านขวาล่าง รายการเหล่านี้จะบอกค่าพิกเซลและเส้นของแต่ละมุม ในกรณีนี้ ฝั่งซ้ายบนคือ 0,0 และด้านขวาล่างคือ 21600,10800

ขั้นตอนที่ 4: อ้างอิงรูปภาพ

การอ้างอิงภูมิศาสตร์ในกรณีนี้หมายถึงการสร้างข้อมูลเมตาที่อธิบายตําแหน่งทางภูมิศาสตร์ของแต่ละมุมของรูปภาพ โดยใช้ข้อมูลที่ได้รับในขั้นตอนที่ 3 และ gdal_translate คุณสามารถกําหนดข้อมูลการอ้างอิงทางภูมิศาสตร์ให้กับไฟล์ได้ การดําเนินการนี้จะสร้างไฟล์ VRT จากรูปภาพ world_200401.jpg ชื่อ bluemarble1.vrt ไฟล์ VRT เป็นไฟล์ XML ที่มีข้อมูลเกี่ยวกับการเปลี่ยนรูปแบบ ซึ่งในกรณีนี้คือขั้นตอน gdal_translate เราจะใช้ข้อมูลนี้อีกครั้งในขั้นตอนถัดไปเพื่อสร้างชุดชิ้นส่วนสุดท้าย gdal_translate ให้คุณสร้างเอาต์พุตไฟล์ได้หลายประเภท ซึ่งรวมถึงรูปแบบไฟล์รูปภาพหลัก การใช้เอาต์พุต VRT ช่วยให้คุณปิดไฟล์เอาต์พุตไปจนถึงขั้นตอนสุดท้ายได้ วิธีนี้จะช่วยเพิ่มประสิทธิภาพและลดเวลารอในแต่ละขั้นตอนหากคุณใช้บรรทัดคําสั่ง คุณสามารถเรียกใช้คําสั่งต่อไปนี้

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

ข้อมูลบนเส้นนี้มีมากมาย จึงแบ่งย่อยได้ดังนี้

  • -of คือรูปแบบเอาต์พุต ในกรณีนี้คือ VRT
  • -a_srs กําหนดระบบอ้างอิงเชิงพื้นที่ให้กับไฟล์ ซึ่งหมายความว่าแอปพลิเคชันใดก็ตามกําลังใช้ระบบพิกัดใดอยู่ ในกรณีนี้จะใช้ EPSG:4326 ซึ่งเหมือนกับ WGS84 ซึ่งเป็นระบบพิกัดที่ Google Earth ใช้
  • -gcp หรือจุดควบคุมพื้นดิน จะกําหนดพิกัดให้กับตําแหน่งในไฟล์ ในกรณีนี้ คุณต้องมีจุดเพียง 3 จุด เนื่องจากรูปภาพเป็นสี่เหลี่ยมผืนผ้าและสามารถระบุส่วนที่สี่ได้ง่าย สําหรับ -gcp ให้กําหนด gcp โดยตั้งค่าพิกเซล ตามด้วยหมายเลขบรรทัด จากนั้นตามด้วยลองจิจูดและละติจูด โดยแต่ละรายการจะคั่นด้วยการเว้นวรรค
  • พารามิเตอร์ 2 ตัวสุดท้ายคือไฟล์ต้นฉบับและไฟล์เป้าหมาย

ขั้นตอนที่ 5: แสดงรูปภาพ

รูปภาพต้นฉบับไม่ได้สร้างขึ้นสําหรับรูปวงกลม ซึ่งสร้างขึ้นเพื่อให้ดูเหมือนอยู่ในแนวราบ ในคําศัพท์ GIS จะคาดการณ์ ซึ่งหมายความว่าเป็นการสร้างมิติข้อมูล 2 มิติของออบเจ็กต์ 3 มิติ การฉายภาพต้องบิดเบือนรูปภาพเพื่อให้เป็นไปตามที่คุณคาดไว้ว่าจะเป็นภาพแบนของโลก

เพื่อทําให้ดูถูกต้อง คุณต้องครอบตัดรูปภาพให้พอดีกับโลก โชคดีที่ GDAL มีเครื่องมือดีๆ ให้เช่นกัน เพียงพิมพ์ gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt การดําเนินการนี้จะสร้างไฟล์ Bluemarble2.vrt ใหม่ ซึ่งจะระบุข้อมูลเมตาเกี่ยวกับกระบวนการโค้ง

ขั้นตอนที่ 6: สร้างการ์ด

เกือบเสร็จแล้ว แต่ส่วนนี้จะใช้เวลานานที่สุด หากต้องการสร้างการ์ด ให้พิมพ์ gdal2tiles.py -p geodetic -k bluemarble2.vrt -k บังคับให้เอาต์พุต KML ซึ่งจะสร้างโครงสร้างไดเรกทอรีที่มีการวางซ้อนขั้นสูง เนื่องจากไฟล์รูปภาพแต่ละไฟล์ต้องสร้างแยกกัน ระบบจึงจะใช้เวลาสักครู่ในการเรียกใช้ สําหรับรูปภาพขนาดใหญ่ คุณไปดื่มกาแฟ งีบหลับ เพื่อรับอาหารมื้อเล็กๆ ได้แล้ว เมื่อทําเสร็จแล้ว ให้เปิด doc.kml และสังเกตผลลัพธ์

บทสรุป

บทแนะนํานี้จะขูดรอยต่อสิ่งที่ GDAL ทําได้ แต่ก็มีกลไกที่สะดวกสําหรับการสร้างการ์ด ไลบรารี GDAL หลักเขียนด้วย C++ แต่จะมีการเชื่อมโยงสําหรับ Perl, Python, VB6, R, Ruby, Java และ C#/.NET ซึ่งหมายความว่าคุณจะรวม GDAL เข้ากับแอปพลิเคชันของคุณเองได้โดยง่าย นอกจากนี้ ยูทิลิตีหลายแห่ง รวมทั้ง gdal2tiles ยังเขียนอยู่ใน Python อีกด้วย ซึ่งทําให้รวมไว้ใน Python ได้ง่าย gdal2tiles ยังสามารถสร้างหน้า Google Maps API และ OpenLayer ได้ด้วย