R-studio : ( EP#14 ) สร้าง DEM (ตอนที่ 3/3) ด้วย IDW, Polynomial, Kriging ด้วยโปรแกรม R
R-studio : ( EP#14 ) สร้าง DEM (ตอนที่ 3/3) ด้วย IDW, Polynomial, Kriging ด้วยโปรแกรม R
ใน EP#14 นี้ เราจะปิดท้ายการสร้าง Digital Elevation Model (DEM) ด้วยการจำลองพื้นผิวภูมิประเทศจาก จุดข้อมูลความสูง (Elevation Points) โดยใช้เทคนิคการ Interpolation ด้วย R ซึ่งได้แก่:
-
IDW (Inverse Distance Weighting)
-
Polynomial Regression (2nd / 3rd Degree)
-
Kriging (Geostatistical Interpolation)
นำข้อมูลจุด Excel จากตอน EP#12 มาจำลองเป็น Digital Elevation Model ด้วยคำสั่ง IDW, 2nd -Polynomial, 3rd – Polynomial, Kriging ด้วยโปรแกรม R
เตรียมข้อมูลจุดความสูง เพื่อนำมาจำลองเป็น Digital Elevation Model ด้วยโปรแกรม R
ลงทะเบียนขอรับไฟล์ code R markdown script สำหรับ DEM # 3/3 https://docs.google.com/forms/d/e/1FAIpQLSfGBzNO7rrB0wrFPkL1HA0MwtQ9dAJ2xd3pL2qEOYYzVdKFCA/viewform
🎯 เป้าหมายของ EP#14
- เรียนรู้หลักการ Interpolation เพื่องานภูมิประเทศ
- สร้างแบบจำลอง DEM ด้วย R จากจุดพิกัดที่มีค่า Z
- เปรียบเทียบผลลัพธ์จากหลายเทคนิค
- เตรียมส่งออกข้อมูลเป็น raster หรือ GeoTIFF
🧰 ติดตั้งแพ็กเกจ R ที่จำเป็น
rCopyEditinstall.packages(c("sp", "gstat", "automap", "raster", "sf", "fields", "ggplot2"))
📥 ดาวน์โหลดสคริปต์เรียนรู้
🔗 R Markdown Script:
แบบฟอร์มลงทะเบียนเพื่อขอรับไฟล์ EP#14
📌 ตัวอย่างโค้ดการสร้าง DEM ด้วย IDW
rCopyEditlibrary(gstat)
library(sp)
library(raster)
# นำเข้าข้อมูลจุด
elev <- read.csv("elevation_points.csv")
coordinates(elev) <- ~longitude + latitude
# กำหนดกริดพื้นที่ศึกษา
grd <- spsample(elev, type = "regular", n = 5000)
gridded(grd) <- TRUE
# Interpolation แบบ IDW
idw_result <- idw(elevation ~ 1, elev, newdata = grd, idp = 2.0)
# แสดงผล
spplot(idw_result, "var1.pred", main = "DEM by IDW")
📌 ตัวอย่างโค้ด Polynomial Regression (2nd Degree)
rCopyEditlibrary(fields)
fit2 <- Tps(cbind(elev$longitude, elev$latitude), elev$elevation, m = 2)
grid_points <- as.data.frame(coordinates(grd))
grid_points$z <- predict(fit2, grid_points)
image(matrix(grid_points$z, nrow = 100), main = "2nd Degree Polynomial DEM")
📌 ตัวอย่างโค้ด Kriging
rCopyEditlibrary(automap)
# สร้างโมเดลเซมิวาเรียนซ์อัตโนมัติ
krig_result <- autoKrige(elevation ~ 1, input_data = elev, new_data = grd)
# แสดงผล DEM
spplot(krig_result$krige_output["var1.pred"], main = "DEM by Kriging")
📊 เปรียบเทียบผลลัพธ์เบื้องต้น
เทคนิค | ข้อดี | ข้อจำกัด |
---|---|---|
IDW | คำนวณง่าย รวดเร็ว | อ่อนไหวต่อการกระจุกตัวของจุด |
Polynomial | สมูท เส้นโค้งสวย | ไม่เหมาะกับข้อมูลที่มีความซับซ้อนทางพื้นที่มาก |
Kriging | แม่นยำสูง วัดความไม่แน่นอนได้ | ต้องเข้าใจการวิเคราะห์เซมิวาเรียนซ์ |
🗂️ ส่งออกไฟล์ Raster
rCopyEditraster_out <- rasterFromXYZ(grid_points)
writeRaster(raster_out, "dem_output.tif", format = "GTiff", overwrite = TRUE)
🔜 ใช้งาน DEM ต่อยอดอะไรได้บ้าง?
- วิเคราะห์ความลาดชัน (slope), ทิศทางการไหล (aspect)
- สร้าง catchment area หรือ watershed
- วิเคราะห์ความเสี่ยงภัยดินถล่ม น้ำท่วม
- สร้าง Visualization แบบ 3D (ร่วมกับ
rgl
หรือterrain3D
)