从基于空间点范围的栅格中提取

extract from raster that is based on spatialpoints extent

假设我根据 SpatialPoints 对象的范围生成栅格。

    r<-setExtent(r,extent(pts))
    identical(extent(r),extent(pts))==TRUE

但现在如果我用 res 更改分辨率,为什么会这样:

    identical(extent(r),extent(pts))==FALSE

这只会在某些情况下发生(如果您不能将 x/y 范围除以新分辨率所暗示的 columns/rows 的数量。)某width/height的列数和行数。如果这些不完全符合范围,则需要调整范围。简单示例:

library(raster)
r <- raster(xmn=0, xmx=5, ymn=0, ymx=5, res=1)
r
#class       : RasterLayer 
# dimensions  : 5, 5, 25  (nrow, ncol, ncell)
# resolution  : 1, 1  (x, y)
# extent      : 0, 5, 0, 5  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 

因此,如果您将 'r' 的分辨率更改为 2.5 或 0.5,则范围保持不变:

res(r) <- 2.5
r
# class       : RasterLayer 
# dimensions  : 2, 2, 4  (nrow, ncol, ncell)
# resolution  : 2.5, 2.5  (x, y)
# extent      : 0, 5, 0, 5  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 

但是,如果您将其更改为 3,则范围需要更改,因为您无法将 3 的倍数 (rows/columns) 放入 0..5 的范围内。所以范围需要减小到 0..3 或扩展到 0..6(或 -1..5)。后者是较小的变化,所以就是这样。

r <- raster(xmn=0, xmx=5, ymn=0, ymx=5, res=1)
res(r) <- 3
r
class       : RasterLayer 
dimensions  : 2, 2, 4  (nrow, ncol, ncell)
resolution  : 3, 3  (x, y)
extent      : 0, 6, -1, 5  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84