使用R中的光栅对大型ArcGIS栅格文件进行去重量化



我正在尝试提取一个类似于这个林业地图的大型ArcGIS网格文件的各种属性

即使使用较小的裁剪版本的文件,操作也很慢,但更重要的是,它需要大量GB的临时文件,最终会耗尽我的硬盘驱动器,导致操作失败。我在这个驱动器上有大约35 GB的可用空间。

foo <- raster("grid/w001001.adf")
allLayers <- deratify(foo)

使用上述文件的裁剪版本可以提取单个属性层,但当裁剪的ArcGIS网格文件目录只有~160MB时,这仍然需要一个多GB的临时文件。在函数中指定文件名似乎并不能提高硬盘空间的使用量。

allLayers <- deratify(fooCropped, att="BA_GE_3")

我想提取几个层,然后使用这些属性逐像素计算。有没有一种方法可以将属性表提取为数据帧,对其进行计算并将其与光栅重新关联?

系统信息:

> R.Version()
$platform
[1] "x86_64-apple-darwin15.3.0"
$arch
[1] "x86_64"
$os
[1] "darwin15.3.0"
$system
[1] "x86_64, darwin15.3.0"
...
‘raster’ version 2.5-2 
R version 3.2.4

我对流温度数据进行计算,这些数据通常是数百万条记录。每当遇到内存问题时,我都会将gc()和rm()函数合并到处理数据的循环中。您可以考虑在循环中使用这些函数来处理裁剪的文件,以便rm()从R环境中删除不需要的对象,gc()将内存返回到系统。

如果您有一个多核系统,那么您可以将其处理成一个循环来批量处理所有裁剪的文件,并在每个节点完成一个循环的deferfy()调用后进行清理。如果没有更多的代码,就很难建议如何实现。

最新更新