2015-11-04 30 views
3

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

感谢

+1

以我的经验,你正在使用R和'rasterize()'函数来完成这个任务。从我的测试中,直接使用'gdal_rasterize'实用程序时,从矢量到栅格的转换更易于管理。我使用系统调用来调用它,例如'系统(paste0(“gdal_rasterize -burn 1 -l census_buffer”,census_buffer_path,“/tmp/census_mask.tif”))等等,这明显认为'gdal'实用程序在你的路径中。 –

+0

@ ForrestR.Stevens谢谢你。 – Tade

回答

3

正如福雷斯特说(和你经历过),rasterize是慢了一点,但你可以做的比你现在有什么要好得多。您根本不需要使用循环:

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

这将创建一个具有栅格属性表的单独栅格图层。要创建RasterStack,做到:

​​

如果你使用一个回路,使用rasterize只有一次,得到多边形ID,然后用subs感兴趣的实际变量。

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

+0

谢谢。速度显着提高(几小时到几分钟)。 – Tade

+0

一如既往的罗伯特,你提供了许多思想(以这样一种好的方式)。我没有想到你所描述的方法,实际上我认为这会提高我的一些使用情况下对'gdal_rasterize'发出多个调用的性能。谢谢! –

相关问题