r - 栅格范围和分辨率的修改会改变像素值的总和

标签 r resolution raster r-raster extent

我希望更改栅格的分辨率和范围。我尝试以不同的方式组合扩展、聚合、重新采样但没有成功……下面是我编写的代码以获得正确的分辨率和范围,但结果是,总像素值发生了变化(并且差异可能很大某些情况下...)。关于栅格范围和分辨率的在线帖子有很多,但我还没有设法解决我的问题。有没有一种方法可以改变分辨率和范围,同时最小化总像素值(cellStats(r,sum))的变化?非常感谢。

library(raster)

#sample rasters
r <- raster(extent(-180,179.9999, -55.91668 , 83.58326))
res(r)<-c(0.5/6, 0.5/6)
r <- setValues(r, runif(ncell(r)))
cellStats(r, sum) #3615229

temp_extent <- raster(extent(-180,180, -90 , 90))
res(temp_extent)<-c(0.5, 0.5)

# to get resolution (0.5, 0.5)
r1 <- aggregate(r, fact=6, fun=sum)
cellStats(r1, sum) #3615229
r1
# to get extent (-180,180,-90,90)
r2 <- resample(x= r1, y=temp_extent, method="bilinear") # what I am hoping is for NA to fill the added pixels
cellStats(r2, sum) #problem: gives different total value: 3615916
r2

最佳答案

在最后一段中使用最近邻重采样应该可以解决问题:

library(raster)
#> Loading required package: sp

#sample rasters
r <- raster(extent(-180,179.9999, -55.91668 , 83.58326))
res(r)<-c(0.5/6, 0.5/6)
set.seed(1234)
r <- setValues(r, runif(ncell(r)))
cellStats(r, sum)
#> [1] 3615109

temp_extent <- raster(extent(-180,180, -90 , 90))
res(temp_extent)<-c(0.5, 0.5)

# to get resolution (0.5, 0.5)
r1 <- aggregate(r, fact=6, fun=sum)
cellStats(r1, sum)
#> [1] 3615109

# to get extent (-180,180,-90,90)
r2 <- resample(x= r1, y=temp_extent, method="ngb") 
cellStats(r2, sum)
#> [1] 3615109

all.equal(cellStats(r, sum), cellStats(r2, sum))
#> [1] TRUE

创建于 2018-12-01 由 reprex package (v0.2.1)

关于r - 栅格范围和分辨率的修改会改变像素值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568753/

相关文章:

r - openxlsx:将相同的样式复制到添加到工作表的新列

android - 我无法更改 android 相机分辨率

height - 平均和/或最大视口(viewport)高度是多少?

ios - Iphone 5 - 6plus 图像尺寸/分辨率?

R - 不带框的绘图栅格

r - 生成具有特定开始和结束日期的时间序列

r - 在 lpSolveAPI R 中添加计数约束

r - 将浮雕(GEOtiff,.tif)添加到瑞士国家边界的 ggplot((多边形)shapefile,.shp)

r - 使用 dplyr 窗口函数计算百分位数

r - 控制光栅图例高度