gdalwarp와 projectRaster의 차이점


9

래스터를 투영하려고합니다. 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

1
두 프로그램은 서로 다른 그리드를 만들어서 워프합니다. 쌍 선형 샘플링이 정확히 동일하더라도 보간되는 점은 다른 위치에 있으며 다른 답을 얻을 수 있습니다. 원점과 픽셀 크기가 다릅니다. gdalwarp (-te, -tr 등)에 일부 플래그를 설정하여 R 버전을 재생성 한 다음 픽셀 값을 비교하여 얼마나 다른지 확인할 수 있습니다.

GCP를 사용하지 않더라도 -order플래그 ( "워핑에 사용되는 다항식 순서")를 gdalwarp사용하면 더 정확한 결과를 얻을 수있는 경우가 여러 번 있었습니다.
christoph

답변:


10

좋고 재현 가능한 질문. 개인적으로, 나는 차이의 이유가 이중 선형 재 투영의 구현에 있기를 기대합니다. 분명히 두 가지 접근 방식에 대한 소스 코드를 살펴볼 수는 있지만 엄청난 과잉이 될 것으로 기대합니다.
R 구현은 원시 GDAL 버전보다 더 큰 "오류"/ "변경"을 초래하는 것으로 보입니다 (내 버전 및 테스트에서 가장 적습니다-projectRaster는 + -0.01 정도의 변경 사항을 소개하지만 GDAL은 + -0.002 정도의 값을 제공합니다).

가장 가까운 이웃 재 투영을 사용하여 두 접근 방식을 비교하면 예상대로 일치합니다.


프로젝션 방법 으로이 힌트를 주셔서 감사합니다! 시간을 찾으면 그에 대해 더 자세히 살펴볼 것입니다 (그러나 R보다 C에 더 익숙합니다).
EDi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.