[英]How do I extract raster values from polygon data then join into spatial data frame?
[英]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.