# ทดลอง GeoTIFF และพิกัดด้วย GDAL

ใช้สคริปต์ `gdal-raster-check.py` คู่กับ Python ที่มี GDAL bindings และ NumPy แล้ว รัน `python gdal-raster-check.py` สคริปต์สร้างไฟล์ชั่วคราว อ่านกลับ ทดสอบ และลบเฉพาะไฟล์ชั่วคราวของตัวเองเมื่อจบ ไม่ต้องใช้ภาพโดรนหรือเครือข่าย

ผลที่ตรวจจริงเมื่อ 28 กันยายน 2569: GDAL 3.8.4 ใน Linux container บน Docker Desktop/Windows ผ่าน 11 ข้อ ดู `gdal-raster-result-2026-09-28.json` ยังไม่ได้ตรวจ GDAL แบบ native Windows หรือ QGIS GUI

## เรียนรู้อะไร

1. GeoTIFF ต้องเก็บทั้งค่าพิกเซล ระบบพิกัด และตำแหน่งกริด สคริปต์เขียนกริด 10×10 ช่อง ช่องละ 2×2 เมตรใน EPSG:32647 แล้วเปิดอ่านกลับ
2. ตั้งมุมหนึ่งเป็น NoData = -9999 หมายถึงไม่มีข้อมูล ห้ามนำไปตีความเป็นความสูงติดลบจริง ช่องที่มีข้อมูลจึงเหลือ 99 ช่อง
3. พื้นที่กริดที่มีข้อมูล = จำนวนช่องที่ใช้ได้ × |ขนาดช่องแกน x × ขนาดช่องแกน y| = 99 × |2 × (-2)| = **396 ตารางเมตร** สูตรนี้ใช้กับกริด north-up ที่ไม่หมุนในระบบพิกัดหน่วยเมตร เป็นพื้นที่ฉายบนแผนที่ ไม่ใช่พื้นที่ผิวภูมิประเทศหรือค่ารังวัดที่ตรวจแล้ว
4. แปลงไฟล์ไป EPSG:4326 ด้วย nearest neighbour แล้วตรวจ CRS และค่าคงที่ที่ยังมีข้อมูล ผลพิกัดเป็นองศา ห้ามใช้ขนาดช่องหน่วยองศาแทนเมตรในสูตรพื้นที่เดิม
5. GDAL 3 เคารพลำดับแกนของ CRS; ตัวอย่างกำหนด traditional GIS order เพื่อให้จุดที่คืนมาอ่านเป็น longitude, latitude อย่างชัดเจน

## ลองเปลี่ยนและอธิบาย

- เปลี่ยนช่อง NoData แล้วคำนวณจำนวนช่องและพื้นที่ที่คาดไว้ก่อนแก้ expected result
- เปลี่ยนค่ากริดบางช่องและเปรียบเทียบ nearest กับ bilinear การเฉลี่ยไม่เหมาะกับข้อมูลรหัสหมวดหมู่ และแต่ละวิธีมีผลต่อค่าความสูงต่างกัน
- สำหรับกริดที่หมุน ต้องใช้ determinant ของ geotransform แทนการคูณขนาดสองแกนแบบตัวอย่างนี้

พิกัดและระดับในไฟล์เป็นข้อมูลสังเคราะห์ ไม่ใช่การสำรวจสถานที่จริง การผ่าน 11 ข้อไม่พิสูจน์ความถูกต้องของ orthophoto หรือ DEM จากการบิน ต้องตรวจด้วย checkpoint อิสระและ CRS/vertical datum ที่ตรงกับงานจริง

## อ้างอิงทางการ

- https://gdal.org/en/stable/api/python/python_examples.html
- https://gdal.org/en/stable/programs/gdalwarp.html
- https://gdal.org/en/stable/tutorials/geotransforms_tut.html
- https://gdal.org/en/stable/tutorials/osr_api_tut.html
