当前位置: 首页 > 知识库问答 >
问题:

在R中构建多层光栅上的温度分布的任何解决方法

高展
2023-03-14

在这里,我发现了一个非常有趣的博客:温度效应和经验方法中的临界阈值非常有趣,所以我想在R中实现它的想法。然而,我在大型RasterBrick对象中有德国历史日温度(15年历史日平均温度)的多层光栅数据。根据《启发帖》中讨论的经验方法,我需要从多层光栅数据构建温度分布。

更新2:可复制形状文件:

我知道从第三方网站下载shapefile是不现实的,所以在这里我提出了可复制的shapefile来尝试一下:

library(sf)
library(maps)
library(rgeos)
library(mapdata)

germany <- st_as_sf(map("Germany", plot = FALSE, fill = TRUE))
write_sf(germany, "germany.shp")

为了方便地继续我的帖子,我创建了可复制的光栅数据,以便在R中使用。我还提供了来自欧盟统计局网站的德国形状文件;这是正在运行的shapefile(我可以保证链接非常安全,文件非常小):欧盟统计局的shapefile,这是方便的可复制光栅数据:

可重复数据

library(raster)
library(lubridate)
library(tidyverse)

r <- raster(xmn=5.75, xmx= 15, ymn = 47.25, ymx =55,res=c(0.25,0.25))
Deu_crop <- do.call(stack,lapply(1:5479,function(i) setValues(r,round(runif(n = ncell(r),min = -10,max = 25)))))
names(Deu_crop) <- paste0('X',gsub('-','.',ymd('1980.01.01') + days(1:5479)))
shp <- shapefile('eurostat_NUTS3/deu_adm_2006.shp')
e <- raster::extract(Deu_crop,shp)
names(e) <- shp$NUTS_ID

因此,为了测试在inspired post中介绍的工作流,我需要设计几个全局变量,这些变量将用于这里介绍的助手函数。但我不知道如何设计一些用于完成其工作流程的关键全局变量;建议定义全局变量,如:w-天气数据<代码>tempDat:特定聚合天气数据<代码>Trows:span聚合网格数据;和T:integer temperature的向量(详情可在此处找到:details)。

我想从网格化的每日天气数据中估计温度随时间的分布。但是我很难测试这篇受启发的文章中提出的经验步骤,因为它没有提到处理多层栅格数据的解决方案,所以我不知道如何在R中独自采用它的奇思妙想。

以下是我在灵感贴子中使用辅助函数之前,从shapefile(欧盟统计局的“shapefile”)为每个多边形聚合多层光栅数据的方法:

最初尝试操作多层光栅:

rasterHelper <- function(ix,e){
  gather(data.frame(e[[ix]],stringsAsFactors = F),'colname','temp') %>% 
    group_by(colname) %>% summarise(temp = mean(temp)) %>% ungroup() %>% # spatial mean
    mutate(year = sub('X(\\d{4}).+','\\1',colname)) %>% 
    group_by(year) %>% summarise_all(funs(sum)) %>% mutate(NUTS_ID = names(e)[ix])
}
do.call(rbind,lapply(1:length(e),function(ix) rasterHelper(ix)))

但是我上面的尝试不起作用;在我的尝试中,我打算为每个多边形聚合温度光栅数据。灵感帖子的实现非常有用,但处理多层光栅数据仍然很难跟进。我假设我应该在每个光栅层上工作并随着时间的推移构建温度分布,但真的没有一个坚实的想法如何在R中做任何想法?

更新:

这是我从中得到启发的论文:非线性温度效应。。。,但对我来说,实现所提出的方法仍然是一个挑战,即使我遵循了各自博客中介绍的工作流程:搜索温度效应的临界阈值

有没有人告诉我如何在R中的多层光栅数据上采用它的经验方法?我如何估计温度随时间的分布?我如何在R中实现这一点?还有什么想法吗?谢谢

共有1个答案

闾丘文昌
2023-03-14

我不太清楚你想做什么。

设置一个较小的示例

library(raster)
lux <- shapefile(system.file("external/lux.shp", package="raster"))
r <- raster(lux)
s <- stack(lapply(1:12, function(i) setValues(r, 1:ncell(r))))

e <- extract(s, lux)

现在你说你想聚合——这有点模棱两可,但也许你想要的是

x <- lapply(e, function(i) apply(i,2,mean))

相当于

y <- extract(s, lux, fun='mean')
 类似资料:
  • 我正在尝试在R中设置一个randomForest,以便根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的光栅图像,我想训练许多其他光栅,以尝试基于初始光栅创建光栅输出。代码示例如下: <代码>rf1 ...其中,是我的光栅格式的实际已知值,而到是我想用来预测trainingRaster1是什么的其他光栅图像。我知道您将使用向量或点的训练类来训练一系列光栅,但在我的情况下,我希望使用光

  • 在R中,与包“光栅”中的“提取”相比,在包“空间生态”的函数“zonal.stats”中计算平均值存在偏差。对于两者,我都使用多边形作为区域字段,并使用光栅作为值。 这是一个例子: z2和z1偏差的原因是什么?

  • 本文向大家介绍R加载多层栅格,包括了R加载多层栅格的使用技巧和注意事项,需要的朋友参考一下

  • 下面的代码在我的图像上生成两个框。我正计划进一步分析这些框内的像素。 在下面的例子中,在红色方块的情况下,我不想继续下去,因为它的右上角有黑色像素。而我想继续在绿色方块的情况下,因为它没有一个黑色像素沿着它的边缘。

  • 我有一个带有空间坐标和一个变量的矩阵数据。空间分辨率为1000米。 我想将其转换为光栅格式。 我使用下面的代码来完成它。但我得到的决心与我得到的不一样。有没有更好的方法可以用我的真实数据获得相同的分辨率?

  • 我想将光栅数据聚合到自定义形状文件中的每个多边形。 在这种情况下,我想获得撒哈拉以南非洲次国家区域城市化的平均程度。 我的sf如下所示: 或绘制: 另一方面,光栅数据采用以下形式: 这些比整个星球所需的要细得多。为了加速计算,我首先聚合光栅,然后将其转换为shapefile,剩余的每个光栅像素都转换为shapefile中的点几何形状。然后,这个shapefile可以聚合到我的区域边界。诚然,这不是