假设我根据SpatialPoints对象的范围生成栅格。
r<-setExtent(r,extent(pts))
identical(extent(r),extent(pts))==TRUE
但是现在如果我用res
更改分辨率,为什么会这样:
identical(extent(r),extent(pts))==FALSE
答案 0 :(得分:3)
这种情况只会在某些情况下发生(如果你不能将没有余数的x / y范围除以新分辨率所暗示的列数/行数。)更改分辨率会导致新的列数和行数一定的宽度/高度。如果这些不完全符合范围,则需要调整范围。简单的例子:
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(行/列)的倍数放入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