首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rasterize()在大型SpatialPolygonsDataFrame上慢一点,备选方案?

Rasterize()在大型SpatialPolygonsDataFrame上慢一点,备选方案?
EN

Stack Overflow用户
提问于 2018-02-01 15:31:43
回答 1查看 1.3K关注 0票数 2

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

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

目前,使用rasterize(),每次转换需要2天。因此,预计大约一个月的处理时间。

有人能建议一个更快的过程吗?我认为这在ArcMap中会快10-40倍,但我想在R中做到这一点,以保持一致,这是一个有趣的挑战!

通用代码

代码语言:javascript
复制
######################################################
### 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")
}
EN

回答 1

Stack Overflow用户

发布于 2018-02-01 17:15:59

我认为这是使用GDAL,特别是gdal_rasterize函数的一个例子。

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

例如,下面的代码从河流形状文件中创建一个光栅。此代码将创建一个输出文件,该输出文件的值为1,如果存在一个特性,则创建一个0。

代码语言:javascript
复制
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参数,该参数指定要在输出栅格中燃烧的输入向量中的属性的名称。关于这里可能的论点的详细信息。

注意:sprintf()函数只是用来格式化使用system()函数传递到命令行的文本字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48566382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档