Rasterize()在大型SpatialPolygonsDataFrame上运行缓慢,替代方案?

时间:2018-02-01 15:31:44

标签: raster r-raster rasterizing rasterize

我有一个大的(266,000个元素,1.7Gb)SpatialPolygonsDataFrame,我试图将其转换为90m分辨率的RasterLayer(~100,000,000个单元格)

SpatialPolygonsDataFrame有12个我感兴趣的变量,因此我打算制作12个RasterLayers

目前,使用rasterize(),每次转化需要约2天。所以预计总处理时间将近一个月。

有人可以提出更快的流程吗?我认为这在ArcMap中要快10-40倍,但我想在R中做到这一点以保持一致,这是一个有趣的挑战!

一般代码

######################################################
### Make Rasters
######################################################
##Make template
r<-raster(res=90,extent(polys_final))

##set up loop
loop_name <- colnames(as.data.frame(polys_final))

for(i in 1:length(loop_name)){
a <-rasterize(polys_final, r, field=i)
writeRaster(a, filename=paste("/Users/PhD_Soils_raster_90m/",loop_name[i],".tif",sep=""), format="GTiff")
}

1 个答案:

答案 0 :(得分:0)

我认为这是使用GDAL的情况,特别是gdal_rasterize函数。

如果您正在执行大量空间操作,则可能已在计算机上安装了GDAL,并且可以使用system()命令从R中运行GDAL命令。我没有做任何测试或其他任何测试,但这比使用R中的raster包要快得多。

例如,下面的代码从河流的shapefile创建一个栅格。此代码创建一个输出文件,其中特征存在的位置为1,而0表示不存在特征。

path_2_gdal_function <- "/Library/Frameworks/GDAL.framework/Programs/gdal_rasterize"
outRaster <- "/Users/me/Desktop/rasterized.tiff"
inVector <- "/Full/Path/To/file.shp"
theCommand <- sprintf("%s -burn 1 -a_nodata 0 -ts 1000 1000 %s  %s", path_2_gdal_function, inVector, outRaster)
system(theCommand)
  • -ts参数提供输出栅格的大小(以像素为单位)
  • -burn参数指定要在功能存在的输出栅格中放置的值
  • -a_nodata表示未找到任何功能的值。

对于您的情况,您需要添加-a attribute_name参数,该参数指定要在输出栅格中刻录的输入向量中的属性名称。关于possible arguments here的完整详情。

注意:sprintf()函数仅用于格式化使用system()函数传递给命令行的文本字符串