Próbuję wyświetlić raster. W R jest do tego projectRaster()
funkcja (poniżej w pełni odtwarzalnego przykładu):
# 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')
Które działa dobrze. Jest jednak dość wolny.
Aby zwiększyć prędkość, gdalwarp
zdecydowałem się zamiast tego użyć (z dyskiem SSD koszt odczytu i zapisu z / na dysk / R nie jest bardzo wysoki).
Nie mogę jednak odtworzyć wyników projectRaster()
użycia 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)
Wydaje się, że działa, ale wyniki są inne:
# 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)
Czego mi brakuje / robię źle?
Czy istnieją inne (szybsze) alternatywy projectRaster()
?
-order
flagi („kolejność wielomianu używanego do wypaczania”)gdalwarp
nawet bez użycia GCP dało bardziej dokładne wyniki.Odpowiedzi:
Ładne i powtarzalne pytanie. Osobiście oczekiwałbym, że przyczyną tej różnicy są implementacje dwuliniowej reprojektcji. Możesz oczywiście zajrzeć do kodu źródłowego dla tych dwóch podejść, ale spodziewałbym się, że będzie to ogromna przesada.
Wygląda na to, że implementacja R wprowadza większe „błędy” / „zmiany” niż surowa wersja GDAL (przynajmniej w moich wersjach i testach - projectRaster wprowadza zmiany około + -0,01, podczas gdy GDAL podaje wartości około + -0,002).
Jeśli porównasz oba podejścia przy użyciu reprojection najbliższego sąsiada, pasują one zgodnie z oczekiwaniami.
źródło