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

4
我希望更改栅格图像的分辨率和范围。我尝试了不同的扩展、合并和重采样方法,但都没有成功...下面是我编写的代码,以获得正确的分辨率和范围,但结果是总像素值发生了变化(有时差别可能相当大...)。关于栅格范围和分辨率的文章在网上很多,但我还没有成功解决我的问题。是否有一种方法可以在最小化总像素值变化的情况下更改分辨率和范围(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

2
如果你进行重新采样,那么像素值必然会发生变化,对吗? - bdemarest
@bdemarest 谢谢,我已经编辑了我的问题。我想知道是否有一种方法可以在最小化cellStats(r, sum)中的更改的同时改变extent和resolution。 - Cecile
1个回答

3
在最后一段使用最近邻重采样应该可以解决问题:
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

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


谢谢@Ibusett。我原以为对于非分类变量不应该使用ngb...但实际上它确实有效!谢谢 - Cecile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接