我正在研究空间多边形数据帧(spdf)数据集。该数据集包含一系列月度气候数据。我试图实现的是将spdf转换为1000米分辨率的光栅堆栈,以进行进一步的统计分析。我写了一个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倍。我认为这可以帮助很多人。