我有一个地理栅格地图的大型 CSV 文件表示 - 42011 列 x 18510 行,磁盘上大约 10GB。该文件是使用 FFT 函数作为卷积的输出创建的,该函数涉及将原始栅格分成六个条带,处理每个条带,并使用重叠相加方法将结果矩阵附加到 csv 文件中。
我现在正在尝试使用 R 包raster将结果写回光栅文件类型(例如 ESRI bil、GeoTIFF 等) 。CSV 文件中的每个数字都映射到栅格的等效像元。
在 R 中执行此操作的明显方法是:
library(raster)
library(data.table)
data <- fread("data.csv") ## Read in data (as data.table)
data_mat <- data.matrix(data) ## Convert to matrix
data_raster <- raster(data_mat, template=existing_raster) ## Write to raster using existing layer as template
但是,我的电脑在尝试创建矩阵的阶段内存不足:
Error: cannot allocate vector of size 5.8 Gb
In addition: Warning messages:
1: In matrix(if (intOK) NA_integer_ else NA_real_, nrow = d[1L], ncol = d[2L], :
Reached total allocation of 16108Mb: see help(memory.size)
etc
计算机运行 64 位 R 和 16GB RAM。
到目前为止我尝试过的事情包括:
bigmemory - 这看起来很有希望,因为 raster 函数可以将 big.matrix 作为输入,但该包目前不适用于 Windows。
ff - 到目前为止我还没有完全掌握这个包的功能,但目前我看不到从 data.table 到 ff 对象的方法,我不确定是否会有方法从那个到栅格层。
稀疏矩阵(使用包“Matrix”) - CSV 可能超过 50% 0。但是,我目前无法找到一种方法从磁盘将其作为稀疏矩阵读取,或者将其从 data.table 获取到稀疏矩阵中。我不知道我是否能够到达光栅。
我最熟悉 R,但也有 Python 的工作知识和访问 ArcGIS。我不确定这个问题是在这里还是在 gis.stackexchange 上更好,但这似乎主要是一个编程问题。任何建议都感激不尽!