Tengo algunos datos en una pila raster (proyecciones climáticas CCSM4 de 2010 - 2300) que he procesado, pero ahora me gustaría cambiar la extensión. No estoy 100% seguro de cómo hacer esto en R. Hasta ahora he intentado Extent
, Origin
, projectExtent
, projectRaster
pero no he tenido suerte. A continuación hay dos imágenes que muestran el problema que estoy teniendo y los resultados de lo que he intentado, y un ejemplo reproducible
Aquí está mi conjunto de datos original, la extensión es
> extent(pr_ccsm4_2.5deg)
class : Extent
xmin : -0.625
xmax : 359.375
ymin : -89.5288
ymax : 90.4712
Lo que me gustaría hacer es que los datos tuvieran una extensión de
> extent(ras25)
class : Extent
xmin : -180
xmax : 180
ymin : -90
ymax : 90
Pensé que podría simplemente cambiar la extensión usando extent(pr_ccsm4_2.5deg) <- extent(ras25)
Sin embargo, mis datos tienen el siguiente aspecto
Así que ahora, aunque la extensión es correcta, los datos no se proyectan correctamente.
He aquí un ejemplo reproducible
library(rworldmap)
library(cleangeo)
library(raster)
library(rasterVis)
# continental shapefile
cont <- getMap()
cont <- clgeo_Clean(cont)
cont <- sapply(levels(cont$continent),
FUN = function(i){
poly <- gUnionCascaded(subset(cont, continent == i))
poly <- spChFIDs(poly, i)
SpatialPolygonsDataFrame(poly, data.frame(continent = i, row.names = i))
}, USE.NAMES = TRUE)
cont <- Reduce(spRbind, cont)
ras <- raster(xmn = 0, xmx = 360, ymn = -90, ymx = 90, res = 2.5)
values(ras) <- runif(n = ncell(ras), 0, 1)
ras
> ras
class : RasterLayer
dimensions : 72, 144, 10368 (nrow, ncol, ncell)
resolution : 2.5, 2.5 (x, y)
extent : 0, 360, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 2.22486e-05, 0.9998961 (min, max)
# Wrong extent
rasterVis::levelplot(ras, margin = NA, par.settings = RdBuTheme) + layer(sp.polygons(cont))
ras2 <- raster(xmn = -180, xmx = 180, ymn = -90, ymx = 90, res = 2.5)
values(ras2) <- runif(n = ncell(ras2), 0, 1)
ras2
> ras2
class : RasterLayer
dimensions : 72, 144, 10368 (nrow, ncol, ncell)
resolution : 2.5, 2.5 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 0.0001686567, 0.9998712 (min, max)
# Correct extent
rasterVis::levelplot(ras2, margin = NA, par.settings = RdBuTheme) + layer(sp.polygons(cont))
rasPrj <- projectRaster(ras, ras2, over = FALSE)
rasPrj
# Correct extent, but missing data
rasterVis::levelplot(rasPrj, margin = NA, par.settings = RdBuTheme) + layer(sp.polygons(cont))
1 votos
Pruebe
raster::rotate(pr_ccsm4_2.5deg)
que es precisamente para esta tarea. Tenga en cuenta que el después de cambiar el hemisferio es probablementeextent(-180, 180, -90, 90)
por lo que puedes establecerlo después, pero debes comprobarlo con cuidado - a menudo hay una ambigüedad sobre el borde de la celda frente al centro de la celda, pero no siempre es tan sencillo.0 votos
Muchas gracias @mdsumner, no tengo ni idea de cómo se me pasó cuando la lectura a través de la
raster
documentación.0 votos
¡rotar es un nombre poco obvio cuando se piensa en una imagen!