繁体   English   中英

将大空间多边形数据帧转换为栅格堆栈时如何提高速度

[英]How to improve speed while converting Big spatial polygon data frame to raster stack

我正在研究空间多边形数据框 (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)
}

谢谢

正如 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

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

从 2020 年 3 月起,您现在可以考虑使用这个新包。

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

fasterize()

完全一样

rasterize()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM