我正在处理大型光栅堆栈,我需要重新采样并剪辑它们。 我读的TIFF文件列表,并创建堆栈:如何提高处理大型栅格堆栈的R处理速度?
files <- list.files(path=".", pattern="tif", all.files=FALSE, full.names=TRUE)
s <- stack(files)
r <- raster("raster.tif")
s_re <- resample(s, r,method='bilinear')
e <- extent(-180, 180, -60, 90)
s_crop <- crop(s_re, e)
这个过程需要数天才能完成!但是,使用ArcPy和python会快得多。我的问题是:为什么R的过程如此缓慢以及是否有加速过程的方法? (我用雪包进行并行处理,但这也没有帮助)。 这些r
和s
层:
> r
class : RasterLayer
dimensions : 3000, 7200, 21600000 (nrow, ncol, ncell)
resolution : 0.05, 0.05 (x, y)
extent : -180, 180, -59.99999, 90.00001 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
> s
class : RasterStack
dimensions : 2160, 4320, 9331200, 365 (nrow, ncol, ncell, nlayers)
resolution : 0.08333333, 0.08333333 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
很难评论什么可能导致这种情况,而无需掌握光栅文件。也就是说,我偶尔使用由[** gdalUtils **]封装的GDAL函数来加速栅格操作(https://cran.r-project.org/web/packages/gdalUtils/index.html )。在这里,我可能使用['gdal_translate()'](http://www.gdal.org/gdal_translate.html),通过它的'-tr'参数设置分辨率,并通过'-r'参数设置所需的重采样算法。不知道它如何处理'RasterStack',但它应该处理'RasterLayer's(或者,我猜,'* .tif *'磁盘上的文件)就好了。 –
确保您使用最新版本的光栅,因为'resample'的速度最近有了很大提高(可能还不够)。如果您显示节目和r以便我们可以看到正在发生的事情,我也会很有帮助。对于多核,你可以尝试beginCluster等 – RobertH
@ JoshO'Brien谢谢,我会尝试gdal,但光栅会更方便。 –