栅格范围和分辨率的修改会改变像素值的总和
Posted
技术标签:
【中文标题】栅格范围和分辨率的修改会改变像素值的总和【英文标题】:Modifications of raster extent and resolution change the total sum of pixel values 【发布时间】:2018-12-01 07:33:04 【问题描述】:我希望更改栅格的分辨率和范围。我尝试以不同的方式组合扩展、聚合、重新采样,但没有成功……下面是我编写的用于获得正确分辨率和范围的代码,但结果,总像素值发生了变化(并且差异可能很大一些案例...)。网上有很多关于栅格范围和分辨率的帖子,但我还没有设法解决我的问题。有没有办法可以改变分辨率和范围,同时最小化总像素值的变化(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
【问题讨论】:
如果你重新采样,你必然会改变像素值,对吧? @bdemarest 谢谢,我已经编辑了我的问题。我想知道是否有一种方法可以改变范围和分辨率,同时最小化 cellStats(r, sum) 的变化 【参考方案1】:在最后一段中使用最近邻重采样应该可以解决问题:
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 月 1 日创建
【讨论】:
谢谢@Ibusett。我认为我不应该将 ngb 用于非分类变量......但它确实有效!谢谢以上是关于栅格范围和分辨率的修改会改变像素值的总和的主要内容,如果未能解决你的问题,请参考以下文章