【问题标题】:Raster algebra on multiple bands in R Growing degree days calculationR生长期天数计算中多个波段的栅格代数
【发布时间】:2018-09-20 08:03:31
【问题描述】:

因此,我正在根据北美的每日最低和最高温度构建一个 30 年平均生长期天数栅格。输入数据由 60 个栅格、30 个 tmax 和 30 个 tmin 组成。这些栅格中的每一个都包含 365 个波段(每天一个波段)。 GDD 的计算相当简单,它是((tmax-tmin))/2)-10。问题是我似乎无法找到将所有波段和栅格一起计算的方法。

我最初的计划是将所有 tmin 栅格和所有 tmax 栅格叠加在一起,然后将它们相减。但在这种情况下,只计算第一个波段(第 1 天)。有没有什么办法可以不用一一提取所有波段来进行操作。

library(raster)

tmax <- stack("C:/gddtmax")
tmin <- stack("C:/gddtmin")
average <- ((tmax-tmin)/2)-10

【问题讨论】:

  • 嗨@PhilippeTremblay,我正在尝试计算类似的东西。请问,这里是你的基础温度 10 吗? IE。那么你计算正温差的总和?如果是超过 100 天的正差总和,你能称之为温度总和(100 dd)吗?

标签: r stack raster modeling r-raster


【解决方案1】:

你的例子对我来说很好。

library(raster)
f <- system.file("external/rlogo.grd", package="raster")
tmax <- brick(f) / 10
tmin <- tmax - 10

tmaxtmin 各有三层

avg <- ((tmax-tmin)/2)-10

avg也有三层

avg
#class       : RasterBrick 
#dimensions  : 77, 101, 7777, 3  (nrow, ncol, ncell, nlayers)
#resolution  : 1, 1  (x, y)
#extent      : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#data source : in memory
#names       : red, green, blue 
#min values  :  -5,    -5,   -5 
#max values  :  -5,    -5,   -5 

编辑 看起来问题是由于内存管理错误(在版本 2.7-3 中修复)。这里有两个解决方法。

使用overlay(它还允许您指定输出文件名)

avg <- overlay(tmin, tmax, fun=function(x, y){ ((y-x)/2)-10 })

或使用rasterOptions

rasterOptions(todisk=TRUE)
avg <- ((tmax-tmin)/2)-10
rasterOptions(todisk=FALSE)

【讨论】:

  • 问题是构成 tmin 和 tmax 的栅格均由其他栅格组成,其中包含 365 层。所以 tmax 堆栈的结构是 20 个栅格,每个栅格内部有 365 层。基本上是一堆栈。
  • 我不明白为什么会有问题。请举个例子
  • 您在构建了一些测试栅格之后是对的,我意识到一切正常。问题实际上是数据集 120Gb 的大小,R 无法处理大于 1.4Gb 的过程向量。有没有办法一次只提取几个波段(天)然后计算结果?
  • 大小应该不是问题。如果是这样,你可能犯了一个错误。请显示发生这种情况的代码。在极少数情况下,您可能需要使用 rasterOptions() 更改内存设置
  • 加载栅格 tmax &lt;- stack("daymet_v3_tmax_1990_na.nc4") tmin &lt;- stack("Cdaymet_v3_tmin_1990_na.nc4") 已验证 #layers &gt; nlayers(tmax) [1] 365 &gt; nlayers(tmin) [1] 365 计算 GDD &gt; GDD &lt;- ((tmax+tmin)/2)-10 错误:无法分配大小为 4.7 Gb 的向量`
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 2013-12-18
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多