ฉันพยายามฉายภาพแรสเตอร์ ใน R มีprojectRaster()
ฟังก์ชั่นสำหรับสิ่งนี้ (ด้านล่างเป็นตัวอย่างที่ทำซ้ำได้อย่างสมบูรณ์):
# example Raster
require(raster)
r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40)
r <- setValues(r, 1:ncell(r))
projection(r)
# project to
newproj <- "+init=epsg:4714"
# using raster package to reproject
pr1 <- projectRaster(r, crs = CRS(newproj), method = 'bilinear')
ซึ่งใช้งานได้ดี อย่างไรก็ตามมันค่อนข้างช้า
เพื่อเพิ่มความเร็วฉันแม้ว่าจะใช้gdalwarp
แทน (ด้วย SSD ค่าใช้จ่ายในการอ่านและเขียนจาก / ไปยังดิสก์ / R ไม่สูงมาก)
อย่างไรก็ตามฉันไม่สามารถทำซ้ำผลลัพธ์ของการprojectRaster()
ใช้gdalwarp
:
# using gdalwarp to reproject
tf <- tempfile(fileext = '.tif')
tf2 <- tempfile(fileext = '.tif')
writeRaster(r, tf)
system(command = paste(paste0("gdalwarp -t_srs \'", newproj, "\' -r bilinear -overwrite"),
tf,
tf2))
pr2 <- raster(tf2)
ดูเหมือนว่าจะใช้งานได้ แต่ผลลัพธ์จะแตกต่างกัน:
# Info
system(command = paste("gdalinfo",
tf))
system(command = paste("gdalinfo",
tf2))
# plots
plot(r)
plot(pr1)
plot(pr2)
#extents
extent(r)
extent(pr1)
extent(pr2)
# PROJ4
proj4string(r)
proj4string(pr1)
proj4string(pr2)
# extract value
take <- SpatialPoints(matrix(c(-100, 50), byrow = T, ncol = 2), proj4string = CRS(newproj))
plot(take, add = TRUE)
extract(pr1, take)
extract(pr2, take)
ฉันทำอะไรผิดพลาด / ทำผิด?
มีเรื่องอื่น ๆ (เร็วกว่า) ทางเลือกในการprojectRaster()
?
-order
แฟล็ก("คำสั่งของพหุนามใช้สำหรับแปรปรวน") gdalwarp
แม้จะไม่ใช้ GCPs ก็ให้ผลลัพธ์ที่แม่นยำยิ่งขึ้น