래스터를 투영하려고합니다. 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()
있습니까?
아무도? 완전히 재현 가능한 예제를 제공했습니다 (Linux 또는 Mac에서 작동해야 함).
—
EDi
두 방법 모두 동일한 재 투영 래스터, (-100, 50)에서 동일한 범위 및 동일한 값을 생성 할 것으로 예상합니다. 그러나, 그들은 분명히 :(
—
EDi
두 프로그램은 서로 다른 그리드를 만들어서 워프합니다. 쌍 선형 샘플링이 정확히 동일하더라도 보간되는 점은 다른 위치에 있으며 다른 답을 얻을 수 있습니다. 원점과 픽셀 크기가 다릅니다. gdalwarp (-te, -tr 등)에 일부 플래그를 설정하여 R 버전을 재생성 한 다음 픽셀 값을 비교하여 얼마나 다른지 확인할 수 있습니다.
GCP를 사용하지 않더라도
—
christoph
-order
플래그 ( "워핑에 사용되는 다항식 순서")를 gdalwarp
사용하면 더 정확한 결과를 얻을 수있는 경우가 여러 번 있었습니다.