Category: 3D

เมื่อผมลองดี โมดิฟายด์แอพ DJI GO 4 ด้วย Deejayeye-Modder สำหรับโดรน DJI Spark

จากลองของเป็นลองดี

จากตอนที่แล้วเมื่อต้องลองของเอาโดรนเซลฟี่ DJI Spark มาบินทำแผนที่ภาพถ่ายทางอากาศ ตอนนี้เลยคำว่า”ลองของ”ไปไกลหลายช่วงตัวแล้ว เพราะแพ็ตช์หรือโมดิฟายด์แอพ DJI GO 4 เรียกง่ายว่าเป็นการ “ลองดี” ไปแล้ว เพื่อนำโดรนมาบินทำแผนที่ภาพถ่ายทางอากาศโดยที่เปิดหรือใช้ฟีเจอร์ที่ซ่อนไว้ ตอนนี้ฟีเจอร์เทียบได้กับโดรนรุ่นใหญ่เช่น Phantom 4 Pro หรือ Mavic

คำเตือน

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

ต้นทุนความเสี่ยง

มาแจกแจงราคาของสปาร์คกันนิด ผมซื้อสปาร์คแบบ fly combo ราคาในตอนนั้น 23,900 บาท ซื้อแบตเตอรีมาเพิ่มหนึ่งลูกราคา 2000 บาทถ้วน (รวมแบตเตอรีทั้งหมด 3 ลูก) ซื้อกระเป๋าสำหรับใส่โดรนมาครั้งแรก 650 บาทแต่ไม่ถูกใจเพราะใส่ของได้ไม่เยอะ ซื้อมาอีกใบราคา 1850 บาท สาย OTG 200 บาท รวมทั้งหมด 28,600 บาท ใช้เงินขนาดนี้สามารถซื้อสมาร์ทโฟนรุ่นดีๆ ได้สักหนึ่งเครื่องเลยทีเดียว

ทำไมต้องโมดีฟายด์แอพ

ความจริงโดรนแต่ละรุ่นของ DJI แอพจะเป็นส่วนหนึ่งที่เป็นตัวกำหนดว่าตัวไหนมีความสามารถอะไรบ้าง โดรนแต่ละรุ่นจะถูกจัดให้ Product อยู่ในเกรดไหนระดับไหน ตามกำลังซื้อของลูกค้า ลูกค้าที่ต้องการ Premium พันธุ์แท้มีกำลังซื้อสูงก็ควรจะมาซื้อรุ่นเทพ Inspire ที่ราคาเหยียบสองแสนบาทไปใช้ ส่วนใครมีกำลังซื้อลดหลั่นกันมาก็ไล่ตั้งแต่ Phantom 4 Pro, Mavic Pro, Mavic Air จนกระทั่ง DJI Spark โดรนเซลฟี่ราคาถูกที่สุดในไลน์การผลิดของ DJI

ฟีเจอร์ของ DJI Spark ที่ถูกซ่อนคือบินตามเส้นทางที่กำหนด (Waypoint) กับบินเป็นวงโคจร (Orbit) ก่อนหน้านี้ผมพยายามเข้าไปดูข่าวสารตามที่ DJI เคยบอกไว้ว่าอาจจะเอาการบินตามเส้นทางที่กำหนดมาใส่ให้สปาร์ค แต่ก็ตามข่าวมาสี่ ห้าเดือนแล้วก็ไม่มีความคืบหน้าอะไร และในตอนนี้ที่เขียนบทความนี้ ทางดีเจไอก็ออกโดรนรุ่น Mavic Air ตัวใหญ่กว่าสปาร์คนิดหนึ่ง ราคาแพงกว่าประมาณหมื่นกว่าบาท บินได้นานขึ้น gimbal ได้สามแกน (แต่สำหรับคนทำแผนที่ภาพถ่ายทางอากาศสองแกนก็พอครับ) แต่ก่อนจะขายบอกว่าสนับสนุนการบินด้วย waypoint แต่พอออกขายจริงๆ กลับตัดฟีเจอร์นี้ไปดื้อๆ ซะอย่างนั้น ก็ได้ก้อนอิฐไปตามระเบียบไปหลายก้อน

นักโมกลุ่ม Deejayeye-Modder

ผมเข้าไปติดตามข่าวสารบ่อยๆตามฟอรั่มของผู้ใช้โดรน ก็เลยค้นไปเจอว่ามีกลุ่มโมดิฟายด์ (modder) ชื่อรวมๆคือ Deejayeye โมดิฟาย์แอพ DJI Go 4 เพื่อเปิดฟีเจอร์ที่ซ่อนนี้สำหรับโดรนสปาร์ค เป็นโค้ดเปิดใน Github โดยการเอาไฟล์ที่ใช้สำหรับติดตั้งในแอนดรอยด์คือไฟล์ APK (Android Package) มาทำการ patch เพื่อเปิดฟีเจอร์ที่ถูกซ่อนนี้ ในตอนแรกก็ไม่มั่นใจแต่ลองเอามาทำด้วยเครื่องมือที่ทีมงานแนะนำมาพร้อมโค้ด ก็ลองดูกลับทำได้สำเร็จ ลองเอาไฟล์นี้มาติดตั้งในโทรศัพท์แอนดรอยด์ของผมก็สามารถใช้งานได้

ย้อนรอยตอนลองของ

ขอเล่าย้อนรอยสั้นๆก่อนหน้านี้ ผมใช้แอพ Litchi ผมพอใจการทำงานของ Litchi ปัญหาเมื่อโดรนต่อกับรีโมทคอนโทรล (Remote controller) สัญญานหลุดจากกันแต่ก็ reconnect ให้ใหม่ได้เร็ว ไม่ต้องลุ้นมาก แอพมีความเสถียรพอสมควร นานๆจะแครชที แต่ข้อเสียคือสุ่มเสี่ยงกับการไม่ได้รับประกันจาก DJI และข้อเสียอีกอย่างคือไม่สนับสนุนการบินตามเส้นทางที่กำหนด (waypoint) สำหรับโดรน DJI Spark ที่ไม่สนับสนุนเพราะว่าเครื่องมือ SDK (Software Development Kit) ของ DJI ไม่มีไว้ให้นั่นเอง คำว่าไม่สนับสนุนคือสั่งให้บินไปตามเส้นทางไม่ได้ แต่สามารถสร้างเส้น waypoint นี้ได้

ผมกำหนดเส้นทางการบิน (waypoint) จากที่มีในแอพ เรียกว่าสามารถใส่จุดล่วงหน้าจากแอพโดยการจิ้มแต่ละจุดไปบน map แต่ข้อเสียคือไม่สามารถนำเข้าไฟล์จาก kml ได้ เครื่องมือสร้าง auto waypoint จากรูปปิดที่กำหนดให้ก็ไม่มี ตอนบินก็เรียกเส้นทางการบินนี้ให้แสดงบนแผนที่ จากนั้นก็บังคับโดรนบินไปตามเส้นทางเหล่านี้ คุณภาพของการบินให้ตรงกับเส้นทางที่กำหนดนี่ต้องอาศัยทักษะพอสมควร แต่ส่วนใหญ่ผมเป๋ไปด้านซ้ายด้านขวาบ้าง แต่ผมออกแบบให้เส้นแนวบิน Overlap กันมากขึ้นคือให้เส้นแนวบินเข้ามาใกล้กันมากกว่าทฤษฎีจะได้ชดเชยเมื่อบินไม่ตรงแนว ตอนบินก็สั่งให้ gimbal ก้มด้วยมุม 85 องศา (เต็มที่แล้ว ไม่ได้ 90 องศา) จากนั้นก็สั่งถ่ายรูปด้วย interval ทุกๆ 3 วินาที ลองดูรูปด้านล่างจะเห็นว่าแนวบินไม่เป็นเส้นตรงเฉไปเฉมา

ตั้งแต่ผมซื้อโดรนมา เคยเอามาเซลฟี่ประมาณ 4-5 ครั้งแค่นั้นเอง จากนั้นเอามาบินทำแผนที่ภาพถ่ายทางอากาศทั้งหมด ดังนั้นฟีเจอร์ที่ผมต้องการที่สุดก็คือบินตามเส้นทางที่กำหนดเท่านั้นเพราะจะได้เบาแรงเมื่อเอาโดรนขึ้นไปบนฟ้า เพิ่มเติมอีกนิดผมเคยใช้แอพทางการของ DJI GO 4 อยู่ไม่กี่ครั้ง จากนั้นก็ใช้ Litchi มาตลอด

เมื่อ DJI กลับลำในกรณี Mavic Air

เท่าที่ผมติดตามเป็นแฟนของโดรน DJI มาสักระยะหนึ่งพบว่านอกจากสินค้าที่ดีด้านฮาร์ดแวร์ ส่วนด้านบริการยังไม่ทราบเพราะไม่เคยได้ใช้ ส่วนซอฟต์แวร์จะดีหรือแย่ค่อยมาว่ากันอีกที ในกรณีของ Mavic Air จะวางขายมีการออกสื่อทั้งทางเว็บทางการของ DJI เองว่า Mavic Air สนับสนุนการบินตามเส้นทางที่กำหนด ผมรู้สึกผิดหวังนิดๆว่าไม่น่ารีบซื้อ Spark มาเลย เตรียมตัวขายต่อครับ จะเอาเงินไปซื้อ Mavic Air แต่สุดท้ายฟ้าผ่าเพราะก่อนหน้าจะออกวางขายไม่กี่วัน DJI ก็ตัดฟีเจอร์นี้ออกจากเว็บไซต์แบบหน้าตาเฉย ตอนนั่นผมไม่รู้จะดีใจหรือผิดหวังดี ที่ดีใจคือไม่ได้ขายสปาร์ค ที่ผิดหวังคือนโยบายที่เอาแน่นอนไม่ได้ของ DJI

พบแสงสว่างบนทางแห่งความเสี่ยง

ในที่สุดกับก็มาพบโมดิฟายด์แอพด้วยเครื่องมือของ Deejayeye ตามที่ผมกล่าวไปข้างต้น พยายามอ่านและทำความเข้าใจอยู่หลายวัน คันไม้คันมือทนไม่ไหว ก็เลยตัดสินใจลองดู ถ้าสำเร็จหมายถึงการรับประกันก็สิ้นสุดทันที ผมดาวน์โหลดไฟล์โดยที่ไฟล์ประกอบด้วยโค้ด โครงสร้างไดเรคทอรีเปล่าๆ ที่จะต้องไปดาวน์โหลดเครื่องมือมาใส่ในไดเรคทอรีนี้ และมีไดเรคทอรีที่ต้องไปหาไฟล์ติดตั้งแอพ DJI GO 4 ที่เป็นแพ็คเกจ APK มาใส่เพื่อให้โปรแกรมสามารถแพ็ตช์ได้

แพ็คเกจ APK สามารถหาดาวน์โหลดได้เฉพาะ DJI GO 4 รุ่น 4.1.4 ถึง 4.1.9 แต่รุ่นหลังจากนี้ทาง DJI ได้ทำการ encrypted ไว้ ไม่สามารถหาได้บนดิน ต้องมุดใต้ดินไปหาครับ

ปัญหา OTG (On The Go)

ปัญหาของ OTG บนแอนดรอยด์สำหรับใช้บนแอพ DJI GO 4 ถือว่าเป็นปัญหาอลเวง เดี๋ยว DJI สนับสนุนเดี๋ยวถอดออก ผมซื้อสายมา 200 บาทแต่ไม่ได้ใช้เลย แต่ที่ได้ยินมาคือฝั่ง IOS ใช้ได้ดีไม่ปัญหาเหมือนฝั่งแอนดรอยด์

OTG คือสายเคเบิลที่เอามาต่อระหว่างรีโมทคอนโทรลกับโทรศัพท์มือถือที่ลงแอพ DJI GO 4 คือที่ได้ยินมาตลอด ถ้ามันต่อได้ดีเสถียร จะเป็นประโยชน์มากกว่าการต่อด้วยไวไฟเพราะไวไฟนี้อาจจะไปกวนไวไฟที่ต่อระหว่างรีโมทคอนโทรลกับโดรนที่บินกลางอากาศ

เลือกเวอร์ชั่นของแอพ DJI GO 4

ผมหาแพ็คเกจ apk ของแอพตอนแรกเลือก 4.1.22 รุ่นล่าสุดในขณะที่เขียนบทความ ทำการแพ็ตช์ ติดตั้งลงโทรศัพท์มือถือปรากฎว่าสาย OTG ใช้ไม่ได้ครับ เพราะตอนแรกอ่านผ่านๆว่ารุ่นหลังๆสนับสนุนแล้ว พอไปอ่านดีๆกลับผมว่า DJI ไม่สนับสนุนในแอพรุ่นนี้ สุดท้ายพบว่ารุ่น 4.1.15 ที่สนับสนุน ก็เลยต้องไปหาแพ็คเกจ apk รุ่นนี้มาทำการแพ็ตช์ แล้วทำการติดตั้งลงมือถือ เลือก Flight mode คือปิดการสื่อสารทุกอย่างบนโทรศัพท์มือถือ เปิดแอพ DJI GO 4 รุ่น 4.1.15 ในที่สุด OTG ใช้ได้

เปิดฟีเจอร์ Waypoint

เมื่อเปิดแอพ DJI GO 4 ทำการต่อสายรีโมทคอนโทรล จากนั้นก็ต่อกับโดรน ช่่วงนี้ลองในบ้านได้ ทำการปรับค่า config ต่างๆ แล้วลองแท็บไปในโหมด Fly intelligent จะเห็นว่า การบินด้วยเส้นทางที่กำหนด (Waypoints) เปิดมาเป็นที่เรียบร้อยพร้อมที่จะไปลองทดสอบ

ปัญหาเมื่อเส้นทางกำหนดการบินไม่สามารถกำหนดล่วงหน้าได้

ผมได้บอกไปแล้วว่าด้าน hardware โดรนในค่ายของ DJI ทำได้ยอดเยี่ยม แต่ด้านซอฟท์แวร์ กลับได้ยินเสียงอึงคะนึงหลายๆอย่าง ที่หนักๆแรงๆคือการบินด้วย waypoint ไม่สามารถป้อนหรือใส่ได้ก่อนแบบที่ Litchi หรือแอพตัวอื่นทำได้ จะวางแผนการบินล่วงหน้าทาง DJI ก็มีให้คือเสียเงินไปซื้อ DJI Ground Station สำหรับ IOS แต่ไม่มีสำหรับฝั่งแอนดรอยด์ที่ผมใช้อยู่

การวาง waypoint จะต้องเอาเครื่องโดรนขึ้นไปบนฟ้าตำแหน่งที่จะต้องการบินแล้วทำการ record จุดที่ละจุดจนครบ ฟังดูง่ายสำหรับการตั้ง waypoint สำหรับเอาไปถ่ายภาพสวยๆหรือถ่ายวีดีโอ แต่ไม่ใช่งานบินทำแผนที่ด้วยภาพถ่ายทางอากาศ เพราะเราต้องการเส้นตรงที่ขนานกัน เพื่อให้ overlap ได้ตรงกับที่คำนวณไว้ และเส้นตรงเหล่านี้ไม่ได้มีแค่เส้น สองเส้น บางครั้งเป็นร้อยเส้น จะทำอย่างไรดี และที่ตลกคือเมื่อเราวางจุด waypoint เสร็จ ถ้าเป็นงานถ่ายภาพทำแผนที่ภาพถ่ายทางอากาศ มีเสน waypoint หลายๆเส้น แบตเตอรีก็คงใกล้จะหมด ต้องเอาโดรนลงมาบนพื้นใส่แบตเตอรี่แล้วบินขึ้นไปใหม่ แล้วค่อยใช้ waypoint ในการบินอีกครั้งเพื่อถ่ายภาพ

ปัญหาอีกอย่างคือในการบินตามเส้นทางที่กำหนด ต้องทำการเป็นลำดับ 1, 2, 3, 4, …. (ไม่ต้องถึงไลน์สุดท้ายก็สามารถเรียกโดรนกลับมาได้) แต่ตัวอย่างเช่นต้องการบินจาก 3, 4 ,5, 6 ทำไม่ได้ครับ ต้องไล่ตั้งแต่ 1, 2, 3 ซึ่งเป็นข้อเสียอย่างแรง

ตามล่าหาวิธีการสร้างเส้นทางการบินที่กำหนดล่วงหน้า

จากปัญหาที่พบผมไม่ต้องไปค้นที่ไหนไกล ในกลุ่มนักโมดิฟายด์ ก็มีคนเห็นปัญหานี้ เขาใช้เครื่องที่ root ตามเข้าไปในดูในโฟลเดอร์ของแอพบนมือถือก็พบว่ามีไฟล์ที่เป็นฐานข้อมูล sqlite ข้างในมีตารางที่แสดง waypoint ด้วยสตริงแบบ json จากนั้นก็เพิ่มฟีเจอร์เข้าไปใน DJI GO 4 เพื่อทำให้ไฟล์นี้เป็น public คือเครื่องไม่ root สามารถไปแก้ไขได้ ในขณะนี้รู้ว่าแอพทำการเก็บข้อมูลที่ไหนและรู้รูปแบบคือเป็นฐานข้อมูล sqlite

Mission Planner สุดยอดโปรแกรมออกแบบเส้นทางการบิน

โปรแกรมนี้บน Desktop PC เป็นโปรแกรมฟรี ใช้งานง่ายมาก ไปดาวน์โหลดได้ที่ ลิ๊งค์นี้  โปรแกรมนี้สามารถสร้าง Polygon ด้วยการจุดบน map ได้ง่ายๆ หรือจะนำเข้าจาก shape file ก็ได้ เมื่อได้พื้นที่แล้วสามารถสร้าง waypoint ได้จากการป้อนค่ามุมอะซิมุทแนวการบิน ความสูงของโดรน และค่าอีกหลายๆค่า จากนั้นโปรแกรมจะสร้าง waypoint ให้ ซึ่งเราสามารถจัดเก็บเป็นไฟล์ในรูปแบบรหัสแอสกี้ (text file) ได้ แต่ตอนนี้ได้ไฟล์มาแต่ยังไม่โดนใจแอพ DJI GO 4 ต้องทำการแปลงเป็นฐานข้อมูล sqlite ก่อน

มาลองดูไฟล์ waypoints ที่ได้จากโปรแกรม Mission Planner

QGC WPL 110
0 1 0 16 0 0 0 0 23.864033 90.366674 8.000000 1
1 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86296860 90.36620300 50.000000 1
2 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86312430 90.36512590 50.000000 1
3 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86336720 90.36516850 50.000000 1
4 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86321230 90.36623980 50.000000 1
5 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86345610 90.36627670 50.000000 1
6 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86361010 90.36521110 50.000000 1
7 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86385300 90.36525370 50.000000 1
8 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86369980 90.36631360 50.000000 1
9 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86394360 90.36635050 50.000000 1
10 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86409600 90.36529640 50.000000 1
11 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86433890 90.36533900 50.000000 1
12 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86418730 90.36638740 50.000000 1
13 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86443110 90.36642420 50.000000 1
14 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86458180 90.36538160 50.000000 1
15 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86482470 90.36542420 50.000000 1
16 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86467480 90.36646110 50.000000 1
17 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86491860 90.36649800 50.000000 1
18 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86506770 90.36546680 50.000000 1
19 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86531060 90.36550940 50.000000 1
20 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86516230 90.36653490 50.000000 1

ArduMissionToDJISQL ทูลส์มาช่วยแปลงข้อมูล

และนักโมดิฟายด์ท่านนี้ก็ได้สร้างทูลส์แปลงจาก textfile เป็นไฟล์ sql ซึ่งเป็น text file เช่นเดียวกันแต่เป็นไฟล์โค๊ดภาษา sql เพื่อเตรียมปั๊มป์ข้อมูลนี้เข้าไปในฐานข้อมูล ไปหาดาวน์โหลดได้ที่ฟอรั่มตามลิ๊งค์นี้

ไฟล์ sql ที่ได้จากการแปลง waypoints ก็แบบนี้ครับ

INSERT INTO dji_pilot_dji_groundstation_controller_DataMgr_DJIWPCollectionItem ( distance, pointsJsonStr, autoAddFlag, createdDate )
VALUES (1328.54, ‘{“points”:[{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86296860000000,”lng”:90.36620300000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86312430000000,”lng”:90.36512590000000},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86336720000000,”lng”:90.36516850000000},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86321230000000,”lng”:90.36623980000000},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86345610000000,”lng”:90.36627670000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86361010000000,”lng”:90.36521110000000},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86385300000000,”lng”:90.36525370000000},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86369980000000,”lng”:90.36631360000000},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86394360000000,”lng”:90.36635050000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86409600000000,”lng”:90.36529640000001},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86433890000000,”lng”:90.36533900000001},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86418730000000,”lng”:90.36638739999999},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86443110000000,”lng”:90.36642420000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86458180000000,”lng”:90.36538160000001},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86482470000000,”lng”:90.36542420000001},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86467480000000,”lng”:90.36646110000000},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86491860000000,”lng”:90.36649800000001},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86506770000000,”lng”:90.36546679999999},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86531060000000,”lng”:90.36550939999999},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86516230000000,”lng”:90.36653490000000}]}’,1,1524200609000)

SQLite Studio โปรแกรมช่วยบริหารฐานข้อมูล SQLite

SQLite Studio เป็นโปรแกรมฟรีและเปิดโค้ด ผมใช้มานานแล้ว เมื่อติดตั้งแล้ว ผมจะใช้โอนไฟล์จากแอพ DJI GO 4 ชื่อไฟล์คือ dji_mod_4_1_15.db ในเครื่องผมอยู่ที่ /mnt/storage/DJI/ จากนั้น copy มาฝั่ง desktop pc ทำการแก้ไขด้วย SQLite Studio ด้วยการ Add Database แล้วเลือกไฟล์นี้ จากนั้นมองหาตารางข้อมูลชื่อ “dji_pilot_dji_groundstation_controller_DataMgr_DJIWPCollectionItem” เปิด Sqlite Editor จากนั้นเปิดไฟล์ sql  ด้วย Notepad จากขั้นตอนที่แล้วทำการ copy เนื้อหาไปยังคลิปบอร์ด แล้วทำการ paste ที่ Sqlite Editor นี้แล้วทำการ Execute Query ข้อมูลจะถูกปั๊มป์เข้าไปในฐานข้อมูล จากนั้นจะ copy ไฟล์ ฐานข้อมูลนี้กลับไปยังโทรศัพท์มือถือเพื่อไปทับกับไฟล์เดิม

ทดสอบบินตามเส้นทางที่กำหนด

วันแรกที่ผมต้องการลองบินแบบบินตามเส้นทางที่กำหนด (waypoint) รู้สึกใจไม่ค่อยดี หนึ่งนั้นที่เคยบอกไปว่าไม่ค่อยคุ้นกับแอพ DJI GO 4 เพราะไม่ค่อยได้ใช้ และอีกอย่างคือไฟล์เส้นทางการบินที่เตรียมมาไม่สามารถเปิดดูได้จากแอพ DJI GO 4 ก่อน ว่ามีอะไรบ้าง นี่ก็เป็นข้อเสียที่ร้ายแรงอีกอย่างครับ ทำไมให้เปิดดูไม่ได้ก่อน ต้องเอาโดรนบินขึ้นไปบนฟ้าเท่านั้นจึงจะดูได้ แหมถ้าเป็นยุคซามูไร ทีมงานผู้พัฒนาชุดนี้ควรจะต้องคว้านท้องตัวเอง (เอาฮานะครับ) เมื่อขึ้นไปบนท้องฟ้าแล้วผมก็ดูไฟล์แนวบินที่ผมสร้างเอาไว้ ในฐานข้อมูลนั้นจะมี location ด้วยผมใส่คำอธิบายไปด้วยสั้นๆ เพื่อให้หาไฟล์ง่าย เพราะ DJI GO 4 เลือกที่จะเน้นแสดงผลเส้นทางการบินนี้ด้วยวันเวลาที่สร้างซึ่งดูยากมาก

ครั้งแรกที่ลองบินตาม waypoint ผมเลือกเอาเส้นทางการบินตามแนวรถไฟฟ้าที่กำลังก่อสร้างนอกเมือง บริเวณนั้นมีหนองน้ำเยอะพอสมควร สลับด้วยทุ่งหญ้า เมื่อบินขึ้นท้องฟ้าปรากฎว่าผมไปยืนอยู่ผิดตำแหน่งคือห่างจาก waypoint ไปประมาณ 400 เมตร (ถือว่าไกลสำหรับสปาร์ค) ด้วยความที่ไม่อยากเสียเวลาก็เลย Apply เพื่ออัพโหลด waypoint ชุดนี้เข้าโดรน จากนั้นโดรนก็บินไปตาม waypoint จุดที่ 1 พอบินไปได้สัก 6 เส้น ผมลอง stop เพื่อจะเรียกเครื่องกลับ เป็นเรื่องครับ สัญญาณกลับขาดหายไปดื้อๆ ทั้งๆตอนที่บินอยู่ในตอนนั้นโดรนส่งรูปที่ถ่ายมาให้โทรศัพท์มือถือดูได้ตลอด ก่อนสัญญาณจะหลุดผมดูแล้วมีแบตเตอรีเหลือ 38% เมื่อติดต่อกันไม่ได้ผมก็เดินจ้ำอ้าวไปยังจุดที่โดรนบินค้างอยู่กลางอากาศแต่ไม่ทราบว่าอยู่ตรงไหน ด้วยอารามรีบร้อนกลับเลยไปอีกทางหนึ่ง เมื่อตั้งสติได้ก็มาดูที่แอพอีกทีดูจุดสุดท้ายบนแผนที่ ก็เลยวิ่งกันมาที่จุดนั้น เดชะบุญปรากฎว่าโดรนแลนดิ้งลงมาเอง อยู่กลางถนนลาดยางเล็กๆที่ไม่มีใครใช้ แบตเตอรีกระพริบอยู่ พอผมไปถึงแบตเตอรีก็หมดพอดี ผมลองเปลี่ยนแบตเตอรีลูกใหม่ใส่เข้าไปทดลองบินขึ้นอีกครั้งก็ยังดีอยู่ ไม่มีอะไรเสียหาย เมื่อกลับไปผมเอารูปที่ถ่ายมาดู จุดสุดท้ายที่ถ่ายเป็นทุ่งหญ้า แต่ก็สงสัยว่าเครื่องมาแลนดิ้งลงที่ถนนลาดยางห่างออกไป 20 เมตรได้อย่างไร และปลอดภัยด้วย ถือเป็นความโชคดีมากๆเนื่องจากในบริเวณนั้นส่วนใหญ่เป็นหนองน้ำ

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

ไม่พบปัญหาในการทดสอบในภายหลัง

วันต่อมาผมก็เอาโดรนพร้อมทั้งทำ waypoint ประมาณ 3 ชุด แต่ละชุดผมคำนวณระยะทางและความเร็วของการบินโดรนซึ่งผมไม่ให้เกิน 12 กม.ต่อชม. ใช้เวลาประมาณแค่ 9-10 นาทีเท่านั้น (แบตเตอรีตามสเป็คแล้วใช้ได้ 15 นาที) และจุด home ที่ไปยืนปล่อยโดรนต้องเป็นจุดที่อยู่ในพื้นที่นั้นๆ ป้องกันโดรนบินออกไปไกลทั้งขาไปและขากลับ วันที่สองนี้ไม่มีปัญหาครับ สัญญาณไม่หลุด นิ่ง และที่สำคัญคือในขณะนั้นลมแรงไปนิด เพราะมีเมฆฝนตั้งเค้าไกลๆ แต่โดรนสามารถบินไปตามแนวได้อย่างตรงแนว ผิดกับที่ผมบินด้วย manual แบบหน้ามือกับหลังมือ และแอพก็เตือนตลอดว่าลมแรงให้บินด้วยความระมัดระวัง เมื่อบินจบแนวเส้นทางการบินที่กำหนดไว้แล้ว เครื่องก็บินกลับมาจุดปล่อย (home) ได้อย่างปลอดภัย ลองดูรูปด้านล่างจะเห็นว่าแนวบินเป็นเส้นตรง

สรุป

ผมถือว่าภารกิจลองดีครั้งนี้ประสบความสำเร็จด้วยดีแต่ก็ผ่านความหวุดหวุดหวาดเสียวมาพอสมควรในกรณีที่สัญญาณหลุดจนโดรน landing ลงมาเอง ในส่วนของแอพ DJI GO 4 เองยังมีฟีเจอร์หลายอย่างที่ต้องพัฒนาปรับปรุงอีกมากมาย ตามที่ในฟอรั่มผู้ใช้งานได้เรียกร้องกันมาตลอด สำหรับประสบการณ์ของผมในครั้งนี้ก็ถ่ายทอดให้ผู้อ่านพอหอมปากหอมคอและอย่าได้ขอไฟล์แพ็คเกจที่ผมแพ็ตช์ตัวนี้มาเลยนะครับเพราะเป็นเรื่องการละเมิดลิขสิทธิ์ ติดตามกันต่อไปครับ

DJI Spark – เมื่อต้องลองของเอาโดรนเซลฟี่ไปบินทำแผนที่ภาพถ่ายทางอากาศ

DJI Spark

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

20180107_152500

 

ข้อดี

ใช้ง่าย ราคาย่อมเยาว์ บังคับได้สามอย่างคือทั้งภาษาท่าทางมือ (Gesture), โทรศัพท์มือถือต่อตรงกับโดรน และ รีโมทคอนโทรล (Remote control) ถ้าใช้รีโมทคอนโทรลต้องซื้อมาต่างหากหรือซื้อมารวมเรียกว่า Fly More Combo

ข้อเสีย

สำหรับผมแล้ว ปัญหาประการที่หนึ่งคือสปาร์คไม่สนับสนุนการบินตามเส้นทางที่เรากำหนด (Waypoint) นี่เป็นปัญหาหนักใจสำหรับภารกิจนี้ ผมพยายามดูแอปอื่นที่ไม่ใช่ DJI GO 4 เช่น Litchi, Dronedeploy, Autopilot ทุกแอปไม่สนับสนุน ยกเว้นได้ยินว่า Autopilot บน IOS บินด้วย waypoint ได้ แต่ผมใช้แอนดรอยด์ ตัวนี้เลยตกไป (ผมซื้อ Litchi มาด้วย 800 บาท) แต่อย่างไรก็ตามผู้ใช้ในฟอรั่มของ DJI ก็เรียกร้องฟีเจอร์นี้กันพอสมควร มาดูกันว่าอนาคตผู้ผลิตจะใส่ฟีเจอร์นี้ให้หรือไม่ ถึงแม้เราจะบินด้วยแอปอื่นที่ไม่ DJI GO 4 ก็ตามก็อาจจะไม่ได้รับการรับประกันจาก DJI นี่เป็นปัญหาประการที่สอง

ทำไมต้องบินตามเส้นทางที่กำหนด

คือถ้าโดรนสนับสนุนฟีเจอร์นี้ เราสามารถใส่เส้นทางการบินโดยกำหนดจุดให้ แล้วก็ลากเส้นทางจากจุดเหล่านั้นต่อๆกันไป สำหรับหลักการของการบินภาพถ่ายทางอากาศ แต่ละภาพจะต้องเหลื่อมซ้อนกันนี่เป็นหลักการที่สำคัญมาก เพื่อให้เกิดภาพคู่ (Stereo) ทั้ง overlap ในแนวบินขณะนั้นและ overlap กับแนวบินสองข้างที่ขนานกัน วิธีการกำหนดที่ได้ผลที่สุดคือต้องลากเส้นตรงเป็นแนวบินขนานกันไปในพื้นที่นั้นๆ จากนั้นอาจจะเพิ่มเส้นตัดขวางแต่ห่างๆหน่อยเพื่อให้เกิดภาพอีกมุม จะได้เก็บรายละเอียดได้ครบ เมื่อสร้างเส้นทางการบินแล้ว เอาโดรนหน้างานก็สั่งให้บินขึ้นไปเก็บ โดรนจะบินในโหมด Autonomous จนกระทั่งแบตเตอรี่ใกล้หมดในระดับหนึ่ง โดรนจะคำนวณระยะเวลาบินกลับฐาน (Return to Home) ได้อย่างปลอดภัย

client_2018-01-07_13-44-35

ใช้รีโมทคอนโทรลเมื่อต้องบินทำแผนที่ภาพถ่ายทางอากาศ

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

20180107_152509

เตรียมพื้นที่ที่จะบิน

ในการบินทำแผนที่ภาพถ่ายทางอากาศสิ่งที่สำคัญที่สุดคือ Marker บนพื้นดินเพื่อเป็นจุดบังคับภาพถ่าย (Photo control หรือ Ground control point) วิธีการจะมีการใช้ Maker แบบชั่วคราว เป็นแผ่นไม้อัดทาสีกากบาท อาจจะใช้สีแดงสีขาวทาให้ตัดกันชัดเจน แล้วนำไปวางเป็นจุดๆตามพื้นที่กระจายๆกันไป ให้พอดีไม่น้อยเกินไปหรือไม่มากเกินไป หรือจะใช้แบบถาวรแบบที่ผมใช้คือในโรงงานมันมีถนน ผมเอาสีแดงสีขาวไปพ่นไว้ ขนาดใหญ่ประมาณ 30 cm x 30 cm ให้พอเห็นชัดจากภาพถ่ายทางอากาศ จากนั้นจะเก็บพิกัด Marker เหล่านี้ด้วยวิธีการใช้กล้อง Total Station เก็บค่าพิกัด แต่ถ้าใช้ RTK ก็จะรวดเร็วขึ้นมาก ข้อดีของ Marker แบบถาวรคือจะมาบินกี่รอบก็ยังใช้ได้ เหมาะกับโรงงานหรือพื้นที่ก่อสร้างที่ต้องการตรวจความก้าวหน้าของงาน

2018-01-05_17-49-492018-01-10_11-57-32

ตรวจสภาพอากาศ

สภาพอากาศบางครั้งต้องตรวจเหมือนกันจากเว็บไซต์ได้แก่ฝนตกไหม หรือหมอกจัด ผมเคยนัดกันไปสิบโมงเช้าปรากฎว่าหมอกลงจัดแทบมองกันไม่เห็นดังรูปด้านล่าง ต้องรออีกสองชั่วโมงตอนเที่ยงแดดถึงไล่หมอกออกไปเริ่มบินได้ตอนบ่ายโมง ถ้าวางแผนล่วงหน้าได้จะไม่ต้องไปให้เสียเที่ยว

20180105_095332

จัดเตรียมอุปกรณ์

ชาร์จแบตเตอรี่ของโดรนและรีโมทคอนโทรลให้เรียบร้อย การเอามาใช้ครั้งแรกต้องมีการ activate โดรนเสียก่อนเพื่อให้ DJI GO 4 ได้รู้จักวิธีการต้องไปอ่านคู่มือหรือดูจากยูทูบที่มีคนเอามาลงเยอะมาก สำหรับในที่นี้ผมจะใช้งานด้วยการต่อโดรนเข้ารีโมทคอนโทรล และต่อรีโมทคอนโทรลเข้ากับโทรศัพท์มือถือ เมื่อต่อเรียบร้อยครั้งแรกจะมีการอัพเดทเฟิร์มแวร์ของโดรน จากน้้นทำการคาลิเบรท Compass, IMU ให้เรียบร้อย แล้วต้องมั่นใจว่า Micros SD Card เสียบอยู่ที่โดรนเรียบร้อย

ปัญหาการเชื่อมต่อ

ตอนซื้อมาผู้ขายโดรน จัดสาย OTG มาให้จ่ายตังค์เพิ่มสองร้อยบาท เพื่อมาต่อรีโมทคอนโทรลเข้ากับโทรศัพท์มือถือบอกว่าเสถียรกว่าต่อด้วยไวไฟ แต่ในความเป็นจริงเมื่อมาต่อแล้วกลับพบปัญหาต่อกันได้มองกันเห็น แต่ข้อมูลบางอย่างเช่นสถานะแบตเตอรี GPS กลับไม่ส่งมามือถือ กลับไปดูตามฟอรั่มพบว่า DJI หยุดสนับสนุนมาสักพักใหญ่ๆแล้ว อาจจะมีปัญหาเรื่องไดรเวอร์ของสาย OTG เอาละกลับมาต่อรีโมทคอนโทรลกับโทรศัพท์มือถือด้วยไวไฟอีกครั้ง ที่นี้การเชื่อมต่อไวไฟจะเป็นสองขยักคือ ไวไฟขยักที่ต่อระหว่างโทรศัพท์มือถือกับรีโมทคอนโทรล และไวไฟระหว่างรีโมทคอนโทรลกับโดรน ที่กลัวกันว่าสัญญานไวไฟสองอย่างนี้จะกวนกันทำให้ไม่เสถียร แต่ตอนนี้ไม่มีทางเลือกอื่นต้องใช้

GSD (Ground Sample Distance)

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

วางแผนการบิน

ผมใช้ DroneDeploy มีทั้งเวอร์ชั่นบนโทรศัพท์มือถือและบน Desktop เนื่องจากการบินแบบกำหนดเส้นทาง เราต้องการ GSD (Ground Sample Distance) เท่าไหร่ ถ้าละเอียดมากต้องบินต่ำ แต่แนวบินจะเพิ่มมากขึ้น เอาให้พอเหมาะ จะได้ประหยัดเวลา ประหยัดเงินทอง และที่สำคัญคือข้อมูลมาก จะไปโหลดเครื่องคอมพิวเตอร์ตอนคำนวณอย่างแรง แต่ทางเลือกอื่นก็มีถ้าเสียเงิน สามารถส่งรายการคำนวณไปใช้บริการในคลาวด์ได้ เสียเงินมากก็คำนวณได้ผลลัพธ์เร็วมาก แต่ผมไม่ได้ใช้ขอไม่พูดถึงในที่นี้
จากนั้นกำหนดพื้นลงที่ต้องการบินคร่าวๆบนโปรแกรม สามารถขยับมุมพื้นที่ได้สะดวก เพิ่มได้ง่าย จากนั้นกำหนดความสูงของแนวบิน โปรแกรมจะคำนวณ GSD มาให้ดู และจะคำนวณเส้นทางการบินให้ โดยเอาข้อมูลกล้องถ่ายรูปของโดรนของ DJI Phantom, Maveric ซึ่งผมอนุมานว่าน่าจะใกล้เคียงกับ Spark โปรแกรมจะใช้ข้อมูลกล้องถ่ายรูปของเรา โดยใช้ focal length เราสามารถป้อนเปอร์เซ็นต์ค่า overlap ได้ จากนั้นโปรแกรมจะคำนวณเส้นทางมาให้ สามารถปรับทิศทางการบินได้ตามความต้องการ จากนั้นดูเป็นไกด์ครับ ว่าเส้นทางการบินแนวไหน ห่างกันประมาณเท่าไหร่ พอไปบินด้วยสปาร์คอีกทีจะเป็นการด้นสดๆบนแผนที่ปล่าวๆ ความสนุกอยู่ตรงนี้แหละครับ

chrome_2018-01-10_12-53-35

chrome_2018-01-10_12-54-02

กำหนดและแบ่งแยกพื้นที่

เนื่องจากสปาร์คไม่สนับสนุนการบินแบบกำหนดเส้นทางล่วงหน้า ถ้าพื้นที่ที่ต้องการบินมีขนาดใหญ่ ตัวอย่างกรณีศึกษาที่ผมจะบินประมาณ 70 ไร่ (ถือว่าเล็กสำหรับโดรนรุ่นใหญ่เช่น Phantom 4, Inspire, Mavic) ต้องแบ่งเป็นส่วนๆ เพื่อให้ง่ายตอนโดรนบินขึ้นไปแล้วสามารถมองเห็นโดรนได้ตลอดเวลาและแบตเตอรีของสปาร์คใช้ได้ประมาณ 16 นาที แต่บินจริงๆประมาณสิบนาทีกว่านิดๆต้องรีบเอาลง ถึงพื้นเหลือประมาณ 10% แค่นี้ก็ใจหายใจคว่ำ ฉะนั้นการกำหนดแยกย่อยแผนที่ ก่อนจะบินเราก็เอาโดรนไปกลางๆพื้นที่ย่อยเหล่านั้นแล้วบินขึ้น เพราะแบตเตอรี่น้อยเราต้องไปอยู่กลางพื้นที่ เพื่อไม่ให้โดรนบินขาไปและขากลับไกลมากจะผลาญแบตเตอรี่โดยไม่จำเป็น

Litchi ผู้มาช่วยให้รอด

เนื่องจากบนแผนที่ DJI GO 4 เป็นแผนที่ปล่าวๆ ไม่มีเส้นทางการบิน มันเป็นอะไรที่ยากมากที่จะบังคับให้โดรนบินไปตามเส้นทางได้ ผมตัดสินใจใช้แอพ Litchi (สุ่มเสี่ยงกับการไม่ได้รับประกัน) เพราะในแอพสามารถกำหนด waypoint  ได้แต่สั่งให้บินจาก waypoint ไม่ได้ ผมจะดูเส้นแนวบินจาก Dronedeploy เป็นไกด์ จากนั้นจะจุดลากเส้น waypoint ในแอพของ Litchi จากนั้นเซฟไฟล์ waypoint เอาไว้ใช้ในโอกาสหน้าได้อีก

เทคนิคการบิน

ตอนเอาโดรนขึ้นผมจัดให้โดรนบินอยู่สูงโดยที่ค่าระดับความสูงจากพื้นดินประมาณ 40-50 เมตร ผมต้องการค่า GSD ประมาณ 1.5 ซม.ต่อพิกเซล ตอนบินพยายามบังคับให้แนวบินของโดรนไปในทิศทางตามเส้นแนวบิน ปัจจัยที่บังคับยากเมื่อบินไปแล้วคือกระแสลม ถ้าลมแรงเจอโดรนเล็กบังคับยาก ถ้าตอนบินลมเงียบๆจะดีที่สุด เมื่อต่ออุปกรณ์กันครบ ที่แอพ Litchi ให้เปลี่ยน config ถ่ายภาพ เป็น Capture mode ตั้ง interval ผมเคยใช้ 2 วินาที จะถี่มากเกินไป ลองไปใช้ 10 วินาที ห่างกันไปนิด ปรับมาใช้ 5 วินาที ผมบินด้วยความเร็วครึ่งหนึ่งของความเร็วสูงสุดประมาณ 25 กม.ต่อชม. จำนวนรูปถ่ายถ้าตั้งไว้เป็น infinity จะมีปัญหา โปรแกรมน่าจะมีบั๊ก ผมพบว่าแอพมันไม่ถ่ายภาพนิ่งให้ แอพจะสลับมาในโหมดวีดีโอตลอด ไม่สามารถหยุดได้ ผมตั้งประมาณ 100 รูป ครบร้อยรูปเมื่อไหร่ เราก็กดรีโมทคอนโทรลให้ถ่ายรูปต่ออีกที

เมื่อโดรนบินขึ้นถึงระดับแล้วจากนั้นก็บังคับกล้องให้ก้มมาที่พื้นในตำแหน่ง 85 องศา แล้วได้เวลาเข้าแนวก็บินไปเข้าแนวตามเส้น waypoint เมื่อเข้าแล้วก็กดที่รีโมทคอนโทรลเพื่อเริ่มถ่ายภาพ เรื่องถ่ายภาพเราตั้งเป็น interval ไว้ดังนั้นไม่ต้องกังวล โดรนจะถ่ายภาพให้ตลอดเวลา เรามีหน้าที่บังคับโดรนให้วิ่งไปแนวเส้นทางให้ดีที่สุด พอไปสุดแนวให้หยุดโดรนนิ่งจากนั้นค่อยๆเลี้ยวเป็นมุม 90 จากนั้นเดินหน้าแล้วหยุดเมื่อจะเข้าแนวเส้นทางบินอีกแนว ค่อยๆเลี้ยว 90 องศาอีกครั้งแล้วก็เดินหน้ายาวทำแบบนี้ ดูแผนที่ประกอบ ดูรูปบนโทรศัพท์มือเราที่โดรนถ่ายมาให้ด้วยเป็นะระยะ ตาคอยชำเลืองดูแบตเตอรี่ เพราะมันซดเร็วมาก ผมตั้งให้เครื่องเตือนเมื่อแบตเตอรี่หมด 30% ตามค่าปริยาย สามารถบินต่อได้แต่ต้องมั่นใจว่าโดรนจะบินกลับมาหาผู้บังคับได้ทันเวลา แต่ถ้าซอยพื้นที่บินให้เล็กๆ ไม่ค่อยมีปัญหาครับ เพราะขากลับไม่ไกลกันมาก

รูปด้านล่างแสดงจุดถ่ายภาพบนท้องฟ้าได้จากการใช้ Litchi บินตามแนวเส้น waypoint แต่บังคับให้เข้าเส้นทางแบบแมนวล ก็พอถูๆไถๆ

ปัญหาความไม่เสถียรของการเชื่อมต่อ

ปัญหาที่พบคือถ้าใช้ DJI Go 4 ความไม่เสถียรของการเชื่อมต่อระหว่างรีโมทคอนโทรลกับโดรนหนักหนามากครับ ส่วนใหญ่ตอนเอาบินขึ้นประมาณห้า หกนาทีแรกไม่ค่อยมีปัญหาแต่เลยครึ่งมาบนแอพ DJI GO 4 จะเห็น status ว่า Disconnected คือการเชื่อมต่อระหว่างโดรนกับรีโมทคอนโทรลขาดแล้ว พยายามต่อเชื่อมใหม่บางทีเข้าบางทีหลุดไปดื้อๆ ทั้งๆที่ระยะทางจากรีโมทคอนโทรลไปโดรนประมาณ 100-200 เมตร ปัญหานี้เข้าไปอ่านในฟอรั่มถือว่าเป็นปัญหาอมตะ ตอนแรกผมคิดว่าพื้นที่การบินมันมีไวไฟจากชุมชนอื่นรบกวนมาก แต่ไปลองที่โล่งๆนอกเมืองก็ยังเป็น เมื่อผมหันไปใช้แอพ Litchi กลับเสถียรกว่ามาก แต่การบังคับโดรนบินห่างออกไปประมาณ 500 เมตร สัญญานจะเริ่มขาดช่วง ไม่ได้ถึง 2 กม.เหมือนในคู่มือ ดังนั้นควรให้โดรนอยู่ในระยะห่างจากเราไม่เกิน 400 เมตรจะดีที่สุด

ตัวอย่างรูปถ่ายทางอากาศ

กล้องของสปาร์คเก็บความละเอียดได้ 12 ล้านพิกเซล ก็ถือว่าละเอียดพอใช้ได้ ลองดูภาพตัวอย่าง

DJI_0621

ผมขยายให้ดูชัดๆ ผมสังเกตว่าภาพที่ได้ไม่มีเบลอ นิ่งครับ

0621

โปรแกรมด้านแผนที่ภาพถ่ายทางอากาศ

ที่ผมลองมามีอยู่สามโปรแกรมครับคือ Agisoft Photoscan, Pix4DMapper และ 3DF Zephyr เอาเวอร์ชั่นทดลองใช้มาก่อน ผมพบว่า Agisoft Photoscan กับ Pix4DMapping เก่งกันมากกินกันไม่ลง เนื่องจากผมมีพื้นฐานจากโปรแกรม Erdas Imagine มาก่อนที่สิบกว่าปีที่แล้วเคยใช้ทำแผนที่ภาพถ่ายทางอากาศ ทำให้มีพื้นฐานมาพอสมควร ผมเปิดสามโปรแกรมนี้มาศึกษาใช้งานทีละโปรแกรม ใช้เวลาแกะโปรแกรมประมาณโปรแกรมละไม่ถึงหนึ่งชม.ก็ใช้งานได้ เนื่องจากโปรแกรมออกแบบมามี work flow ให้แทบไม่ต้องทำอะไรเลย ใช้งานง่ายมากๆ
แต่อีกอย่างคือต้องยอมรับว่าเทคโนโลยีด้าน Image Processing พัฒนาไปไกลมาก และโปรแกรมออกมาใช้งานง่ายมากๆ คนไม่เรียน photogrammetry มาก่อนก็สามารถทำงานนี้ได้ งานที่ผมเคยทำงานแบบใช้แรงงานแบบประมาณวิ่งควายตอนทำ Erdas Imagine สม้ยแต่ก่อน ที่ต้องหามรุ่งหามค่ำเริ่มตั้งแต่นำภาพเข้าโปรแกรม วัด tie point วัด Aerial Triangulation จากนั้นวัด DEM ใช้เวลาหลายวัน ตอนนี้ใช้เวลาคำนวณไม่กี่ชม. DEM สามารถ extract มาได้ง่ายๆ แล้วได้ผลงานดี ได้โมเดลสามมิติมาที่ดูเป็นมืออาชีพ สิบกว่าปีที่ผ่านมาเกือบจะตกยุคตกสมัย ตกขบวนรถไฟ แต่จะเปรียบเทียบกันแล้วงานใน Erdas Imagine สมัยแต่ก่อนส่วนใหญ่เป็นภาพถ่ายทางอากาศจากเครื่องบิน ที่กินพื้นที่บริเวณหลายตารางกิโลเมตรผลลัพธ์สุดท้ายเป็นภาพ orthophoto + DEM เลยดูไม่ตื่นเต้น แต่การบินโดรนด้วยความสูงไม่มาก ทำให้ได้ภาพที่คมชัด เมื่่อสร้างสามมิติโมเดลแล้วทำให้ดูชัดเจนสมจริงมาก

ผลงานแผนที่ภาพถ่ายทางอากาศ

ผลงานแรกเอาไปคำนวณใน Agisoft Photoscan ลองดูโมเดลสามมิติที่สร้างโดย Agisoft Photoscan ถึงแม้แนวบินผมจะไม่ได้ตรงแบบบินด้วย waypoint แต่โมเดลที่ออกมาก็ดูดีพอสมควร

photoscan_2018-01-10_14-00-19

ปรับมุมมองอีกมุมหนึ่ง

photoscan_2018-01-10_14-09-23

มาดูที่ Pix4DMapper ตอนสร้างโปรเจคผมตั้งคุณภาพของงานระดับ 3D Maps ทำให้ใช้เวลาคำนวณนานมาก เป็นวันครับ บางครั้งเขมือบเมมโมรีเครื่องโน๊ตบุ๊คจนหมดค้างไปดื้อๆ แต่ในภาพรวมแล้ว User interface ของโปรแกรมออกมาได้เรียบง่าย เข้าใจ ใช้สะดวก มาลองดูภาพ 3D จาก Pix4DMapper ก็สวยสดงดงามไม่แพ้กัน

สรุปภารกิจลองของ

สรุปแล้วการเอาโดรนที่เน้นสันทนาการมาลองทำงานบินทำแผนที่ภาพถ่ายทางอากาศ ที่ใช้ DJI Spark ต้องใช้ความพยายามและออกแรงมากพอสมควร และการใช้แอพของ DJI Go 4 มาบินในภารกิจนี้แทบจะใช้ไม่ได้เลย จึงต้องหันไปใช้แอพอื่นซึ่งเสี่ยงต่อการหลุดรับประกันจากศูนย์ DJI เป็นอย่างยิ่ง แต่เมื่อทำแล้วผลงานออกมาได้น่าพอใจพอสมควร

 

 

Geoid Height Pro v1.05 สำหรับ Mac OS X

Geoid Height Pro v1.05 รุ่นสำหรับแมคโอเอส

  • คล้อยหลังที่ปล่อยรุ่นสำหรับวินโดส์ไปแล้ว ผมมานั่งคอมไพล์โปรแกรมสำหรับ Mac ซึ่งก็แก้ไขโค๊ดไปบ้าง แต่ไม่ได้หนักหนาอะไร ทำ installer ด้วย dmgCreator  ฟรี ข้อเสียในรุ่นแมคเทียบกับวินโดส์ก็คือ ขนาดเมื่อบีบอัดแล้วยังปาไปถึง 218 MB ส่วนรุ่นวินโดส์ประมาณ 95 MB เอง

ดาวน์โหลดและติดตั้ง

  • ดาวน์โหลดโปรแกรมได้ที่ GeoidHeightV105.dmg แล้วดับเบิ้ลคลิกแมคจะทำการเมาท์อิมเมจมาให้จากนั้นลาก icon โปรแกรมเข้าโฟลเดอร์ Applications เป็นอันเสร็จ โปรแกรมไม่มีเรียกใช้เฟรมเวิร์ค  (Framework) ใดๆทั้งสิ้นครับ ดังนั้นผมคิดว่านำไปติดตั้งเครื่องไหนน่าจะรันได้ไม่มีปัญหา

geoidheight_mac_01

ลองใช้งาน

  • ติดตั้งแล้วโปรแกรมจะอยู่ที่ Applications พร้อมใช้งาน

myapplications

  • ลองรันดู หน้าตาก็เหมือนรุ่นบนวินโดส์

geoidheight_mac_02

  • ป้อนค่าพิกัดแลตติจูด ลองจิจูดแล้วคลิกคำนวณ (Compute)

geoidheight_mac_03

  • ข้อมูลไฟล์ทดสอบ ผมใส่ไฟล์ข้อมูลตัวอย่าง  bundle ไปในโปรแกรมด้วยวิธีเปิดใช้ Finder ไปที่ Applications หาไอคอนโปรแกรม แล้วคลิกขวาเลือก “Show Package Contents”  คลิกไปที่ Contents/Resources/data จากนั้น copy ไฟล์ไปไว้ที่ใช้งานได้สะดวก

geoidheight_mac_05

  • ลองเปิดไฟล์ดูแล้วรัน

geoidheight_mac_06

  • นี่นับว่าเป็นโปรแกรมแรกของผมที่เขียนใช้บนแมค หลังๆมาผมใช้แมคมากกว่าลีนุกซ์ ส่วนวินโดส์ก็ยังใช้เป็นปกติ แต่ยังไงๆก็ใช้น้อยลงกว่าแต่ก่อน เพราะใช้สมาร์ทโฟนกับแท็ปเล็ตมากขึ้น ก็ยังเป็นที่สงสัยโลกยุคหลังพีซี จะเป็นอย่างไร CPU ตระกูล ARM จะสามารถยึดตลาดได้เบ็ดเสร็จ เหมือน x86 ของอินเทลเคยทำได้เหมือนแต่ก่อนไหม
  • สำหรับโปรแกรมเวอร์ชั่นหน้าตรงแผนที่โลก แสดงสเปคตรัมความสูงจีออยด์ ผมอาจจะเปลี่ยนมาเป็น ลูกโลก 3D ให้ดูน่าสนใจมากขึ้น ผมเตรียมลูกโลกไว้แล้วสำหรับเวอร์ชั่นหน้า

geoidheight_mac_07

การกลับมาของ OpenGL เพื่อมาต่อกรกับ DirectX

ท้าวความถึง OpenGL

  • OpenGL มองในด้านโปรแกรมมิ่งจะเป็นคำสั่งชุดหรือ APIs (Application Program Interface) สำหรับให้ผู้พัฒนาโปรแกรมด้าน 3D สามารถเรียกใช้ความสามารถจากฮาร์ดแวร์บนเครื่องคอมพิวเตอร์ OpenGL เป็น Cross-Platform สามารถจะใช้ได้บนวินโดส์ ลีนุกซ์ บนแมค
  • สำหรับโปรแกรมด้าน 3D พอจะแบ่งได้คร่าวๆ 3 ประเภทคืออย่างแรกด้าน CAD & GIS อย่างที่สองคือโปรแกรมด้าน 3D Graphic Animation(3D Max, Maya) อย่างหลังคือ Game ซึ่งเป็นตลาดที่ใหญ่มาก โปรแกรมจำพวกนี้ถ้าไม่ใช้ OpenGL ก็ใช้ DirectX ของ Microsoft ซึ่งจะได้กล่าวอีกครั้ง

ผู้ก่อกำเนิด OpenGL

  • ย้อนหลังไปในปี 1981 บริษัทฯ Silicon Graphics International Corp ได้ถูกก่อ โดย Jim Clark  ต่อไปจะเรียกชื่อบริษัทฯนี้สั้นๆว่า SGI ซึ่งตั้งขึ้นมาเพื่อตลาดด้าน 2D & 3D Graphic ประกอบไปด้วยฮาร์ดแวร์และซอฟแวร์ คือขายรวมกัน ฮาร์ดแวร์ส่วนใหญ่เป็น workstation ทำงานอยู่บน Unix
  • บทบาทที่สำคัญของ SGI คือออกแบบไลบรารี IRIS GL และสร้าง APIs สำหรับให้นักพัฒนาโปรแกรมบน workstation ของ SGI ได้พัฒนาโปรแกรมด้าน 2D & 3D บน platform ของ SGI นับว่าเป็นการปฏิวัติวงการกราฟฟิคซึ่งจะมีบทบาทอย่างสูงในช่วงปี 1990
  • ต้นปี 1990 SGI คือผู้นำในวงการ 3D Graphic เพราะความเสามารถด้านฮาร์ดแวร์และไลบรารี IRIS GL ที่มีความยืดหยุ่นใช้งานได้ง่าย ความสามารถสูงและเป็นมาตรฐานสำหรับงาน 3D Graphic แต่ก็มีปัญหาตามมาคือ platform ของ SGI ยังเป็นระบบปิด ทำให้คู่แข่งไม่มีโอกาสและความได้เปรียบ ปี 1992 ทาง SGI จึงทำการแก้ไข IRIS GL ใหม่โดยยกเลิกสิ่งที่ไม่เกี่ยวข้องบางอย่างออก และเรียกว่า OpenGL (Open Graphic Library) เพื่อให้ผู้ผลิดฮาร์ดแวร์สามารถนำพัฒนา Device Driver ให้มีความสามารถด้าน 3D Graphic ตามไลบรารีที่ SGI ได้ออกแบบไว้ ในที่สุด OpenGL ก็กลายเป็นมาตรฐาน
  • การเปิดแบบนี้ทำให้ผู้ผลิตฮาร์ดแวร์เช่นการ์ดจออื่นๆสามารถนำความสามารถของ  OpenGL ไปผลิตการ์ดจอให้ได้ตามที่ต้องการไม่ต้องยึดติดกับ platform ของ SGI และในทางเดียวกันผู้พัฒนาโปรแกรมก็สามารถนำ APIs ของ OpenGL ไปพัฒนาซอฟแวร์ประเภท 3D ที่กล่าวไปแล้วเช่นเดียวกัน ตราบเท่าที่ฮาร์ดแวร์สนันสนุนโปรแกรม 3D นั้นๆก็สามารถรันได้

ความยืดหยุ่น (Flexibility)

  • ประโยชน์สูงสุดของ OpenGL ในตอนนี้คือผู้ผลิตฮาร์ดแวร์ต่างๆสามารถเสริมความสามารถด้วย Extension หรือส่วนเสริม ถ้า OpenGL ไม่มีฟีเจอร์ในส่วนนั้น ผู้ผลิตหลายรายเช่น Nvidia, Apple ได้พัฒนา extension เพื่อสนับสนุนฮาร์ดแวร์ของตนโดยเฉพาะ มองในข้อดีคือความยืดหยุ่น แต่ข้อเสียก็ตามมาคือไม่เป็นมาตรฐาน

มาตรฐานเปิด (Open Standard)

  • ในปี 1992 มีการก่อตั้ง ARB (OpenGL Architechure Review Board) เพื่อรวบรวมความต้องการของผู้ผลิตฮาร์ดแวร์และซอฟแวร์ต้องการฟีเจอร์อะไรเพิ่มในอนาคต ทั้งนี้เพื่อความเป็นมาตรฐานและเป็นระบบที่เปิดนั่นเอง
  • และแล้ว OpenGL ก็กลายเป็นผู้นำในเรื่อง 3D Graphic API และเป็นหนึ่งเดียวที่สามารถใช้งานได้หลาย platform

OpenGL บนวินโดส์

  • ไมโครซอฟต์ปล่อย Windows NT ในปี 1993 ซึ่งจะเป็นคู่แข่งของระบบ Unix ด้วยการสนับสนุนฮาร์ดแวร์ 32 บิต และก็ปล่อย Win32 API สำหรับสร้างโปรแกรมใช้บนวินโดส์ ซึ่งโปรแกรมเมอร์ C คงจะจำกันได้ดีในยุคนั้น
  • เนื่องจาก  Windows NT ยังไม่มีไลบรารี 3D จึงสนันสนุน OpenGL ปี 1994 ขณะนั้น Windows NT เป็นรุ่น 3.5 แต่ก็ทำงานช้ามาก เพราะยังไม่มีการปรับ OpenGL ให้เข้ากับฮาร์ดแวร์บนวินโดส์

DirectX

  • ไมโครซอฟท์เริ่มมองเห็นความสำคัญของ 3D Graphic ในตลาดเกมส์ และมองหาไลบรารี 3D เพื่อจูงใจผู้พัฒนาเกมส์ ความพยายามครั้งแรกเริ่มที่ WinG API แต่ไลบรารีก็แค่ 2D ก็ยังไม่มีเรื่อง 3D สุดท้ายซื้อบริษัท RenderMorphics ในปี 1995 ผู้ซึ่งผลิต 3D API ในนาม Reality Lab
  • API ตัวนี้ถูกเปลี่ยนชื่อเป็น Direct3D และรวมๆเรียกว่า DirectX ที่มีเครื่องมืออื่นๆเช่นเรื่องเสียง เน็ตเวิร์ค การวาดแบบ 2D อุปกรณ์เช่น Joystick
  • เริ่มต้นแล้ว DirectX การแสดงผลและประสิทธิภาพยังช้าอยู่มาก ทำให้ไมโครซอฟท์ยังคงสนับสนุน OpenGL 1.1 ต่อไปบนวินโดส์ 95 และ NT 4.0

เริ่มต้นสงคราม

  • ขณะที่ไมโครซอฟท์พยายามยืนกรานว่า OpenGL ดีสำหรับงาน CAD (Computer Aided Design) เท่านั้น เพื่อที่จะครอบครองตลาดเกมส์แต่เพียงผู้เดียว John Carmack แห่ง id software บริษัทผู้พัฒนาเกมส์ Quake ที่ใช้ OpenGL ออกมาวิจารณ์ถึงความง่ายในการใช้งาน OpenGL
  • ธันวาคม ปี 1996 John Carmack แสดงเอกสารพร้อมทั้งข้อคับข้องใจต่อ Direct3D ไม่เพียงเท่านั้นยังแสดงการเปรียบเทียบโค๊ดของโปรแกรมที่วาดรูปสามเหลี่ยมบนจอภาพ OpenGL ใช้เพียง 4 บรรทัดเท่านั้นแต่ Direct3D กลับใช้โค๊ดมากกว่าหลายบรรทัด
  • กุมภาพันธ์ ปี 1997 Alex St. John ผู้พัฒนา Direct3D ของไมโครซอฟท์ก็ออกมาตอบใต้ว่าคำวิจารณ์ของ John Carmack ได้สร้างความเสียหายให้กับ Direct3D เขาอธิบายว่า Direct3D นั้นเน้นเข้าถึงฮาร์ดแวร์มากกว่าซอฟแวร์ ถึงโค๊ดของโปรแกรมไม่สวยแต่ก็ทำงานได้ดี และก็ตอกย้ำอีกครั้งว่า OpenGL เหมาะที่จะเป็น API สำหรับโปรแกรมด้าน Cad เท่านั้น
  • เดือนมิถุนายน 1977 SGI ออกมาสำทับต้อบโต้กับบทวิจารณ์ของ Alex St. john เรื่องความบกพร่องต่อการออกแบบ Direct3D เปรียบเทียบ  API  ทั้งสองและแสดงถึงความง่ายในการใช้งาน OpenGL
  • ไมโครซอฟท์ปรับปรุง Direct3D ในรุ่น 5.0 ถอดเอาฟึเจอร์ที่ไม่สะดวกในการใช้งานออก ในตอนนี้ทั้งสอง API ใช้งานได้ง่ายแล้ว

เรื่องของ Driver

  • สำหรับไดรเวอร์ของ OpenGL จะถูกใช้งานใน Windows NT ผ่านทางไดรเวอร์ที่เรียกว่า Mini-Client Driver (MCD) ซึ่งทำให้ประสิทธิภาพต่ำมาก แต่ก็เป็นวิธีการที่ง่ายที่สุดในการสร้างไดรเวอร์สำหรับฮาร์ดแวร์ที่ต้องการใช้กับ OpenGL แต่ไมโครซอฟท์ก็ตอบโต้ด้วยการไม่อนุญาตให้ใช้ MCD ทาง SGI จึงเสนอวิธีสร้างไดรเวอร์สำหรับ Windows NT ผ่านทางที่เรียกว่า Installation Client Driver (ICD) ทางผู้ผลิตฮาร์ดแวร์ได้ใช้ ICD เพื่อสร้างไดรเวอร์ ไม่นานจากนี้อุตสาหกรรมเกมส์เริ่มนำ OpenGL มาใช้เป็นทางเลือกแทนที่ Direct3D

การปฏิวัติของวงการฮาร์ดแวร์

  • ในช่วงปลายของศตวรรษ 1990 OpenGL ได้ปักหลักในอุตสาหกรรมไม่เฉพาะด้าน CAD เท่านั้น เกมส์ดังๆเช่น Quake 2, Unreal และ Half-Life ก็ได้ใช้ OpenGL และเป็นที่นิยมในเกมส์อื่นๆเช่นเดียวกัน ในตอนนี้ก็มีผู้ผลิตการ์ดจอในราคาไม่แพงและจะเป็นผู้มาปฏิวัติวงการก็คือ 3Dfx
  • 3Dfx ได้ปล่อยการ์ดจอเรียกว่า Voodoo ซึ่งมีประสิทธิภาพสูงมากในสมัยนั้น ในขณะนั้นทาง ATI เริ่มขาย 3D Rage และ S3 Virge แต่ก็ไม่มีใครสู้ Voodoo ของ 3Dfx ได้ ต้องนี้ 3Dfx คิดการใหญ่ได้สร้าง API ของตัวเองขึ้นมาใหม่เรียกว่า Glide ซึ่งเป็น API ที่เร็วและแรงที่สุด แต่อย่างว่าผู้ผลิตฮาร์ดแวร์อื่นๆก็ใช้ไม่ได้ แต่ Glide ก็สร้างปรากฎการณ์ ไม่นาน Glide ก็พบจุดจบ
  • NVIDIA ถูกก่อตั้งในปี 1999 และขายการ์ดจอชื่อ Geforce 256 และได้เรียกการ์ดจอว่า GPU (Graphic Processing Unit) ได้เพิ่มคุณสมบัติที่เรียกว่า T&L (Transform & Lighting) ตัว T&L จะย้ายการคำนวณ Vertex transformation จาก CPU ไปสู่ GPU ซึ่งข้อดีของ GPU จะคำนวณทางคณิตศาสตร์ได้รวดเร็วมากกว่า  CPU เนื่องจากถูกออกแบบให้ทำงานนี้โดยตรง น่าเศร้าที่ 3Dfx ไม่มีคุณสมบัติ T&L ไม่นาน 3Dfx ก็พบจุดจบ
  • สุดท้าย 3Dfx ก็ล้มละลาย จึงถูก NVIDIA เข้าไปซื้อกิจการและ NVIDIA ก็ไม่ได้ออกการ์ดจอรุ่น Voodoo อีกเลย ในขณะนั้นคู่ปรับตลอดกาลของ NVIDIA คือ ATI ซึ่งมีการ์ดจอชื่อ Radeon 7000 ซึ่งเป็น GPU เช่นเดียวกัน และทั้งสองเจ้านี้ก็สนับสนุนเฉพาะ Direct3D และ OpenGL เท่านั้น

การเปลี่ยนแปลงคุณสมบัติที่สำคัญ

  • ในตอนนี้การเรนเดอร์เพื่อให้ได้ภาพ 3D ถูกย้ายจากการคำนวณจาก CPU ไป GPU เพื่อลดคอขวด สองฟีเจอร์ที่จะกล่าวต่อไปนี้คือวิธีการที่กล่าวไปแล้ว

Buffers

  • ในทางโปรแกรมมิ่งแล้วคำว่า Buffers คือสถานที่ในหน่วยความจำที่ถูกเก็บข้อมูลบางอย่างแบบชั่วคราว เมื่อเลิกใช้แล้ว Buffers ก็จะถูกทำลายเพื่อคืนหน่วยความจำให้กับระบบ
  • วัตถุที่จะถูกเรนเดอร์เป็น 3D บนจอภาพจะถูกเก็บในรูป buffers เช่น Vertex array วิธีการเดิมๆ Vertex array จะถูกเก็บในหน่วยความจำกลาง (บนแรมนั่นเอง) จากนั้นจะย้าย buffer นี้ไป GPU ซึ่งทำให้ช้าเนื่องจาก buffer มีขนาดใหญ่ วิธีการใหม่คือ buffer จะถูกเก็บในหน่วยความจำของ GPU  ทำให้ไม่มีคอขวดอีกต่อไป การเรนเดอร์ทำได้เร็ว
  • ใน OpenGL ตัว buffer นี้เรียกว่า Vertex Buffer Objects (VBOs) ใน Direct3D เรียกว่า Vertex Buffers

Shaders

  • ในปี 2000 ไมโครซอฟท์ได้ปล่อย Direct3D รุ่น 8.0 เพิ่มคุณสมบัติที่เรียกว่า Shaders ซึ่งเป็นโปรแกรมเล็กๆที่รันบน GPU ทำให้เพิ่มความเร็วของการเรนเดอร์ภาพ 3D จะเป็นการลดภาระของ CPU อีกแรงหนึ่ง ไมโครซอฟท์เรียก shaders ที่มีสองแบบว่า Vertex Shader และ Pixel Shaders
  • Vertex Shaders เป็นโปรแกรมที่จะถูกรันต่อหนึ่ง vertex ที่ถูกกำหนดให้ ส่วน Pixel Shaders จะถูกรันต่อหนึ่ง pixel การใช้ shader ดังกล่าวจะลดคอขวดที่จะเรียกใช้งาน CPU ได้มาก แต่ข้อเสียคือยากในการเขียนโปรแกรมเนื่องจากโครงสร้างคล้ายกับภาษา Assembly
  • ในปี 2003 ไมโครซอฟท์ เปลี่ยนโครงสร้างของโปรแกรมให้เขียนได้ง่ายขึ้นเรียกว่า High Level Shader Language (HLSL) พร้อมกับการปล่อย Direct3D รุ่น 9.0 ทั้งนี้โครงสร้างภาษาอยู่บนพื้นฐานภาษา C

ยุคซบเซาของ OpenGL

  • ในตอนนั้น OpenGL ยังไม่สนับสนุนเรื่อง shaders จนกระทั่งในปี 2004 ที่ออก OpenGL รุ่น 2.0 เรียกโครงสร้างของการเขียนโปรแกรม shader นี้ว่า OpenGL Shader Language (GLSL) แต่การตามหลังไมโครซอฟท์ถึง 4 ปีทำให้ OpenGL ต้องวิ่งไล่ Direct3D เหมือนกับที่ Direct3D เคยวิ่งไล่ OpenGL ในทศวรรษก่อนหน้านี้
  • ในปี 2004-2006 มีเกมส์น้อยที่สนับสนุน OpenGL จนกระทั่งปี 2005 ไมโครซอฟท์ออก XBox เพื่อยึดคลองตลาดเกมส์คอนโซล ตอนนี้ทั้ง ARB หรือ SGI ทำตัวเงียบทำให้ดูเหมือนว่า OpenGL ตายแล้ว
  • ในปี 2006 OpenGL รุ่น 2.1 ก็ถูกปล่อยมา มีการเพิ่มฟีเจอร์ไม่กี่อย่าง สถานการณ์ยิ่งเลวร้ายขึ้นเมื่อไมโครซอฟท์ปล่อย Direct3D รุ่น 10.0 ซึ่งจะใช้ได้บน Windows Vista เท่านั้น ผู้ผลิตฮาร์ดแวร์เริ่มปรับทิศทางตามไมโครซอฟท์
  • ในระหว่างนี้โปรแกรมเมอร์ที่ใช้ OpenGL เริ่มถามและต้องการคำตอบจาก ARB และ SGI แต่คำตอบกลับเป็นสิ่งที่แตกต่างตาลปัตร

OpenGL รุ่นใหม่

  • ปี 2006 ก่อตั้ง Khronos Group ขึ้นมาเพื่อดูแล OpenGL แทน SGI ทั้งที่ SGI ยังถือลิขสิทธิ์อยู่ Khronos Group เป็นกลุ่มของผู้ผลิตฮาร์ดแวร์และซอฟแวร์ที่ยังสนใจที่จะใช้ OpenGL ต่อ มีการเปิดเผยว่าใช้รูปแบบการเก็บข้อมูล 3D เรียกว่า Collada ในระหว่างนี้มีข่าวว่า OpenGL จะถูกปรับปรุงเพื่อเปลี่ยนแปลงคุณสมบัติคร้งใหญ่ หลังที่เงียบมาแล้วสองปี

Long Peak และ Mt. Evans

  • รุ่นของ OpenGL ที่จะพัฒนามี code name ว่า Long Peak และ Mt. Evans ตัว Long Peak จะถูกปล่อยในฤดูร้อนปี 2007 และ Mt. Evans จะปล่อยตามติดในเดือนตุลาคมปีเดียวกัน
  • รุ่นดังกล่าวให้ความหวังจะมาต่อกรกับ Direct3D รุ่น 10.0 และการเรนเดอร์จะต้องใช้ buffers และ shader ทั้งหมด ผลก็คือตัว API ต้องเขียนใหม่ทั้งหมดด้วยกลุ่มทีเรียกว่า Technical Sub Group (TSG)
  • หนึ่งในสิ่งที่จะพัฒนาขึ้นมาใหม่คือ Object Model ซึ่งจะต้องมาเกี่ยวข้องกับ buffers การเสนอ Object Model ใหม่นี้ทำให้เกิดวิธีการสร้าง Object Model แบบใหม่ เพียงการใช้ฟังก์ชั่นไม่กี่บรรทัด ตัว Long Peak จะออกแบบใหม่ให้มีการเข้ากันกับฮาร์ดแวร์ก่อนหน้านี้ ส่วน Mt.Evans จะถูกออกแบบโดยไม่มีการเข้ากันกับอุปกรณ์ก่อนหน้านี้ มุ่งไปข้างหน้า ด้วยฟีเจอร์ที่เสนอนี้ ทำให้ได้รับการรอคอยอย่างคาดหวังจากชุมชนคน OpenGL
  • แต่ในฤดูร้อนปี 2007 ก็ผ่านไปจนถึงเดือนตุลาคม มีข่าวจาก Khronos Group ว่าเลื่อนการออก OpenGL ชุมชนคน OpenGL ก็มีอาการไม่พอใจเล็กน้อย แต่เทียบกับคุณสมบัติใหม่ที่รอคอยแล้วก็คุ้มที่จะรอ และแล้วก็ผ่านไปอีกปี

OpenGL รุ่น 3.0

  • เดือนกรกฎาคม ปี 2008 ก็ออกรุ่น 3.0 มา นับเป็นระยะเวลา 4 ปี ตั้งแต่รุ่น 2.1 ออกมา แต่ที่น่าผิดหวังคือคุณสมบัติที่รอคอยกลับไม่มี ดูเหมือนจะเปลี่ยนแปลงไปเล็กน้อย ที่สัญญาเรื่อง Object Model ก็ไม่มีและไม่มีทีท่าว่าจะเกิดขึ้นในรุ่นต่อๆไป มีเพียงฟีเจอร์ใหม่ที่เสนอมาคือ deprecation mode และความเข้ากันได้กับฮาร์ดแวร์ก่อนหน้านี้
  • ยังผลทำให้ชุมชนคน OpenGL ต่อต้านตามเว็บบอร์ด ซึ่งหนึ่งในข้อกล่าวหาต่อ Khronos Group ที่ทำให้ OpenGL มีความเข้ากันได้ฮาร์ดแวร์เก่าๆเพราะต้องการรักษาลูกค้าขายซอฟท์แวร์ด้าน CAD ยังผลให้ผู้พัฒนาซอฟท์แวร์บนวินโดส์ เริ่มทิ้ง OpenGL หันไปใช้ Direct3D ความสิ้นหวังต่อ OpenGL ดูเหมือนว่าสงครามระหว่าง API ได้จบลงไปแล้ว

After the Shock

  • ถึงแม้จะไม่พอใจใน OpenGL รุ่นนี้ก็ตาม แต่ OpenGL 3.0 ก็มีฟีเจอร์เทียบเท่ากับ Direct3D 10.0 แต่สิ่งที่เหนือกว่าคือ OpenGL 3.0 ยังใช้งานได้บน Windows XP แต่ Direct3D 10.0 ต้องรันบน Vista เท่านั้นเนื่องจากโครงสร้าง Drivers ใหม่ของไมโครซอฟท์ที่ต้องการ Vista ขึ้นไปเท่านั้น
  • เดือนมีนาคม 2009 ก็ออก OpenGL 3.1 มาคุณสมบัติใกล้เคียงกันกับ Long Peak และ Mt.Evans ดั่งที่เคยเสนอไปแล้ว ตอนนี้ OpenGL กลับมาอยู่ในเส้นทางที่พร้อมจะต่อกรอีกครั้ง ไม่กี่เดือนต่อมาก็ออกรุ่น 3.2 พร้อมคุณสมบัติใหม่คือ Geometry Shaders

OpenGL รุ่น 4.0

  • หนึ่งปีผ่านไปหลังจากปล่อยรุ่น 3.2 ไปแล้วก็ได้เวลาคลอดรุ่น 4.0 ซึ่งคุณสมบัติพอฟัดพอเหวี่ยงกับ Direct3D 11.0 ในขณะเดียวกันก็ได้ออกรุ่น 3.3 ออกมาด้วยซึ่งมีคุณสมบัติใกล้เคียงกับ 4.0 แต่มีความเข้าได้กับฮาร์ดแวร์รุ่นเก่า
  • ในทุกวันนี้ถ้าต้องการเขียนโปรแกรม 3D ที่สามารถรันได้นอกเหนือจาก platform ของไมโครซอฟท์แล้วทางเลือกเดียวคือ OpenGL ถ้าสนใจจะพัฒนาโปรแกรมด้าน 3D บนอุปกรณ์มือถือเช่น Android หรือ iPad, iPhone ก็มีไลบรารี OpenGL ES ซึ่งใกล้เคียง กับ OpenGL รุ่นใหญ่ ทำให้การ port code ให้สามารถรันได้บน PC, Macs ลีนุกซ์หรือแม้แต่อุปกรณ์มือถือที่กล่าวไปแล้ว
  • นอกจาก OpenGL ES แล้วยังมีรุ่น WebGL สำหรับพัฒนาโปรแกรม 3D บนเว็บ

OpenGL รุ่น 4.1 และ OpenGL 4.2

  • เดือนกรกฎาคม ปี 2010 ออกรุ่น 4.1 มีการปรับปรุงคุณสมบัติบางอย่างที่เทียบเท่ากับ Direct3D 11.0 ในรุ่นนี้โค๊ดของ OpenGL มีการเข้ากันกับ (Full campatibility) OpenGL ES ได้อย่างสมบูรณ์
  • เดือนสิงหาคม ปี 2011 ออกรุ่น 4.2 เช่นเดียวกันปรับปรุงคุณสมบัติหลายอย่างทำให้การเรนเดอร์ทำได้เร็วกว่าเดิม
  • ความต้องการของฮาร์ดแวร์ ได้แก่ Nvidia GeForce 400 series, Nvidia GeForce 500 series, ATI Radeon HD 5000 series, AMD Radeon HD 6000 Series

OpenGL ในมุมของ Lazarus

  • ไม่นานมานี้เองผมพยายามหาไลบรารีที่จะมาช่วยทำโปรแกรม 2D จากที่เคยเขียนมาเองแต่ก็หน่อมแน๊มเกินไป ก็ไปเจอ GLSCene ดั้งเดิมพัฒนาโดย Mike Lischke เปิดเป็น opensource และภายหลังดูแลโดย Eric Grange ตอนแรกพัฒนาเป็น VCL สำหรับโปรแกรมเมอร์ Delphi โดยเฉพาะในรุ่นหลังใช้ได้กับ Lazarus ซึ่งผมลองแล้วทั้งบนวินโดส์กับลีนุกซ์ แต่บนวินโดส์เมื่อดาวน์โหลด sourcecode ตอนติดตั้ง package จะมีปํญหา ผมจึงทำการแก้ไขโค๊ดไปเล็กน้อยก็ใช้งานได้ แต่ตัวอย่างที่ให้มาประมาณ 60% ที่ใช้งานได้ เนื่องจากโน๊ตบุ๊คที่ใช้งานอยู่ ยังเป็นการ์ดจอบนบอร์ด จึงทดสอบคุณสมบัติบางอย่างไม่ได้
  • ผมลองดูตัวอย่างที่ให้มาก็คือพยายามเรียนรู้จากตัวอย่าง ก็ไม่ได้ยากเกินไป จุดเริ่มต้นของผมแค่อยากพัฒนา 2D ในตอนแรกก็เลยมีความตั้งใจจะเรียน 3D ไปด้วย ปีหน้าจะซื้อโน๊ตบุ๊คเครื่องใหม่คงได้ลองฟีเจอร์เด็ดๆดูกัน
GLScene ที่ติดตั้งบน Lazarus
  • ผมนำโค๊ดจากตัวอย่างมาปรับเพิ่ม effect บางอย่างมาเขียนเป็นเมนู Aboutของโปรแกรมแสดงข้อมูลที่เกี่ยวข้องกับโปรแกรมเช่นชื่อโปรแกรม รุ่นของโปรแกรม ผู้พัฒนาก็ได้ผลดังรูปด้านล่าง แสดงรูปของทีมงานผู้พัฒนาโปรแกรมหมุนรอบ effect  ไฟ คล้ายนั่งม้าหมุนที่นั่งกันสมัยเด็ก

    About ของโปรแกรม

ก่อนจากกัน

  • ถ้าสนใจจะลองไลบรารี GLScene บน Lazarus ถ้าดาวน์โหลดมาแล้วใช้ไม่ได้ก็ลองขอมาดู ผมจะนำไฟล์ไปฝากไว้แถวๆ file share ครับ โลกนี้ถ้ามีแต่ไมโครซอฟท์วินโดส์ อย่างเดียวโลกนี้คงเหงาพิลึก ความคาดหวังของผมแล้ว OpenGL ไม่ต้องเหนือกว่า Direct3D แต่ขอให้เทียบเท่าก็พอ เพราะสินค้าที่ผลิตมาเพื่อการพาณิชย์จากยักษ์ใหญ่ย่อมมีกำลังที่เหนือกว่า

เครดิต

  • เรื่อง OpenGL ที่เขียนมาเกือบทั้งหมดผมเรียบเรียงมาจาก http://openglbook.com/the-book/ เนื่องจากไม่มีวิทยาการที่ลึกซึ้งกับ OpenGL ผิดพลาดประการใดก็ขออภัยครับ

การสร้าง DEM จาก 3D Points ด้วย VTBuilder

VTBuilder

  • ก่อนหน้านี้ผมเคยเขียนเรื่องการสร้าง DEM จาก 3D Points (จาก text file) โดยใช้โปรแกรมเชิงพาณิชย์อย่าง Global Mapper ซึ่ง Global Mapper ก็ทำไว้ได้อย่างสุดยอด มาลองดู tools ที่ฟรีดูบ้าง ที่ผมจะแนะนำชื่อ VTBuilder (Virtual Terrain Builder) เป็นโปรแกรมจำพวกแสดงข้อมูลด้าน Geospatial ซึ่งถ้าจะจัดก็อยู่ใน Tools ด้าน GIS

ดาวน์โหลดและติดตั้ง

  • VTBuilder เป็นฟรีซอฟแวร์ และ opensource ด้วย พัฒนาด้วย C++ สัญชาติอิตาลี สังเกตว่าโปรแกรมด้าน GIS ที่เน้นการแสดง DEM เป็น 3D ผมจะนำมาเสนอเป็นพิเศษตั้งแต่ 3DEM, MicroDEM, Landserf, TerrainBender มาจนถึง VTBuilder ตัวนี้ ถ้าสนใจไปดาวน์โหลดได้ตามลิงค์นี้ http://vterrain.org/Download/Binaries.html ซึ่งจะเลือกได้สองแบบคือแบบมีข้อมูลทดสอบมาด้วยขนาดประมาณ 45 MB ส่วนโปรแกรมดุ้นๆขนาดประมาณ 15 MB ก็ไม่ใหญ่อะไรมากมายนัก จากนั้นก็ติดตั้งได้ง่ายๆเพียงแค่คลิกไม่กี่ครั้ง
  • จรืงๆแล้ว VTBuilder นั้นเอาไว้เตรียมข้อมูลส่วนการดู 3D ใช้โปรแกรมชื่อ Enviro แต่ดูๆแล้วน่าจะเสียเงิน ผมไม่ได้นำมาแนะนำกันครับ ในตอนนี้ผมเน้นการสร้าง DEM
VTBuilder แสดง DEM ที่สร้างจาก points

 เริ่มต้นใช้งาน

  • เมื่อเปิดโปรแกรมจะเห็นหน้าตาของ VTBuilder ค่อนข้างเรียบง่าย มีแถบเมนูอยู่ด้านบน ตัวพาเนลด้านซ้ายจะมีกลุ่มของ Layer ที่ผู้พัฒนาจัดไว้ให้ได้แก่ Elevation, Images, Structure, Road, Vegetation, Utilities และ Raw ส่วนพาเนลด้านขวาแสดง Map ซึ่งโปรแกรมได้เปิด world map รอไว้ถ้าผู้ใช้ insert ข้อมูลเข้าไปก็จะรู้ได้เลยว่าเข้าไปถูกที่หรือไม่
แรกเปิดมาใหม่

 ข้อมูลทดสอบ

  • ลักษณะข้อมูลที่เป็น x,y,z ที่่โปรแกรมมองหาอาจจะอยู่ในรูปแแบบ dbf หรือไม่ก็เป็น Text file (csv) ผมมีข้อมูลเป็น point เป็น text file รูปแบบ csv ตัวคั่นเป็นเครื่องหมายคอมม่า ขนาดประมาณ 15 MB ขนาดนี้สำหรับ text file ก็ใหญ่พอสมควรมีจุดประมาณ 400,000 จุด
ข้อมูลเปิดดูด้วย Notepad ++

การ Import ข้อมูล

  • การนำข้อมูลเข้าสำหรับโปรแกรมนี้จะอยู่ที่เมนู Layer ลองดูดังรูปด้านล่าง
เลือกเมนู Layer เพื่อนำข้อมูลเข้า
  • ต่อไปเลือกไฟล์ข้อมูลและตั้งค่ารูปแบบข้อมูลให้ตรงกับไฟล์ของเรา ข้อควรระวังเนื่องโปรแกรมยังมี bug ตอนเราตั้งค่า projection และ datum เสร็จแล้ว ค่า Elevation field จะกลับเป็นค่าอื่น ใ้หตั้งใหม่ให้ตรงกับข้อมูล
ตั้งค่ารูปแบบของไฟล์ กับตั้งค่า Projection
  • ถ้าไม่มีปัญหาอะไร VTBuilder จะแสดง Layer ของข้อมูลที่เรานำเข้าไปในกลุ่มของ Raw ดังรูปด้านล่าง
VTBuilder แสดงข้อมูล 3D Points ที่นำเข้าไปแล้ว

การสร้าง DEM

  • มาถึงตอนสำคัญที่รอคอย เมื่อนำเข้าข้อมูลเป็นที่เรียบร้อยแล้ว ก็พร้อมที่ generate dem ใช้เมนู Raw ดังรูปด้านล่าง
สร้าง DEM
  • ก่อนโปรแกรมจะสร้าง DEM จะถามขนาดของกริดด้าน x และ y ข้อควรปฎิบัติคือใช้ขนาดที่เหมาะสมกับความละเอียดข้อมูลและค่า x และ y ควรจะเป็นขนาดเดียวกัน ส่วน Distance cutoff Factor (1-10) เป็นค่าระหว่าง 1 ถึง 10 ถ้าค่าเป็น 1 ในกรณีจุด x,y,z แต่ละจุดมีความห่างไม่สม่ำเสมอ ตรงที่จุดห่างๆกันมากๆ DEM ที่ได้จะเป็นรูโบ๋ ถ้าใช้ค่ามากๆถึง 10 โปรแกรมจะ คำนวณ interpolation ให้ DEM ที่จะได้จะมีรูโบ๋น้อยลง ค่ามากจะใฃ้เวลาคำนวณค่อนข้างนานกว่า แต่ก้ไม่รอนานเกินไปนัก ผมใช้ค่าประมาณ 6 รอประมาณ 7 นาที
ตั้งค่าขนาดกริดและค่า Distance cutoff Factor
DEM ที่ได้เมื่อตั้งค่า Distance cutoff Factor เท่ากับ 1.5
DEM ที่ได้เมื่อตั้งค่า Distance cutoff Factor เท่ากับ 6 (รูโบ๋จะน้อยลง)

การแก้ไข DEM ที่ลักษณะเป็นรูโบ๋

  • การที่ DEM มีรูโบ๋เรียกว่ามี gap หรือ hole การแก้ไข VTBuilder เตรียมเครื่องมือมาให้ แต่ข้อเสียที่ได้คือบริเวณที่อยู่นอกเหนือเขตข้อมูลโปรแกรมจะทำ extrapolation มาให้ น่าเสียดายโปรแกรมไม่ได้เตรียมเครื่องมือสำหรับ crop เอาเฉพาะบริเวณที่มีช้อมูล ผมใช้โปรแกรมอื่นมา crop ให้ได้เฉพาะ DEM ที่ต้องการ
  • ก่อนทำการแก้ไขให้คลิกที่พาเนลด้านซ้ายตรงด้านใต้ Elevation คำว่า Untitled คือ DEM ที่ยังไม่ได้ตั้งชื่อ เมื่อคลิกแล้วจะเห็นเมนู Elevation คลิกเลือก Fill In Unknown Area > Slow and Smooth
การแก้ไขรูโบ๋ของ DEM ด้วยการ interpolation
  •  รอสักครู่ใหญ่ๆ ถ้าข้อมูลจุดมาก ผลลัพธ์จะได้ดังรูปด้านล่าง
ผลที่ได้จากการ Fill gaps ให้กับ DEM

การเซฟ DEM เป็นฟอร์แม็ตที่ต้องการ

  • เมื่อได้ DEM มาแล้วขั้นต่อไปคือนำไปใช้งาน ใน VTBuilder นั้นสนับสนุนฟอร์แม็ตที่เป็น native  ของโปรแกรมคือ BT ซึ่งได้สองทางเลือกแบบไม่บีบอัดกับบีบอัดแล้ว GZipped BT (.bt.gz) ซึ่งผมลองเอาไฟล์ที่บีบอัดไปเปิดด้วยโปรแกรม Global Mapper ปรากฏว่า  Error ส่วนไฟล์ไม่บีบอัดสามารถเปิดได้ตามปกติ
save เป็น native format (.bt)
ทดสอบการเปิดไฟล์รูปแบบ BT ด้วย Global Mapper

การ Export DEM ไปสู่รูปแบบไฟล์อื่นๆ

  • ให้ตายเถอะรูปแบบ BT ผมก็เพิ่งเห็นจาก VTBuilder นี่แหละลองเข้าไปค้นดูปรากฏว่า โปรแกรมที่สามารถอ่านฟอร์แม็ตนี้ได้แก่  Global Mapper, Landserf และอีก 5-6 โปรแกรมที่ผมยังไม่ได้ลอง ที่อ่านได้อีกอย่างคือไลบรารี GDAL
  • แต่ถ้าต้องการ export เป็นฟอร์แม็ตอื่นๆโปรแกรมก็เตรียมทางเลือกไว้ที่เมนู Elevation ดังรูปด้านล่าง
เมนูสำหรับ export ไปสู่ DEM รูปแบบอื่นๆ
  • รูปแบบที่แน่นอนที่สุดสำหรับ VTBuilder คือ ArcInfo Ascii Grid
รูปแบบ DEM ที่โปรแกรมสามารถ export ได้
  • ผมลอง export เป็น Geotiff มาดูครับว่าเกิดอะไรขึ้นผมลองเปิดด้วย Global Mapper ได้ผลลัพธ์ดังรูปด้านล่าง คล้ายกับ model ที่ครูสมัยมัธยมให้ทำคือเป็นชั้นๆ ฮ่า ฮ่า แปลกดีเหมือนกันครับ
ได้ DEM ลักษณะเหมือน model ที่ตัดกระดาษแปะเป็นชั้นๆ

สรุป

  • สำหรับความรู้สึกของผม VTBuilder นี่ก็ไม่เลวเลยครับ เล็ก เร็วดีครับที่สำคัญคือฟรี

SAGA GIS สุดยอดโปรแกรมวิเคราะห์ Terrain

SAGA GIS (System for Automated Geoscientific Analyses)

  • ดูชื่อโปรแกรมแล้วผมค่อนข้างงงเล็กๆ สำหรับชื่อ Geoscientific เปิดดิคไม่พบน่าจะเป็นการผสมกันระหว่าง Geo กับ Scientific รวมๆแล้วน่าจะว่าหมายถึง วิทยาศาสตร์ธรณ๊ รวมๆแล้วชื่อโปรแกรมน่าจะเป็นโปรแกรมวิเคราะห์ด้านวิทยาศาสตร์ธรณี อะไรประมาณนี้ สนใจเข้าไปดูได้ website ของผู้พัฒนา SAGA GIS
  • โปรแกรมพัฒนาด้วย C++ ใช้ widget ของ WxWidget เป็นโปรแกรม opensource และ cross-platform อีกตัวหนึ่ง ผมลองใช้ทั้งฝั่งวินโดส์และใน Ubuntu ก็ทำงานได้ไม่มีที่ติ

SAGA_firsttime

สุดยอดด้านการวิเคราะห์ด้าน Terrain

  • ครั้งก่อนผมแนะนำ Landserf แต่ SAGA มีอะไรมากกว่า ทำงานได้เร็วมาก ตอนแรกๆผมนั่งแกะโปรแกรมตามนิสัยเสียที่ไม่ชอบอ่านคู่มือก่อน ดู User interface ดูเหมือนจะใช้ยากแต่ถ้าจับทางได้ก็ง่าย
  • จั่วหัวว่าวิเคราะห์ด้าน Terrain แต่จริงๆแล้วมากกว่านั้นมากก็คงตามชื่อคือ Geoscientific รวมๆแล้ววิเคราะห์ด้าน Hydrology (การไหลของน้ำ การเก็บกักน้ำ), Fire spreading analysis (การจำลองเมื่อเกิดไฟไหม้) และที่ผมแปลไม่ออกเลยก็คือการวิเคราะห์ Morphometry คืออะไรก็ไม่ทราบ(ฮา)
  • ตัวผมเองใช้งานเฉพาะด้านวิเคราะห์ Terrain เท่านั้น ด้านอื่นจะไม่กล่าวถึงเพราะไม่ใช่ด้านที่ถนัด

Terrain Analysis – Compound Analyses

  • ฟังก์ชั่นการวิเคราะห์แต่ละอย่างใน SAGA จะเรียกว่า module ซึ่งในโปรแกรมมีหลาย module ตามแต่ประเภทการวิเคราะห์ การวิเคราะห์ Terrain จะต้องการ Grid หรือ DEM เป็น input
  • Terrain Analysis – Compound Analyses เป็น module ที่ผมใช้ลักษณะ 16 in 1 คือวิเคราะห์ Analytical Hillshading, Slope, Aspect, Curvature, Plan Curvature, Profile Curvature, Convergence Index, Curvature Classification, Catchment Area, Wetness Index, Stream Power, LS-Factor, Channel Network, Altitude above channel network, Channel Network Base Level และ Channel Network Subbasin
  • SAGA ไม่ได้ใช้ไลบรารีของ GDAL ทำให้การ import DEM ได้ไม่กี่ฟอร์แม็ต ซึ่งฟอร์แม็ตที่ผมชอบใช้คือ Arc/Info Grid ฟอร์แม็ตข้อมูลนี้จะเป็นไฟล์ Ascii ควรใช้โปรแกรมอื่นหรือไลบรารี GDAL ทำการแปลงข้อมูล DEM จากรูปแบบอื่นๆเช่น GeoTiff

ดาวน์โหลดและติดตั้ง

  • ถ้าเป็นฝั่งวินโดส์ดาวน์โหลดได้ที่ SourceForge ดาวน์ไฟล์ setup มาแล้วขนาดประมาณ 6 MB ติดตั้งได้ง่ายๆ ถ้าเป็นฝั่ง Ubuntu ผมใช้ Ubuntu Software Center พิมพ์ค้นหาคำว่า SAGA จะได้ผลลัพธ์ดังรูป คลิกที่ install ก็จะเริ่มดาวน์โหลดจากอินเตอร์เน็ตกันจนเสร็จ
Ubuntu Software Center
  • หรือจะติดตั้งผ่าน Synaptic แล้วพิมพ์ค้นหาเช่นเดียวกันก็ได้

User Interface

  • มาดู user interfaces ของโปรแกรมที่ดูเหมือนจะใช้ยาก แต่ลองแล้วง่ายมาก โปรแกรมใช้ WxWidget เป็นตัวแสดงผล user interfaces ที่เป็นกราฟฟิคทั้งหลายแต่ทำไมถึงดูไม่สวย แต่ไม่เป็นไรเราเอาผลลัพธ์ ใช้งานง่าย เร็วแค่นี้ก็พอแล้ว

saga_interfaces

  • จากรูปด้านบนแสดงพาเนลหลักของโปรแกรม จะเห็นช่องแสดงลิสต์ของ module เรียงลงมาหลายๆอย่างให้เลือกใช้งาน ที่สำคัญคือ แท็บเลือกการแสดงผลคือ Modules, Data และ Maps การ input ข้อมูลเข้าไป่เช่น DEM, รูปภาพ หรือ Shape file เข้าไปจะไปปรากฎในช่อง Data ต้องคลิกที่แท็บ Data ถึงจะเห็นข้อมูล หรือแม้แต่การ process ข้อมูลจะได้ output ออกมาจะปรากฎในช่อง Data นี้ ถ้าต้องการข้อมูลแสดงผลต้องสั่งถึงจะเห็นใน Map ซึ่งข้อดีก็คือถ้ายังไม่แสดงผลใน Map จะไม่กิน memory

ข้อมูลที่ใช้ในการทดสอบ

  • ข้อมูลที่นำมาทดสอบเป็นฟอร์แม็ต Arc/Info Grid มีขนาด pixel ในแนวแกน x เท่ากับ 1986 จำนวน pixel ในแนวแกน y เท่ากับ 6565 พูดง่ายคือ 1986 x 6565 ตัว resolution ของ DEM มีขนาด 30m x 30m ครอบคลุมพื้นที่ประมาณ 59.58 กม. x 196.95 กม. ขนาดไฟล์นี้ประมาณ 90 MB เอาละมาลอง input ข้อมูลเข้าโปรแกรมกัน

SAGA_importgrid

  • จากรูปด้านบนคลิกที่ลิสต์ module “Import ESRI Arc/Info Grid” แล้ว browse เปิดไฟล์คลิก Okay ถ้าไม่มีอะไรผิดพลาด ถ้าไฟล์ใหญ่จะใช้เวลาสักพักหนึ่ง ต่อไปก็คลิกที่แท็บ “Data” ก็จะเห็นผลลัพธ์ดังรูปด้านล่าง

SAGA_showdata

  • รูปด้านบนจะเห็นว่าในช่องแสดง Maps ยังว่างๆ มาลองแสดงผลของ DEM ดูกัน

SAGA_showmap

  • เมื่อสั่ง show grid เพื่อแสดง DEM ใน Map จะเห็นผลลัพธ์ดังรูปด้านล่าง

SAGA_shownmap

การวิเคราะห์ Terrain ด้วยโมดูล Compound Analyses

  • ดังที่ผมกล่าวไปแล้วตอนต้นว่าเป็นโมดูล 16 in 1 ถ้าไม่ต้องการผลลัพธ์ขนาดนี้ก็ไม่ต้องใช้โมดูล นี้เช่นต้องการแค่ Analytica Hillshading เลือกใช้ Terrain Analysis – Lighting, Visibility แล้วเลือก Analytical Hillshading ก็พอ กลับมาที่แท็บ modules อีกครั้งผมเลือก Terrain Analysis – Compound Analyses

SAGA_terrainanalysis

  • รูปด้านบนเมื่อคลิกเลือก Compound Analyses แล้วจะเห็นหน้าต่างในป้อนข้อมูลที่จะเป็น input เราเลือกง่ายๆเพราะโปรแกรมมองข้อมูลที่ import มาแล้วสร้างลิสต์ให้เราเลือกง่ายๆ ดูรูปประกอบก็แล้วกัน แต่ต้องบอกกันก่อนว่าถ้า DEM มีขนาดใหญ่และเลือกการวิเคราะห์ทีเดียวแบบมากๆอย่างนี้จะใช้เวลามาก สั่งโมดูลนี้นั้งดื่มกาแฟรอได้เลย สำหรับข้อมูล DEM ตัวนี้ใช้เวลาประมาณ 40 นาที (spec. notebook ผมธรรมดามาก cpu 2.4 GHz แรม 2 GB) ไม่ธรรมดาเลย
  • จริงๆแล้วผมต้องการ Channle Network ก็คือทิศทางไหลของน้ำ บางโปรแกรมเรียกว่า Watershed ซึ่งลองมาหลายโปรแกรมแม้กระทั่ง Landserf ก็ทำได้ไม่ดีเท่านี้ และโมดูลนี้ยังน็อคเอ๊าท์โปรแกรมเชิงพาณิชย์อย่าง Global Mapper (ฟังก์ชั่นนี้เพิ่งมีในเวอร์ชั่น 12 แต่น่าผิดหวังมากเพราะผมลองใช้ DEM ตัวนี้เปิดคอมพิวเตอร์ทิ้งไว้ทั้งคืนยังไม่เสร็จ) รูปด้านล่างแสดงผลลัพธ์เมื่อโปรแกรมทำการคำนวณให้เรียบร้อยแล้ว

SAGA_results

ผลลัพธ์การวิเคราะห์

  • ลองมาดูผลลัพธ์กันทีละอย่างที่น่าสนใจ จะลองที่ Analytical Hillshading หรือทั่วๆไปเรียกว่า Shaded Relief จากรูปด้านบนที่ข่องแสดง Data เลือกคลิกขวาที่ 02-Analytical Hillshading แล้วเลือก Show Grid โปรแกรมจะถามว่าจะให้ไปซ้อนกับ Map อื่นๆหรือไม่หรือเลือกแสดงผลเฉพาะ ผมเลือก New… เพื่อแสดงผลที่หน้าต่างใหม่ จะเห็นผลลัพธ์ดังรูปด้านล่าง สวยงามมาก ถ้าต้องการ Save Grid ก็ต้องไปที่แท็บ Modules แล้วเลือก Import/Export Grids… แล้วเลือกฟอร์แม็ตที่ต้องการ โปรแกรมจะถามว่าต้องการ Save map ตัวไหน

SAGA_shadedrelief

  • มาดูผลลัพธ์ Slope กัน ดูรูปด้านล่างจะเป็น shaded อีกแบบหนึ่งที่แยกโทนสีด้วยความชันของภูมิประเทศ สีเข้มจะชันมาก สีอ่อนจะชันน้อย

SAGA_slope

  • ถ้าดูในช่อง Data จะเห็น Shapes เป็น vector อยู่แสดง Channel Network ผมคลิกขวาแล้วเลือก Show Shapes ผมเลือกที่จะซ้อนไปบน map แสดง Analytical Hillshading ดังรูปด้านล่าง

SAGA_Addlayer

  • จะเห็นผลลัพธ์ดังรูปด้านล่าง ผมปรับ transparacy ของตัว shaded relief ประมาณ 30 % เพื่อให้ลายเส้นของ Channel Network เด่นขึ้นมา

SAGA_shown_channelnetworkonshaded

การ Save output

  • ผมจะลอง Save ตัว channel network ตัวนี้ออกเป็น shape file ที่แท็บคลิกที่ Data แล้วคลิกขวาดังรูปด้านล่าง ซึ่งสามารถ save ได้ เพื่อเอาไปเปิดในโปรแกรม GIS อื่นๆSAGA_shownsaveshape
  • ผมลองนำ channel network ไปขึ้นที่ Quantam GIS เพื่อจัดทำแผนที่ลองดูรูปด้านล่าง

QGIS_channelnetwork

  • ถ้า DEM ไม่ละเอียดพอหมายความว่าค่าระดับไม่ดี อย่าง ASTER GDEM ที่ผมเคยเขียนไปแล้วว่าตรงแม่น้ำค่าระดับส่วนมากจะผิด ทำให้ SAGA ประมวลผล channel network ผิดไปด้วย ดูรูปด้านล่างจะเห็นว่า Channel network ไม่ตรงกับภาพถ่ายดาวเทียม

SAGA_problemfromDEM

ความสามารถด้านอื่นๆ

  • สำหรับ SAGA GIS ก็เป็นโปรแกรมตัวหนึ่งที่ผมชอบ ที่สำคัญคือเป็นโปรแกรมที่ฟรี สามารถใช้ได้หลาย platform ยังมีความสามารถด้านอื่นๆที่ผมไม่ได้พูดถึง ผมลองดูคร่าวๆสามารถ edit shape file ได้แต่ไม่รู้เจ๋งแค่ไหน สามารถแปลงฟอร์แม็ตได้ ดูภาพ 3D ก็พอจะกล้อมแกล้มไปได้  สร้างภาพ Anaglyph ได้  อนาคตผมก็คิดว่าจะมีโปรแกรมแบบนี้ให้ใช้ได้อีกมากมาย สามารถทดแทนโปรแกรมเชิงพาณิชย์ได้พอสมควร

Landserf อีกโปรแกรมดู Terrain เด่นด้านการวิเคราะห์ภูมิประเทศ (Terrain Analysis) ตอนที่ 2

  • จากตอนที่ 1 จะเห็นว่าการแปลงจาก DEM เป็น TIN นั้นไม่น่าประทับใจนักถ้าจะได้ผลลัพธ์ที่ละเอียด โปรแกรมจะใช้เวลา generate นานมาก แต่อย่างไรก็ตามผู้อ่านจะลองก็ได้

การวิเคราะห์ Terrain

การวิเคราะห์ Slope

  • มาดูฟีเจอร์เด่นของ Landserf กัน ผมจะลองเพียงบางฟีเจอร์ที่เด่ินๆเท่านั้นมาดูตัวแรกคือ การวิเคราะห์ที่อยู่ในหมวดหมู่ Surface Measurement คือการวิเคราะห์ Slope คลิกที่เมนู Analyse > Surface Parameter… จะเห็น dialog เล็กๆขึ้นมาให้เลือกว่าจะเลือกวิเคราะห์แบบใด ตอนนี้ผมจะเลือก slope
เลือกการวิเคราะห์แบบ slope
  • จะเห็นผลลัพธ์ออกมาดังรูปด้านล่าง สีเข้มๆหมายถึงเป็นพื้นที่ที่มีความชันมาก สีอ่อนๆก็ชันน้อยๆ
Landserf แสดงผลลัพธ์ของการวิเคราะห์ slope

การวิเคราะห์เพื่อหา Feature Extraction

  • มาดูการวิเคราะห์ในลำดับถัดไปดังที่กล่าวมาแล้วคือ Peak, Pit, Ridge, Pass, Channel, Planar รวมๆแล้วในโปรแกรมจะเรียกว่า Feature Extraction คลิกที่เมนู Analyse > Surface Parameter… เลือก Feature Extraction ดังรูปด้านล่าง
เลือกวิเคราะห์ Feature Extraction
  • จะได้ผลลัพธ์ที่แสดง Peak, Channel, Pit, Ridge, Pass, Planar ดังรูปด้านล่าง แต่ลักษณะที่เห็นได้ชัดกว่าจะเห็น สีเหลืองเป็นสันเขา (Ridge) สีน้ำเงินเป็นทางน้ำหรือร่องน้ำ (Channel) ส่วน Peak แสดงด้วยสีแดง และ Pass แสดงด้วยสีเขียว อาจจะต้องสังเกตกันหน่อยด้วยการ zoom เข้าไปดูใกล้ๆ
แสดงผลลัพธ์การวิเคราะห์หา Peak, Pit, Pass, Ridge, Channel, Planar

การวิเคราะห์ Peak Classification

  • มาลองดูการวิเคราะห์แบบ Peak ที่สามารถตั้งเงื่อนไขได้ คลิกที่เมนู Analyse > Peak Classification… จะเห็น dialog ดังรูปด้านล่าง ผมเลือก Minumum height of peak คือความสูงน้อยที่สุดเพื่อจะให้โปรแกรมคำนวณหา Peak ส่วนในช่อง Minimum drop surrounding peak คือระยะขยายจากจุด peak ทั้งคู่หน่วยเป็นเมตร
ตั้งเงื่อนไขให้การวิเคราะห์ Peak Classification
  • เมื่อคลิก OK แล้วจะโปรแกรมจะทำการคำนวณมาให้ แต่ที่ผมลองแล้วปรากฏว่ายังไม่ยอมแสดงผลลัพธ์ให้ดังรูปด้านล่าง
ลำดับการเรียกภาพของ Peak เพื่อแสดงผลบน Shaded Relief (Primary DEM)
  • จากรูปด้านบนเราสามารถสั่งให้โปรแกรม Blending ภาพ raster ไฟล์ไหนก็ได้ ที่สำคัญคือ Primary raster เราจะคลิกขวาก่อน แล้วตัว secondary เราจะคลิกซ้ายแล้วที่เมนูคลิก Display > Relief หรือ Display > Raster จะได้ผลลัพธ์ดังรูปด้านล่าง ซึ่งเมื่อดูแล้วค่อนข้างชัดเจน
Landserf แสดง Peak Classification

การวิเคราะห์ Flow Accumulation

  • การวิเคราะห์เพื่อหาการไหลรวมของน้ำ คลิกที่เมนู Analyse > Flow Accumulation… จะเห็น dialog ดังรูปด้านล่าง Minumum flow magnitude ผมใส่เข้าไป 5 ถ้าค่ายิ่งน้อย channel ก็จะยิ่งปรากฎชัด % sample ผมเลื่อนไปประมาณ 20
แสดงการตั้งค่าตัวเลือกสำหรับการวิเคราะห์ Flow Accumulation
  • ดูผลลัพธ์ที่ได้ ถ้าโปรแกรมไม่แสดงผลให้คลิกขวาที่รูป thumbnail หรือสัญลักษณ์ที่ Primary DEM (อยู่บนสุด) แล้วคลิกซ้ายที่รูป Flow Accumulation แล้วคลิกที่เมนู Display > Relief อย่าลืมว่าการวิเคราะห์นี้เราเลือกใ้ห้ generate เป็น vector ด้วย ที่เมนู Display > Vector จะเห็นผลลัพธ์ดังรูปด้านล่าง ซึ่งแสดงผลลักษณะของ channel ของร่องน้ำได้ชัดเจนดี ลักษณะคล้ายๆขนหลายๆเส้นมารวมกระจุก
แสดงผลลัพธ์จาก Flow Accumulation
  • เป็นอย่างไรบ้างครับ Landserf เป็นโปรแกรมขนาดเล็กๆ แต่มีคุณสมบัติการวิเคราะห์ด้าน Terrain ที่ดีพอสมควร ถ้าลองค้นใน internet เกี่ยวกับผู้พัฒนาโปรแกรมคือ Jo Wood จะเห็นมีเอกสารที่เกี่ยวข้องกับค้นคว้าและวิจัยด้าน Terrain อยู่พอสมควร ส่วนเรื่องที่ผมยังไม่กล่าวถึงในที่นี้คือเรื่องการวิเคราะห์แบบ Multi-scale หรือที่เรียกว่า Advanced morphometric analysis ถ้ามีโอกาสจะได้นำมากล่าวในภายหลัง

ดาวน์โหลดข้อมูลทดสอบ

Landserf อีกโปรแกรมดู Terrain เด่นด้านการวิเคราะห์ภูมิประเทศ (Terrain Analysis) ตอนที่ 1

  • ห่างหายไปพอสมควรครับ ผมเพิ่งกลับจากนอร์เวย์ ดินแดนพระอาทิตย์เที่ยงคืน  ตื่นตาตื่นใจเพราะเป็นครั้งแรกที่มาประเทศในย่านแสกนดิเนเวีย เป็นประเทศที่ติดอันดับค่าครองชีพสูงที่สุดในยุโรป ติดอันดับประเทศที่น่าอยู่ที่สุดหลายปีซ้อน แต่นอร์เวย์ประชากรน้อยมากไม่ถึง 5 ล้านคน มองดูนอร์เวย์แล้วย้อนมาดูเมืองไทย ต่างกันเหลือเกิน เมืองไทยวุ่ยวายเหลือเกินไม่รู้จักจบ ที่นั่นผมพบว่าสงบเงียบ จนบางครั้งหาคนไม่เจอ นี่ฮาจริงๆเลยนะ ผมอยู่ที่เมือง Halden ห่างจากเมืองหลวง Oslo ประมาณ 100 กม. ไปเดินดูสถานีรถไฟประมาณ 2 ทุ่ม(ยังสว่างโร่อยู่จะมืดๆประมาณ 6 ทุ่ม) กับรุ่นน้องที่ไปด้วยกัน ปรากฏว่าสถานีรถไฟ มีคนทำงานแค่ 2 คน หาผู้โดยสารไม่มีสักคน ด้วยความ Hi tech ทุกๆสิ่งทุกๆอย่างไม่ต้องใช้คนมาก ถ้าจะซื้อตั๋วก็ใช้ตู้กดเอาอย่างเดียว
  • ด้วยความที่นอร์เวย์ประชากรน้อย มาตรฐานการครองชีพสูง ทำให้คนนอร์เวย์ค่อนข้างจะเหงา ก็แปลกดีครับ กลับมาที่ Landserf โปรแกรมด้าน Terrain visualization & Analysis

Landserf VS. Terrain Bender

 

โปรแกรม Landserf ภาพจาก website ของผู้พัฒนา
  • โปรแกรมที่ผมแนะนำไปตอนก่อนๆคือ Terrain Bender นั้นผมประทับใจในเรื่องการแสดงผล Terrain แบบ 3D ที่โปรแกรมเมอร์มีมุมมองที่เด็ดเหลือเกิน ส่วน Landserf การแสดงผลในด้าน 3D ยังไม่ดีเท่า แต่ที่ได้มาทดแทนคือมีฟังก์ชั่นการวิเคราะภูมิประัเทศ (Terrain Analysis) เช่น
    • Surface  Measurement เช่นการวิเคราะห์ Elevation, Slope, Aspect และ 7 รูปแบบของการวิเคราะห์ด้าน Curvature
    • Multi-Scale Query and Analysis เหมือนกับ Surface Measurement แต่สามารถเปลี่ยน scale ได้
    • Peak Classification เป็นการวิเคราะห์เพื่อหาจุดสูงสุดของยอดเขา
    • Fuzzy Feature Classifications เป็นการวิเคราะห์เพื่อดึงข้อมูลต่างๆออกมาเช่น Peak (ยอด), Pit (หลุม), Channel (ร่องน้ำ). Ridge(สันเขา). Pass (ช่องเขา). Planar(พื้นราบ)
    • Flow Accumulation เป็นการวิเคราะห์หาการไหลรวมของน้ำ
  • ส่วนฟีเจอร์อื่นๆได้แก่เมนู Transform ที่สำคัญคือ
    • DEM to Contours สามารถสร้างเส้นชั้นความสูงจาก DEM ได้ สามารถเซฟออกเป็นเวคเตอร์ได้ เช่นรูปแบบ Shape file
    • DEM to TIN สามารถสร้าง TIN (Triangulated Irregular Network) จาก DEM ได้และสามารถเซฟได้ในรูปแบบ
    • Points to TIN เมื่อนำข้อมูลเข้าแบบ point ก็สามารถแปลงเป็น TIN  ได้
    • TIN to DEM ถ้าข้อมูลนำเข้าเป็น TIN สามารถ generate เป็น DEM ได้
    • TIN to Points เมื่อข้อมูลนำเข้าเป็น TIN สามารถแปลงเป็น text file ได้
  • ถ้าเรามีข้อมูลเป็น point ในฟอร์แม็ต N,E,Z หรือ N E Z สามารถนำเข้าเป็น point ได้ จากนั้นใช้คำสั่งจาก Points to TIN แล้วสั่่งต่ออด้วย TIN to DEM พูดกันง่ายๆคือสร้าง DEM จาก 3D Point แต่เท่าที่ผมลองแล้วไม่ work มันนานจนต้องปิดโปรแกรมทิ้ง ก็น่าเสียดายมากๆ ที่โปรแกรมฟรีทั้งหลาย ยังไม่มีตัวไหนเทียบได้กับโปรแกรมเชิงพาณิชย์เช่น ERDAS หรือ Global Mapper

ความเหมือน ข้อดีและข้อเสียของ Landserf & Terrain Bender

  • ทั้งคู่พัฒนาด้วย Java Base โปรแกรมสนับสนุน OpenGL ทั้งคู่ ทั้งสองโปรแกรมพัฒนาด้วยจำนวนคนไม่มาก Landserf พัฒนาโดย Jo Wood ส่วน Terrain Bender พัฒนาโดย Helen Jenny and Bernhard Jenny
  • Terrain Bender ที่ผมลองแล้วไม่ work บนโน๊ตบุคที่ไม่ใช้การ์ดจอแยก โดยเฉพาะของ intel คือเรียกโปรแกรมแล้วก็หายไปเลย แต่อีกเครื่องใช้การ์ดจอของ ATI กลับไม่มีปัญหา ส่วน Landserf ไม่มีปัญหา
  • การสนับสนุนฟอร์แม็ตของ Raster & Vector น้อยเกินไป สองโปรแกรมนี้ถ้าใช้ไลบรารี GDAL จะสนับสนุนฟอร์แม็ตได้มากมาย
  • Landserf ใช้งานยากไปนิด แต่เท่าที่ผมลองผิดลองถูก ไม่นานก็รู้แนวทางการใช้โปรแกรมแบบยังไงไม่ให้หงุดหงิด
  • เหนืออื่นใดคือทั้งสองโปรแกรมนั้นฟรีและผมค่อนข้างชอบทั้งคู่

ดาวน์โหลดและติดตั้ง

  • ดาวน์โหลด landserf สามารถไปได้ที่ลิงค์ download/ ก่อนอื่นใดต้องกรอกชื่อ email address ก่อนจะดาวน์โหลดได้ ไฟล์ที่ได้มาตอนที่เขียน blog นี้คือเวอร์ชั่น 2.3 จะได้ไฟล์เป็น zip ออกมาเมื่อ unzip แล้วจะได้ไฟล์ .jar ออกมา สำหรับผมแล้วไม่สันทัด java การจะติดตั้งโปรแกรมผมใช้ตัวช่วยที่ทำให้การติดตั้งโปรแกรมทำได้ง่าย
  • ตัวช่วยที่ว่าคือ IzPack ตอนนี้รุ่น 4.3.3 เป็น opensource ที่มุ่งจัดการกับโปรแกรมที่เขียนด้วย Java ให้สามารถติดตั้งได้ง่ายๆ สามารถไปดาวน์โหลดได้ที่นี่ IzPack เมื่อดาวน์โหลดแล้วทำการติดตั้งได้เลย เป็น self-executed file
  • ติดตั้ง landserf เปิดโฟลเดอร์ไฟล์ jar ของ landserf คลิกขวาเลือก Open with > Java Platform SE Binary จะเรียก IzPack มาดังรูปด้านล่าง
รัน jar file ด้วย IzPack
  • ทำการติดตั้ง Landsert ต่อไป
ติดตั้ง Landserf
  • ติดตั้ง landserf แล้วถ้าเลือกตาม default โปรแกรมจะถูกติดตั้งที่ “c:\program files\landserf” ต่อไปมาดูกันว่า landserf ทำอะไรได้บ้าง

Surface Classification Feature

  • ก่อนจะใช้โปรแกรมมาดูคุณลักษณะพื้นฐานของ Terrain Analysis กันก่อน การวิเคราะห์จะให้ผลลัพธ์อยู่ 6 อย่างที่ผมกล่าวไปข้างต้นบ้างแล้วคือ Peak, Channel, Pass, Ridge, Pit, Planar การวิเคราะห์ภูมิประเทศเป็นเรื่องค่อนข้างลึกซึ้ง ผมค้นดูแล้วมีการทำวิจัยกันมาก การวิเคราะห์จาก DEM จะใช้อัลกอริทึ่มแยก pixel ดังรูปด้านล่าง
การวิเคราะห์จุุดภาพลักษณะภูมิประเทศในมุม 3D
  • รูปด้านบนผมนำมาจากบทความ สามารถดาวน์โหลดได้ตามลิงค์นี้ BrownD.pdf ดูคนเขียนแล้วไม่ใช่อื่นไกล มีคุณ Jo Wood ผู้พัฒนา landserf รวมอยู่ด้วย
การวิเคราะห์จุดภาพขนาด 3×3 เทียบกับจุดตรงกลาง
  • รูปด้านบนเป็นการวิเคราะห์จุดภาพขนาด 3×3 โดยการเทียบความสูงกับจุดกึ่งกลางรูป ถ้ามากกว่าจะเป็นบวก ถ้าน้อยกว่าจะเป็นลบ ถ้าลักษณะของจุดภาพขนาด 3×3 เป็นไปดัง pattern ไหนก็จะได้ลักษณะภูมิประเทศแบบนั้น ฟังดูเหมือนง่ายๆ ถ้าดูฟังก์ชั่นที่ได้ทำการวิจัย คิดค้นกันมาก็ซับซ้อนพอสมควร

การใช้โปรแกรม Landserf

  • เมื่อเปิดโปรแกรมมาแล้วจะเห็นหน้าตาของโปรแกรมเรียบง่ายดี ใช้เมนู File > Open… ผมมีไฟล์ทดสอบอยู่ฟอร์แม็ตคือ ArcGIS text raster (*.grd, *.asc) เป็น text file เก็บข้อมูล point ในรูปตาราง
เปิดไฟล์ทดสอบ
  • จะเห็นหน้าตาของโปรแกรมแสดงผล DEM ดังรูปด้านล่าง
Landserf แสดงผล DEM ในรูป shade สี
    • จะลองปรับให้โปรแกรมแสดงผลในรูป Shaded Relief เพื่อให้ดูง่ายและสวยงามขึ้น ที่โปรแกรมไปตั้งค่า Shaded Relief ที่เมนู Configure > Shaded Relief ตรง Vertical Exaggeration ปรับไปประมาณ 3.0
ตั้งค่าการแสดงผล Shaded Relief
  • ต่อไปไปคลิกที่เมนู Display > Relief จะได้รูปที่สวยงามขึ้น
แสดงผล Shaded Relief

การสร้างเส้นชั้นความสูง (Contours)

  • ก่อนจะไปดู Terrain Analysis มาดูฟีเจอร์ที่น่าสนใจกันก่อน ก็คือการสร้างเส้นชั้นความสูงคลิกที่เมนู Transform > DEM to Contours ตั้งค่า Min contour level เป็น 0 (ใช้เลขจำนวนเต็ม) และ Contour interval ไป 20 เมตรดังรูปด้านล่าง
ตั้งค่าเส้นชั้นความสูง
  • ตามข้อมูลที่ทดสอบใช้เวลาไม่นานนัก แต่เมื่อสร้างเสร็จแล้วเราอาจจะงงๆว่าทำไมโปรแกรมไม่แสดงเส้น contour ให้เห็นอัตโนมัติ ไปตั้งค่าก่อนด้วยการคลิกที่เมนู Display > Vector ให้แสดงเครื่องหมายถูกหน้าคำว่า Vector จะเห็นหน้าตาของ contour ดังรูป ผม zoom เข้าไปเพื่อให้ดูง่าย จากรูปด้านล่างจะเห็นตรงภาพเล็กด้านซ้ายจะเห็นตัว V แสดงว่าเป็นเลเยอร์ ของ Vector โชคร้ายไปหน่อยที่ผู้พัฒนาไม่ได้เลือกให้ตั้งค่าสีได้เอง สีที่สร้างมาให้จะเป็นสีตาม shade ของ DEM แต่ก็สวยดึครับ
Landserf แสดงเส้นชึ้นความสูง
  • การเซฟเส้นชั้นความสูงออกไปในรูป Shape file ตอนแรกก็งงๆว่าทำได้อย่างไร ที่จริงตรงรูปเล็กๆด้านซ้ายถ้าคลิกขวาแล้วเลือกเซฟได้ก็จะดี แต่ในโปรแกรมไม่ได้ออกแบบไว้ วิธีการคือใช้เมาส์ซ้ายคลิกที่รูปภาพเล็กของ contour แล้วใช้เมนู File > Save…เลือกฟอร์แม็ตเป็น ArcGIS Shape file ผมลองไปเปิดดูโปรแกรมอื่น ไม่มีปัญหา
  • ก็ขอจบตอนนี้ไว้ก่อนเพราะจะยาวไปมาก พบกันตอนหน้าครับ

Terrain Bender โปรแกรมแสดง DEM ที่บรรเจิดสุดๆ

  • ช่วงไม่นานมานี้ผม search ใน google พบกับโปรแกรมแสดงการจำลอง DEM เป็น 3D คือโปรแกรม Terrain Bender เห็นโปรแกรมต้องทึ่งในไอเดีย ครั้งแรกๆที่ผมเห็นใน website ผมคิดว่าคนพัฒนาโปรแกรมต้องเพี๊ยนสุดๆ ลองดูรูปจาก website
ภาพจาก website ของผู้พัฒนา Terrain Bender
  • ตัวโปรแกรมเป็น cross-platform มีให้ดาวน์โหลดใช้บน Windows, Linux แล้วก็ Mac OS X พัฒนาด้วย Java แสดงผล 3D โดยใช้ OpenGL ได้สวยงามทีเดียว
  • ผู้พัฒนาโปรแกรมเป็นชาวสวิสเซอร์แลนด์ คือ Helen Jenny and Bernhard Jenny, Institute of Cartography, ETH Zurich ผมดูชื่อแล้วสองคนน่าจะเป็นสามี ภรรยากัน ดู profile แล้วพบแต่ของ Bernhard Jenny ดูผลงานและรางวัลที่ได้รับไม่ธรรมดาเลย กลับมาดูงานวิจัยที่เกี่ยวกับงาน Cartography ของ Bernhard Jenny พบว่ามีหลายชิ้นที่น่าสนใจ งานวิจัยบางส่วนตกผลึกกลายเป็นผลงานก็คือ Terrain Bender ที่กำลังกล่าวถึงอยู่
การ projection ภาพ 3D ด้วยมุมต่างๆของสายตา
  • โปรแกรมนี้มุ่งแสดงภาพ 3D บน plane ที่บิดทุกรูปแบบจนถึงทรงกลม สามารถนำภาพถ่ายทางอากาศมาสวมให้ก็ได้ (Drape) แต่จำกัดขนาดภาพใหญ่ไม่เกิน 8192×8192 pixels การแสดง DEM ที่ผู้พัฒนาเรียกว่า Progressive Bending คล้ายกับว่าผู้มองลงมาที่ DEM อยู่บนเครื่องบิน สายตาของมุมมองชันลงมาด้านล่าง และมุมมองเกือบจะราบเมื่อมองไปไกลๆ ที่เส้นขอบฟ้า มีประโยชน์มากเพราะแสดงได้สมจริงมากและสามารถพลิกดูพื้นที่ที่ต้องการได้อย่างรวดเร็ว

ดาวน์โหลด

  • ตามลิงค์นี้ไปแล้วค่อยไปหน้าดาวน์โหลด http://www.terraincartography.com/terrainbender/ มีให้เลือกทั้ง windows, linux และก็ Mac OS X บนวินโดส์มีทั้ง 32 bit และ 64 bit เมื่อดาวน์โหลดมาแล้วไม่มีไฟล์ setup ให้แตก zip ไปวางไว้ตรงไหนก็ได้ เมื่อจะรันแค่เข้าไปคลิกที่ไฟล์ TerrainBender.exe ก็เป็นอันใช้ได้

ไฟล์ข้อมูลที่ใช้ทดสอบ

    • ผมดาวน์โหลด DEM จาก Aster GDEM ที่ผมเคยถึงไปแล้ว ได้มา 2 ไฟล์คือ ASTGTM_N13E099_dem.tif และ ASTGTM_N14E099_dem.tif ทั้งสองรูปเป็น geographic Lat/Long ผมนำมารวมกันด้วย tool ของ GDAL/OGR คือ gdalwarp เพื่อรวมไฟล์ก่อน แล้ว reproject จากระบบพิกัด geographic WGS84 (EPSG = 4326) ไปเป็น UTM zone 47N (EPSG=32647)

$gdalwarp ASTGTM_N13E099_dem.tif ASTGTM_N14E099_dem.tif merge_dem_wgs84.tif
$gdalwarp -s_srs EPSG:4326 -t_srs EPSG:32647 merge_dem_wgs84.tif merge_dem_utm47n.tif

  • บางครั้งการ reprojection ในวินโดส์โปรแกรมฟ้องว่าหาไฟล์ ที่เก็บ EPSG คือไฟล์ gcs.csv ไม่พบเนื่องจากตั้งค่า GDAL_DATA ไม่ถูกหรือไม่ตรง path ที่เก็บไฟล์ gcs.csv ใน Dos prompt ผมป้อน $set GDAL_DATA=C:\OSGeo4W\share\gdal (ผมติดตั้ง OSGeo4W) แล้วถึงจะรัน gdalwarp เพื่อ reprojection ได้สำเร็จ
  • ลองเปิดดูด้วย Quantum GIS ว่าใช้ได้หรือไม่ ลองแล้ว OK
แสดงผลใน QGIS
  • ส่วนรูปเป็นไฟล์ jpeg ของแผนที่ L7018 แถวๆจังหวัดกาญจนบุรี  (s7018-kan.jpg พร้อมด้วย world file) ต่อไปจะ crop DEM ให้มีขนาดเท่ากับไฟล์รูปแผนที่ ตรวจสอบขนาดของไฟล์ด้วย gdalinfo

$gdalinfo s7018-kan.jpg
Driver: JPEG/JPEG JFIF
Files: s7018-kan.jpg
s7018-kan.jgw
Size is 2986, 2554
Coordinate System is `’
Origin = (502376.972592156264000,1547332.968661365099251)
Pixel Size = (8.000000000000000,-8.000000000000000)
Image Structure Metadata:
SOURCE_COLOR_SPACE=YCbCr
INTERLEAVE=PIXEL
COMPRESSION=JPEG
Corner Coordinates:
Upper Left ( 502376.973, 1547332.969)
Lower Left ( 502376.973, 1526900.969)
Upper Right ( 526264.973, 1547332.969)
Lower Right ( 526264.973, 1526900.969)
Center ( 514320.973, 1537116.969)
Band 1 Block=2986×1 Type=Byte, ColorInterp=Red
Image Structure Metadata:
COMPRESSION=JPEG
Band 2 Block=2986×1 Type=Byte, ColorInterp=Green
Image Structure Metadata:
COMPRESSION=JPEG
Band 3 Block=2986×1 Type=Byte, ColorInterp=Blue
Image Structure Metadata:
COMPRESSION=JPEG

  • จะเห็นขนาดของไฟล์ที่แสดงทั้งสี่มุม เราเลือกเฉพาะ มุมล่างซ้าย (Lower Left) และมุมบนขวา (Upper Right) การ crop DEM ด้วย gdalwarp นำค่าพิกัดมุมล่างซ้ายและบนขวา ไปใส่หลัง options -te ส่วน options -ts ระบุขนาด pixel ลงไปเลยว่าขนาดเท่ากันทั้ง x และ y ผมใช้ค่า 30.5864 เมตร (ุถ้าขนาดไม่เท่ากัน Terrain Bender จะไม่ยอมอ่าน) ต่อไป แปลงฟอร์แม็ตเป็น ESRI Ascii grid format(*.asc) ที่ Terrain Bender ต้องการด้วย gdal_translate

$gdalwarp -te 502376.973 1526900.969 526264.973 1547332.969 -ts 30.5864 30.5864 merge_dem_utm47n.tif crop_dem_utm47n.tif
$gdal_translate -of AAIGrid crop_dem_utm47n.tif crop_dem_utm47n.asc

  • ลองรันโปรแกรม เปิดมาจะถามหาไฟล์ DEM เลือกไฟล์ crop_dem_utm47n.asc จะเห็นหน้าตาของโปรแกรมที่ยังไม่ได้ปรับแก้มุมมองดังรูปข้างล่าง
หน้าตาของ Terrain Bender เรียบง่าย

ปรับ shading

  • คลิกที่แท็บ “Shading” ลองปรับดูดังรูปด้านล่าง
ปรับ shading

ปรับ Vertical Exaggeration

  • ปรับ Vertical Exaggeration ไปสัก 2-4 กำลังสวย
ปรับความดิ่งเกินจริง

การ Drape

  • ลองสวมภาพแผนที่ L7018 ที่เตรียมไว้ด้วยการคลิกที่เมนู File > Open Texture Image… เลือกไฟล์ที่เตรียมไว้ ลองใช้เมาส์หมุน ส่วนการ zoom เลื่อนทำได้โดยการเลื่อนแถบ Distance, Shift X และ Shift Y
การ Drape ภาพลองไปบน DEM
  • ลองบิดไปอีกมุมหนึ่ง
มุมมองในอีกมุม

สรุป

  • เป็นผลงานที่น่าทึ่งมาก ถึงแม้จะพัฒนาด้วย Java ถึงขึ้นชื่อว่าช้า แต่ OpenGL ก็ช่วยภาพสามมิติได้มาก ไม่มีอาการกระตุกให้เห็นเลย การหมุนเลื่อนทำได้เนียนมาก ข้อเสียอย่างเดียวคือผมไปคอมไพล์เพื่อจะรันใน Ubuntu Linux แต่ไม่สำเร็จ (ส่วนหนึ่งผมไม่ค่อยคุ้นกับ Java) ถามหา library เมื่อจัดให้แล้วก็ไปฟ้อง error ที่เรื่องอื่น มันน่าจะมีคนทำเป็น package ติดตั้งได้ง่ายๆ แต่โดยรรมๆ แล้วประทับใจมากๆ
  • สนใจข้อมูลทดสอบผมฝากไฟล์เอาไว้ ไปดาวน์โหลดได้ Test_Data.zip

เปรียบเทียบ ASTER GDEM (30m) กับ SRTM DEM (90m)

SRTM DEM

  • SRTM (Shuttle Radar Topography Mission) DEM ของ NASA จัดทำโดย NASA เปิดให้บริการฟรีตั้งแต่ปี 2003 ครอบคลุมพื้นที่ประมาณ 80% ของพื้นที่โลก ขนาด pixel ของ DEM คือ 3 ฟิลิปดา(1 ฟิลิปดา ประมาณ 30 เมตร) หรือขนาดประมาณ 90 เมตร ข้อบกพร่อง ในเบื้องต้นของ SRTM DEM จะมี void หรือรูที่ไม่มีข้อมูลอยู่มากพอสมควร แต่ในรุ่นที่ 4 ปรากฎว่าได้แก้ไขข้อบกพร่องนี้ไปพอสมควร DEM ของ SRTM ผมได้นำไปใช้งาน ช่วยได้มากทีเดียว

ASTER GDEM

  • เป็นโครงการร่วมมือระหว่าง NASA และ METI (The Ministry of Economy, Trade, and Industry ของ ญี่ปุ่น) ตอนนี้ยังเป็น version 1 คาดว่าจะปรับปรุงข้อมูลไปอีกพอสมควร เนื่องจากมีข้อบกพร่องอยู่บ้าง ด้วยความที่ DEM มีขนาด pixel ที่ 1 ฟิลิปดา (ประมาณ 30 เมตร) ทำให้คนคาดหวังว่าจะได้ใช้ DEM ที่มีความละเอียดมากกว่า SRTM DEM แต่หลายๆคน ค่อนข้างผิดหวัง แต่อย่างไรก็ตามของใหม่ก็ต้องดีกว่าของเก่าอย่างแน่นอน เพียงแต่ความคาดหวังมันมากไปหน่อยแค่นั้นเอง
  • กระบวนการจัดทำ DEM เริ่มจากญี่ปุ่นสร้างดาวเทียม Advanced Spaceborne Thermal Emission and Reflection Radiometer (ASTER) และปล่อยสู่วงโคจรโดยกระสวยอวกาศของ NASA ในปี 1999
  • หลักของการทำ DEM คล้ายๆกับงาน Photogrammetry  คือถ่ายภาพเป็นภาพ stereo-pair คือในวงโคจรเดียวกัน จะถ่ายภาพในมุมจุดต่ำสุด(nadir) และถ่ายอีกครั้งเมื่อวงโคจรเลื่อนไปด้านหน้าและมุมถ่ายชี้กลับมาด้านหลัง (backward angle) ทำให้ได้ภาพคู่สามารถนำมาฟอร์มเป็นภาพ 3D และนำมาวัดความสูงได้ด้วยวิธี Automated processing ด้วยโปรแกรม Erdas Imagine software (Othobase Pro)
ASTER Satelite
  • หลักการจัดสร้าง DEM ดูได้จากไดอะแกรมด้านล่าง
ไดอะแกรมการจัดสร้าง DEM
  • ภาพถ่ายดาวเทียม 1 scene กินพื้นที่ประมาณ  60 กม. x 60 กม. การจัดทำ DEM ต้องโคจรประมาณ 4200 แนวเพื่อให้ภาพมี overlap ที่เพียงพอ และแต่ละแนวถ่ายภาพประมาณ 4100 ภาพ สรุปแล้วในการจัดทำ DEM ทั้งโลกนี้ ต้องใช้ภาพประมาณ 4100 x 4200 แต่ที่เป็นภาพคู่นำมาคำนวณความสูงมีประมาณ 1.5 ล้านภาพ ข้อมูลของ GDEM ครอบคลุมตั้งแต่แลตติจูด 83S จนถึง 83N การจัดสร้าง DEM จะแบ่ง GDEM ออกเป็น tile (เหมือนกระเบื้องปูพื้น) 1 tile กินพื้นที่ 1 องศา X 1 องศา (ประมาณ 108 กม. X 108 กม.) แล้วเปิดบริการให้ดาวน์โหลดไปใช้งานโดยไม่ต้องเสียค่าใช้จ่าย เปิดให้ดาวน์โหลดไปใช้งานได้ประมาณ ครึ่งปีแล้วครับ (ตั้งแต่กลางปี 2009)

ตารางเปรียบเทียบระหว่าง ASTER DEM และ SRTM DEM

ASTER GDEM SRTM3*
Data source ASTER Space shuttle radar
Generation and distribution METI/NASA NASA/USGS
Release year 2009 ~ 2003 ~
Data acquisition period 2000 ~ ongoing 10  days (in 2000)
Posting interval 30m 90m
DEM accuracy (stdev.) 7~14m 10m
DEM coverage 83 degrees north ~ 83 degrees south 60 degrees north ~ 56 degrees south
Area of missing data Areas with no ASTER data due to constant cloud cover (supplied by other DEM) Topographically steep area (due to radar characteristics)
  • จากตารางด้านบนนำมาจาก website ของ ASTER GDEM ดูเหมือนว่า ASTER GDEM จะดีกว่า SRTM DEM ทุกๆด้าน

การ Download GDEM

ลงทะเบียนเพื่อดาวน์โหลด GDEM

วิธีการดาวน์โหลด GDEM

  • การเลือกดาวน์โหลดมีวิธีอยู่ 4 วิธีคือ เลือกโดยตรง(ด้วยการคลิกเลือก tile), เลือกจากการวาด polygon, เลือกจากกำหนด shape file และเลือกจากการกำหนดค่าพิกัด สำหรับผมเองเลือกจากการคลิกที่ tile สะดวกที่สุด
เลือกวิธีการดาวน์โหลด GDEM
  • เมื่อขยายรูปได้ตามที่ต้องการแล้ว คลิกที่ปุ่มกริด (Grid #) เพื่อแสดงเส้นกริดจะได้แบ่งรูป tile ได้ชัดเจน ดูรูปด้านล่าง
คลิกที่ tile เพื่อเลือก GDEM ที่จะดาวน์โหลด
  • การจะเลือกพื้นที่ที่ต้องการ แรกให้ขยายรูปก่อนด้วยการเลื่อนสกรอลล์ของเมาส์ (ปุ่มกลาง) เพื่อขยายรูป แล้วคลิกที่ tile ได้ขอบเขตตามที่ต้องการก็คลิกที่ปุ่ม Next ไปต่อได้เลย หน้าต่อไปจะเป็น list ของชื่อไฟล์ของ DEM ถ้าไม่มีอะไรก็คลิก Next ไปต่อได้เลย
แสดง list ของไฟล์ GDEM ที่ต้องเลือกเพื่อจะดาวน์โหลด
  • หน้าต่อไปผมเข้าใจว่าทาง website คงต้องการเก็บสถิติ ว่าผู้ใช้ดาวน์โหลดไปใช้ในกิจการด้านไหน พยายามเลือกให้ใกล้เคียงครับ
เลือกตอบว่านำ GDEM ไปใช้ในด้านใด
  • สุดท้ายมาถึงหน้าที่ต้องการจริงๆคือหน้าดาวน์โหลด จะเห็นชื่อไฟล์ของ GDEM ลิสต์เรียงกันอยู่ด้านซ้าย (เลข 1) และปุ่มดาวน์โหลดแต่ละไฟล์ด้านขวา (เลข 2) แต่ถ้าต้องการดาวน์โหลดทั้งหมดให้คลิกที่เลข 3 ถ้าค้นหาใน google จะพบว่าการดาวน์โหลด GDEM จะช้า แต่ที่ผมลองมาก็ OK เร็วพอใช้ได้ (ช่วงที่ผมใช้  server อาจจะ่ว่างพอดี)
ดาวน์โหลดไฟล์ GDEM

รูปแบบไฟล์ของ GDEM

  • ไฟล์ของ GDEM เมื่อดาวน์โหลดจะได้ไฟล์ zip เช่นที่ latitude 13N และ longitude 97E จะได้ไฟล์ชื่อ ASTGTM_N13E097.zip ชื่อไฟล์ค่อนข้างง่ายบอกพิกัดของ DEM มาให้เสร็จสรรพ เมื่อ unzip จะได้ 2 ไฟล์ที่เป็น GeoTiff (signed 16 bit ระบบค่าพิกัดเป็น geographic บน WGS84) คือ ASTGTM_N13E097_dem.tif และ ASTGTM_N13E097_num.tif ไฟล์หลังเรียกว่า QA Plane file ซึ่งผมยังไม่เข้าใจนักว่าใช้ทำอะไร

เปรียบเทียบ ASTER GDEM แและ SRTM DEM

  • ผมจะเปรียบเทียบพื้นที่ตัวอย่างคือดาวน์โหลดไฟล์ ASTGTM_N13E098_dem.tif ของ ASTER GDEM ในพื้นที่เดียวกันผมดาวน์โหลดไฟล์ SRTM_56_10.tif ของ SRTM DEM (การดาวน์โหลด SRTM DEM เคยกล่าวไปตอนก่อนแล้ว) ผมเปิดไฟล์ของ DEM ด้วย MicroDEM
  • จากรูปด้านบนเป็นการแสดงผลของ SRTM DEM จากโปรแกรม MicroDEM บริเวณปากแม่น้ำทวาย พม่า จะเห็นว่า SRTM จัดเป็นข้อมูล void คือเป็นแม่น้ำและทะเล ซึ่งก็ถือว่าถูกต้อง (แต่การแสดงข้อมูลเป็น void เช่นบนภูเขาจะไม่ถูกต้อง)

  • รูปด้านบนเป็น ASTER GDEM ที่บริเวณเดียวกัน ดูความสูงของภูเขาตรงแหลมทวายก็ดูคมชัดเพราะละเอียดกว่าและก็ OK ดี แต่ที่ผิดร้ายแรงคือตรงแม่น้ำทวายที่ผมวงให้ ร่องน้ำหรือแม่น้ำที่สามารถใช้เดินเรือประมงเข้าไปในเมืองทวายได้ จุดนี้กลับมีความสูงหรือประมาณว่าเป็นเนินเขามางอกอยู่กลางแม่น้ำวัดได้สูงประมาณ 80 เมตรซึ่งไม่ถูกต้องอย่างแน่นอน แต่อย่างที่ผมกล่าวไปแล้ว DEM ชุดนี้ยังเพิ่งให้บริการเท่านั้นยังมีเวลาแก้ไขและปรับปรุงให้ถูกต้องได้อีกมาก

การเปรียบเทียบ ASTER GDEM และ STRM DEM ในทัศนะอื่นๆ

  • ผมไม่ใช่นักวิชาการจึงเปรียบเทียบด้วยการดูด้วยสายตาเปล่า ลองไปดูทัศนะคนอื่นๆที่น่าสนใจได้แก่ http://www.gisdevelopment.net/technology/tm/tm001a.htm และอีกท่านหนึ่ง Arrowsmith blog