如何在国家边界内乘以栅格的像元值

Posted

技术标签:

【中文标题】如何在国家边界内乘以栅格的像元值【英文标题】:How to multiply cell values of rasters within a country border 【发布时间】:2021-12-14 11:11:30 【问题描述】:

我在 R 中有两个栅格对象,它们有 216 个网格或具有相同经度和纬度坐标的单元格,一个是每个网格的每日最大风速值,另一个是代表单个网格中人口数量的数字。第一个栅格有 183 层,由以下信息表示。

> CMAWRF[[1]]
class       : SpatRaster 
dimensions  : 12, 18, 183  (nrow, ncol, nlyr)
resolution  : 0.25, 0.25  (x, y)
extent      : 3.125, 7.625, 50.625, 53.625  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 
source      : IPSL-IPSL-CM5A-MR_r1i1p1_IPSL-WRF381P1980.nc 
varname     : sfcWindAdjust (Bias-Adjust Near-Surface Wind Speed) 
names       : sfcWi~ust_1, sfcWi~ust_2, sfcWi~ust_3, sfcWi~ust_4, sfcWi~ust_5, sfcWi~ust_6, ... 
unit        :       m s-1,       m s-1,       m s-1,       m s-1,       m s-1,       m s-1, ... 
time        : 1980-01-01 10:30:00 to 1980-12-31 10:30:00 

第二个栅格只有 1 层,范围相同。可能会注意到,纬度坐标是从 3.125 到 7.625,经度坐标是从 50.625 到 53.625。这些坐标封装了荷兰。

所以我的目标是将人口栅格中的每个 I,Jth(I 代表行,J 代表列)单元格值与每个图层的风速栅格中的每个 I,Jth 个单元格值相乘。但是,我只想对荷兰国家边界内的像元值执行此操作,而不是空间栅格覆盖的整个区域。

有人知道如何在 R 中做到这一点吗?

【问题讨论】:

【参考方案1】:

示例数据

library(terra)
nld <- geodata::gadm("NLD", level=0, path=".")
pop <- rast(ext(nld) + 2, res=.1)    
values(pop) <- 1:ncell(pop) / 100
wth <- rast(pop, nlyr=2)
values(wth) <- runif(size(wth))    

解决方案

r <- mask(pop, nld, updatevalue=1)
x <- wth * r
plot(x, fun=\()lines(nld))

【讨论】:

非常感谢!你能告诉我为什么使用 updatevalue=1 有效吗?据我了解,您应该有 updatevalue=0 将荷兰以外的数字乘以 1(不变)。如果您要添加值,0 将是合适的。

以上是关于如何在国家边界内乘以栅格的像元值的主要内容,如果未能解决你的问题,请参考以下文章

R栅格:以像元值为条件的范围

在arcgis中如何提取出栅格中每个像元点的经纬度及他的value值

arcgis叠加的优先级

ArcGIS教程:分水岭

GlobalMapper精品教程029:栅格重分类案例详解

ArcGIS风暴栅格数据的属性表问题