3

我正在研究空间多边形数据框(spdf)数据集。该数据集包含一个时间序列的每月气候数据。我想要实现的是将 spdf 转换为分辨率为 1000m 的光栅堆栈,以进行进一步的统计分析。我编写了一个 R 代码,但速度非常慢,转换一列需要很长时间。如果你们中的任何人能提出建议以使其更快,我将不胜感激。

hru<-readOGR("E:\\Tade\\HRU\\ubn_merge.shp",layer="ubn_merge") # spatial polygon
spdf<-merge(hru,spdf.2000,by.x="HRU",by.y="HRU",all.x=T,sort=F) # spdf nrow=565 ncol=375
# convert sp to raster
hru.ras<-raster(hru,resolution=1000) # raster hru shape to 1km
for (i in 1:length(spdf){
  et.ras<-rasterize(spdf,hru.ras,field=paste("m",1,sep="")) # rasterize
  et.stack<-stack(et.stack,et.ras)
}

谢谢

4

2 回答 2

3

正如 Forrest 所说(你也经历过),rasterize它有点慢,但你可以做得比现在更好。您根本不需要使用循环:

r <- raster(spdf, resolution=1000)
et.ras <-rasterize(spdf, r, field=paste0("m",1:ncol(spdf)))

这将创建一个带有栅格属性表的 RasterLayer。要创建 RasterStack,请执行以下操作:

s <- deratify(et.ras)

如果您要使用循环,请rasterize仅使用一次,获取多边形 ID,然后subs用于感兴趣的实际变量。

当然,这可以为您免去外部依赖的痛苦。

于 2015-11-04T21:19:54.990 回答
2

自 2020 年 3 月起,您现在可以考虑使用此新套餐。

https://cran.r-project.org/web/packages/fasterize/vignettes/using-fasterize.html

fasterize()

完全一样

rasterize()

但要快 100-1000 倍。我认为这可以帮助很多人。

于 2020-04-06T21:23:19.930 回答