我有一个只包含1和NA的大型栅格文件(5GB)。我希望将其转换为仅包含1的面积的多边形,并将相邻单元格溶解成一个多边形。
我已经使用以下方式将文件导入到R中:
r = raster::raster(my_filename)
r
class : RasterLayer
dimensions : 17452, 45000, 785340000 (nrow, ncol, ncell)
resolution : 0.008, 0.008 (x, y)
extent : -180, 180, -55.9875, 83.6285 (xmin, xmax, ymin, ymax)
crs : NA
source : C://...binary_X01_januarysnow.asc
names : binary_X01_januarysnow
我已经尝试了几种方法来创建多边形:
- 使用dissolve == TRUE选项从栅格中创建rasterToPolygons(R崩溃)
- 使用isoband包的isoband(R崩溃)
当我在仅涵盖西班牙地区的raster子集上尝试这两种方法时,它们都按预期工作,因此我认为问题只出现在数据的大小而不是我的代码上。
- 然后我尝试使用read_stars读取我的raster,并使用
stars :: st_as_sf(st,as_points = FALSE,merge = TRUE,connect8 = TRUE)
。这返回了一个空的多边形,可能是因为该文件被读取为stars代理对象,但我不确定,在网上找不到任何信息。 然后我强制将raster读取为stars而不是stars代理,使用read_stars(my_filename,proxy = FALSE)
并尝试像上面那样使用st_as_sf
命令,但收到“错误:无法分配2.9 Gb大小的向量”消息。
我知道在最坏的情况下,我可能只需减少栅格分辨率和大小,就能创建所需的多边形(但分辨率不够精确),但我想知道是否有其他建议我可以尝试?1和NA都位于大的连续区域中,因此如果有帮助,仅在边缘具有高分辨率即可。
PS:这是我在StackOverflow上的第一个问题,如果我的问题描述不清楚,我很抱歉。我不知道如何提供大型数据集的可重现示例。