บทนำ
ในโปรเจกต์ก่อสร้างทางวิ่งและทางขับใหม่ของสนามบินอู่ตะเภา ทีมสำรวจบินสแกน LiDAR ทุกสัปดาห์ ข้อมูลแต่ละครั้งมีขนาด 100-800 ล้านจุด ไฟล์ขนาด 4-34 GB ด้วยข้อมูลที่ใหญ่มหาศาล คำถามคือ — จะให้ทีมงานและผู้ที่เกี่ยวข้องดูข้อมูลเหล่านี้ได้อย่างไร?
ซอฟต์แวร์เฉพาะทาง เช่น Terrasolid, QuickTerrian Modeler, CloudCompare หรือ Civil 3D ใช้งานได้ดี แต่:
- ต้องติดตั้งบนเครื่องแต่ละคน บางโปรแกรมเช่น Terrasolid ราคาแรงอยู่
- ต้องมีคอมพิวเตอร์ที่แรงพอ
- ต้องเรียนรู้การใช้งาน
- ต้องคัดลอกข้อมูลหลาย GB ให้แต่ละคน
ไม่เหมาะกับการแชร์ให้คนหลายคนดูพร้อมกัน
วิธีแก้ไข: เปิดดูผ่านเว็บเบราว์เซอร์
โดยการสร้างระบบที่ทำให้ทุกคนในทีมสามารถ:
- เปิดดู Point Cloud ผ่าน Chrome/Edge — ไม่ต้องติดตั้งอะไร แค่คลิกลิงก์
- หมุน ซูม วัดระยะ ได้เหมือนใช้ซอฟต์แวร์จริง
- เห็นภาพดาวเทียม เป็นพื้นหลัง ช่วยให้รู้ตำแหน่ง
- เห็นภูมิประเทศ 3 มิติ ไม่ใช่พื้นราบ
- ซ้อนภาพถ่ายทางอากาศ (Orthomosaic) ความละเอียด 3.5-10 cm/pixel
- ซ้อนแบบก่อสร้าง จากไฟล์ DXF ทับซ้อนอีกชั้น
- เปิด/ปิดแต่ละชั้นข้อมูลได้ อิสระ
ทั้งหมดนี้เปิดจากเว็บเบราว์เซอร์ธรรมดา ไม่ต้องมี GPU แรงๆ แค่มีอินเทอร์เน็ต (หรืออยู่ใน VPN เดียวกัน)


หน้าตาของระบบ
หน้าแรก — แกลเลอรี่ข้อมูล
หน้าแรกแสดงข้อมูล LiDAR ทุกชุดเป็นการ์ด เรียงตามวันที่ มีเมนูสำหรับเรียงลำดับ (ใหม่สุด/เก่าสุด/ตามชื่อ) แต่ละการ์ดแสดง:
- ชื่อชุดข้อมูล
- วันที่สำรวจ
- จำนวนจุด (เช่น 604 ล้านจุด)
- ขนาดไฟล์
แค่คลิกก็เปิด 3D viewer ได้ทันที
Viewer — ดู Point Cloud แบบ 3 มิติ
เปิดมาจะเห็น Point Cloud ลอยอยู่เหนือภาพดาวเทียม มีภูมิประเทศ 3 มิติ (เนินเขา ชายฝั่ง) แสดงอยู่ด้วย ด้านขวามีแผงควบคุมชั้นข้อมูล:
ชั้นข้อมูลที่เปิด/ปิดได้:
- ภาพดาวเทียม (Esri Imagery) — ภาพพื้นหลังจาก Esri ฟรี
- ภาพถ่ายทางอากาศ (Orthomosaic) — ภาพจากโดรน ความละเอียดสูง
- แบบก่อสร้าง (Design Layout) — เส้นแบบ Highway, Drainage, Service Road ฯลฯ
- Point Cloud — ข้อมูล LiDAR
- โหมดการนำทาง — Earth Control (หมุนโลก) หรือ Orbit Control (หมุนรอบจุด)
ตอนแรก Potree เปิดนำทางแบบ Orbit Control ไว้เป็นดีฟอลต์ มันเป็นรูปแบบเก่าที่เหมาะสำหรับพื้นที่เล็กๆ แต่สำหรับพื้นที่ใหญ่ๆ การหมุนรูปจุดโดยเฉพาะตรงกลางพื้นที่กลับทำผมหัวหมุน ผมใช้เวลาอีกพักหนึ่งถึงได้เห็นโหมดนำทางแบบ Earth Control หรือแปลง่ายๆคือการนำทางแบบกูเกิ้ลเอิร์ธนั่นเอง เพียงแต่ชื่อทำให้สับสน เพราะคำว่าเอิร์ธผมนึกไปถึงลูกโลกไปนู่น
ผู้ใช้สามารถปิด Point Cloud เพื่อดูแค่ Orthomosaic กับแบบก่อสร้าง หรือปิดแบบก่อสร้างเพื่อดูแค่ Point Cloud ก็ได้
ปุ่ม Copy XYZ URL
สำหรับทีม GIS ที่ใช้ QGIS มีปุ่ม “Copy XYZ URL” ที่คัดลอก URL ของ Orthomosaic tiles ไปวางใน QGIS ได้ทันที — ทำให้เปิดดูภาพถ่ายทางอากาศใน QGIS ได้โดยไม่ต้องคัดลอกไฟล์ GeoTIFF หลาย GB แต่ต้องอยู่ในวงแลนเดียวกัน
เบื้องหลังทางเทคนิค
เครื่องมือหลัก
ระบบนี้ประกอบด้วยเครื่องมือ Open Source สองตัวหลัก:
- Potree — แสดง Point Cloud บนเว็บ รองรับข้อมูลหลายพันล้านจุดได้อย่างลื่น เพราะใช้โครงสร้าง Octree (โหลดเฉพาะจุดที่มองเห็น)
- CesiumJS — แสดงลูกโลก 3 มิติ ภาพดาวเทียม และภูมิประเทศ เหมือน Google Earth แต่ปรับแต่งได้
เมื่อรวมสองตัวเข้าด้วยกัน ได้ Point Cloud ที่ลอยอยู่บนลูกโลกจริงๆ มีภาพดาวเทียม มีเนินเขา มีชายฝั่ง ความจริงผมเคยใช้ Potree ในสมัยที่ยังทดลองใช้ WebODM อยู่เมื่อสิบกว่าปีที่แล้ว จำได้ว่าไม่ได้ประทับใจอะไรเพราะช้า สิบกว่าปีภายหลังได้กลับมาลองใช้งานดูกลับตะลึงในความเร็ว ทั้งยังมีการปรับปรุงเรื่องการใช้คอนโทรลเลอร์เช่นการเมาส์ ซูม วิ่งเข้า วิ่งออก ได้อย่างรวดเร็ว สามารถปรับได้ รูปแบบที่ผมชอบและคุ้นเคยคือรูปแบบกูเกิ้ลเอิร์ทนั่นเอง ตอนนี้มันเหมาะที่จะเป็น Point Cloud Viewer อย่างที่สุด
ทำไมไม่ใช้ Cloud Service?
บริการอย่าง Cesium ion หรือ Potree.cloud ใช้งานง่ายกว่า แต่:
- ค่าใช้จ่ายรายเดือน — ข้อมูลขนาดหลายร้อย GB ค่าใช้จ่ายไม่น้อย
- ความเร็ว — อัพโหลดข้อมูลไปต่างประเทศทุกสัปดาห์ไม่สะดวก
- ความปลอดภัย — ข้อมูลโครงการก่อสร้างสนามบินมีความอ่อนไหว
ผมจึงเลือก Self-hosted — ทุกอย่างอยู่บนเครื่อง Desktop ในออฟฟิศ เข้าถึงผ่าน VPN (Tailscale) จากไหนก็ได้
การจัดเก็บข้อมูล
- เครื่อง Desktop ในออฟฟิศเป็นเว็บเซิร์ฟเวอร์ ตัวโปรแกรม Potree จะอยู่ที่เครื่องนี้
- NAS เก็บข้อมูลจริง (Point Cloud + Orthomosaic tiles) รวม ~200 GB
- เชื่อมต่อผ่าน Symbolic Link ทำให้เว็บเซิร์ฟเวอร์เห็นข้อมูลบน NAS เสมือนอยู่ในเครื่อง
- เข้าถึงจากภายนอกผ่าน Tailscale VPN — ปลอดภัย ไม่ต้องเปิด port
Orthomosaic — ภาพถ่ายทางอากาศความละเอียดสูง
ภาพ Orthomosaic จากโดรน (CHCNav AA9 หรือ DJI M4E) มีความละเอียด 3.5-10 cm/pixel ไฟล์ต้นฉบับขนาด 2-32 GB
ผมแปลงภาพเหล่านี้เป็น Web Map Tiles (เหมือนที่ Google Maps ใช้) ด้วยเครื่องมือฟรีชื่อ GDAL คำสั่งเดียว:
gdal2tiles -p mercator -z 0-22 -r near --xyz orthomosaic.tif tiles_folder
ได้ไฟล์ PNG เล็กๆ หลายหมื่นไฟล์ จัดเรียงตามระดับ zoom เมื่อผู้ใช้ซูมเข้า-ออก เบราว์เซอร์โหลดแค่ไฟล์ที่ต้องแสดง ไม่ต้องโหลดทั้ง 32 GB
ข้อดีที่ได้เพิ่ม: ทีม GIS ที่ใช้ QGIS สามารถเพิ่ม XYZ Tiles connection ชี้มาที่เซิร์ฟเวอร์เดียวกัน ดูภาพ Orthomosaic ใน QGIS ได้ทันทีโดยไม่ต้องคัดลอกไฟล์
แบบก่อสร้าง — จาก DXF สู่เว็บ
ทีมออกแบบส่งแบบก่อสร้างมาเป็นไฟล์ DXF จาก AutoCAD ผมแปลงเป็น GeoJSON (รูปแบบข้อมูลภูมิศาสตร์มาตรฐาน) แล้วโหลดใน CesiumJS:
- Highway Plan (เหลือง) — ทางวิ่ง ทางขับ ไหล่ทาง
- Drainage Plan (น้ำเงิน) — ระบบระบายน้ำ
- Service Road Plan (ม่วง) — ถนนบริการ
- Access Road Plan (แดง) — ถนนเลียบสนามบินด้านชายทะเล
แต่ละชั้นเปิด/ปิดได้อิสระ ทำให้วิศวกรเปรียบเทียบแบบกับสภาพจริงได้ทันที
ภูมิประเทศ 3 มิติ — เรื่องที่ยากที่สุด
ภูมิประเทศ (Terrain) ทำให้ภาพดาวเทียมและ Orthomosaic ดูสมจริง — มีเนินเขา มีที่ราบ ไม่ใช่แผ่นแบนๆ
ปัญหา
ข้อมูล SRTM จาก NASA มีความละเอียดแค่ 30 เมตร ซึ่งทำให้พื้นทางวิ่ง (ที่ควรจะแบนราบ) ดูขรุขระ เมื่อซ้อน Orthomosaic ทับ ภาพจะบิดเบี้ยวตามความสูงที่ไม่แม่นยำ
วิธีแก้
รวมข้อมูลสองแหล่ง:
- SRTM 30 เมตร — ครอบคลุมพื้นที่กว้าง (เนินเขา ชายฝั่ง รอบๆ สนามบิน)
- LiDAR DEM 1.4 เมตร — เฉพาะพื้นที่สนามบิน (แม่นยำ ทางวิ่งแบนเรียบ)
ใช้ GDAL รวมข้อมูลทั้งสอง โดย SRTM เป็นพื้นหลัง LiDAR เขียนทับในพื้นที่สนามบิน ได้ภูมิประเทศที่:
- นอกสนามบิน → เห็นเนินเขา ชายฝั่ง (จาก SRTM)
- ในสนามบิน → ทางวิ่งเรียบ สิ่งก่อสร้างชัดเจน (จาก LiDAR)
จากนั้นแปลงเป็น Cesium Terrain Tiles ด้วย ctb-tile (เครื่องมือ Open Source ที่รันผ่าน Docker)
บทเรียนที่ได้
กว่าจะได้ภูมิประเทศที่ใช้งานได้ ล้มเหลวหลายครั้ง:
- ใช้ Global Mapper export เป็น Mesh format — Cesium อ่านไม่ได้ จอดำทั้งหมด
- ลบข้อมูลเก่าระหว่างแก้ปัญหา — ไม่มี backup
- พบว่าไฟล์ terrain ถูก gzip compress — เว็บเซิร์ฟเวอร์เสิร์ฟไม่ถูกต้อง
สุดท้ายแก้ได้โดย:
- ใช้ ctb-tile (Open Source) แทน Global Mapper สำหรับสร้าง terrain tiles
- Decompress ไฟล์ .terrain ทุกครั้งหลังสร้าง
- ทดสอบกับ minimal viewer ก่อนใส่ใน viewer จริง
บทเรียนสำคัญ: สำรองข้อมูลก่อนทดลองเสมอ
ระบบอัตโนมัติ
เมื่อต้องเพิ่มข้อมูลทุกสัปดาห์ การทำด้วยมือทุกขั้นตอนเสียเวลา ผมจึงสร้างชุดสคริปต์:
- เพิ่ม Point Cloud — ป้อนชื่อไฟล์ LAS กดรัน สคริปต์ทำที่เหลือทั้งหมด (แปลง คัดลอก สร้าง viewer สร้างการ์ดในหน้าแรก)
- เพิ่ม Orthomosaic — ป้อนชื่อไฟล์ GeoTIFF สคริปต์ตัด tiles คัดลอกไป NAS แก้ไข viewer
- เพิ่มแบบก่อสร้าง — ป้อนไฟล์ DXF สคริปต์แปลงเป็น GeoJSON ลงทะเบียนใน config
- อัพเดต viewer ทั้งหมด — สคริปต์อ่าน config แล้วอัพเดตทุก viewer พร้อมกัน
ทุกอย่างถูกควบคุมจากไฟล์ config.json ไฟล์เดียว ย้ายเครื่องแค่แก้ path ใน config
เวลาที่ใช้ต่อชุดข้อมูล:
| ขั้นตอน | เวลาโดยประมาณ |
|---|---|
| เพิ่ม Point Cloud | 10-30 นาที (ขึ้นกับขนาดไฟล์) |
| เพิ่ม Orthomosaic | 20-50 นาที |
| เพิ่มแบบก่อสร้าง (DXF) | 2-3 นาที |
| อัพเดต viewer ทั้งหมด | 10 วินาที |
เครื่องมือที่ใช้ — ทั้งหมดฟรี
| เครื่องมือ | หน้าที่ |
|---|---|
| Potree | แสดง Point Cloud บนเว็บ |
| CesiumJS | ลูกโลก 3D ภาพดาวเทียม ภูมิประเทศ |
| GDAL | ประมวลผลภาพและ DEM |
| ctb-tile | สร้าง Cesium Terrain Tiles |
| Node.js + http-server | เว็บเซิร์ฟเวอร์ |
| Tailscale | VPN สำหรับเข้าถึงจากภายนอก |
| QGIS | ตรวจสอบข้อมูล (ทางเลือกฟรีแทน Global Mapper) |
| Esri World Imagery | ภาพดาวเทียมพื้นหลัง (ฟรี) |
ไม่มีค่าลิขสิทธิ์ซอฟต์แวร์ ไม่มีค่าบริการ Cloud รายเดือน ข้อด้อยของภาพดาวเทียมจา Esri World Imagery นั้นเก่าหลายสิบปี ขนาดเห็นเครื่องบินจอดในพื้นที่ก่อสร้างสนามบิน ซึ่งที่จอดนี้ได้ย้ายไปนานแล้ว
ใครใช้ได้บ้าง?
ระบบแบบนี้เหมาะกับ:
- บริษัทก่อสร้าง ที่มีงานสำรวจ LiDAR ประจำ
- หน่วยงานราชการ ที่ต้องแชร์ข้อมูลสำรวจกับหลายฝ่าย
- บริษัทสำรวจ ที่ต้องส่งมอบข้อมูลให้ลูกค้าดูได้ง่าย
- มหาวิทยาลัย สำหรับการเรียนการสอนด้าน GIS และ Remote Sensing
สิ่งที่ต้องมี:
- เครื่อง Desktop 1 เครื่อง (เปิดทิ้งไว้เป็นเซิร์ฟเวอร์)
- พื้นที่เก็บข้อมูล (NAS หรือ hard disk ภายนอก)
- อินเทอร์เน็ต (สำหรับ Tailscale VPN)
- ความรู้พื้นฐาน command line (หรือใช้สคริปต์ที่เตรียมไว้)
สรุป
จากปัญหา “จะให้คนอื่นดู Point Cloud ได้อย่างไร” กลายเป็นแพลตฟอร์มที่:
- แชร์ข้อมูลได้ทันทีผ่านลิงก์
- ซ้อนภาพดาวเทียม ภาพถ่ายทางอากาศ และแบบก่อสร้างได้
- ภูมิประเทศ 3 มิติสมจริง
- อัพเดตข้อมูลใหม่ได้ทุกสัปดาห์ด้วยสคริปต์อัตโนมัติ
- ใช้เครื่องมือฟรีทั้งหมด
ใช้เวลาพัฒนาประมาณแค่หนึ่งเดือน มีทั้งสำเร็จและล้มเหลว แต่ผลลัพธ์คุ้มค่า — ตอนนี้ทุกคนในทีมดู Point Cloud ได้จากเว็บเบราว์เซอร์ ไม่ต้องติดตั้งอะไรเลย ท
เครดิต
โปรเจกต์นี้พัฒนาร่วมกับ Claude (AI จาก Anthropic) ซึ่งช่วยเขียนสคริปต์อัตโนมัติ แก้ปัญหาเทคนิค วิเคราะห์ปัญหา terrain และเขียนเอกสารประกอบ Claude เปรียบเสมือน “หุ่นกระบอก” ที่เป็นคู่คิดตลอดการพัฒนา บางครั้งทะเลาะกัน — ถึงแม้บางครั้งจะแนะนำผิดทาง แต่ก็ช่วยวิเคราะห์หาสาเหตุและแก้ไขจนสำเร็จ