将 R 中具有不同像元大小的两个栅格相乘

问题描述 投票:0回答:1

我想将 Landsat 30m 分辨率图像与约 25km 分辨率的 ERA5 栅格相乘。我可以将 ERA5 缩小到 30m,但这会增加处理量。我只是想知道是否有可能无论哪个 30m 单元与 25km 单元重叠,这些 30m 单元都会乘以 25km 单元的单个值。

library(terra)
### 1st raster
ETrF <- rast(ncols=4, nrows=4, xmin=73, xmax=75, ymin=31, ymax=33)
### 2nd raster
ET0 <- rast(ncols=2, nrows=2, xmin=73, xmax=75, ymin=31, ymax=33)
### Random values assigned to both rasters
values(ETrF) <- c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8)
values(ET0) <- c(5,1,2,4)

### Now 1st cell of ET0 (value: 5) will overlap with 1st,2nd,5th and 6th cells (values: 0.1,0.2,0.5,0.6) 
### of ETrF.Is it possible that 5 gets multiplied with 0.1,0.2,0.5 and 0.6 and final output 
### keeps ETrFs resolution.

ETa <- ETrF*ET0.....?
r gis raster terra
1个回答
0
投票

我相信

resample
是正确的方法,也许使用
threads
参数可以提高效率。

另一种解决方案是使用

ET0
的质心从
ETrF
提取值,但很难知道它会提高效率多少。我必须用更大的数据集对其进行基准测试。

这是使用示例数据的一种可能方法。

library(terra)
library(sf)
library(dplyr)

ETrF_c <- st_as_sf(as.points(ETrF, values = TRUE)) # ETrF centroids

ETrF_new <- st_as_sf(extract(ET0, ETrF_c, bind = TRUE)) %>% 
  mutate(value = lyr.1*lyr.1.1) %>% 
  rasterize(., ETrF, field = 'value')

plot(ETrF_new)

© www.soinside.com 2019 - 2024. All rights reserved.