在 R 中从大栅格创建多边形

Ber*_*los 3 r geospatial large-data r-raster r-stars

我有一个大的光栅文件(5GB),仅包含 1 和 NA。我想将其转换为包含 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 
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来创建多边形:

  • 来自光栅的 rasterToPolygons 并带有溶解==TRUE选项(R崩溃)
  • isoband 来自 isoband 包(R 崩溃),

当我在栅格覆盖 appr 的子集上尝试时,这两种方法都按预期工作。西班牙地区,所以我认为问题仅在于数据的大小,而不是我的代码。

  • 然后我尝试使用 read_stars 读取我的栅格,并使用stars::st_as_sf(st, as_points = FALSE, merge = TRUE, connect8 = TRUE). 这返回了一个空多边形,可能是因为该文件被读取为星星代理对象,但我不确定,我在网上找不到任何有关该信息的信息。然后我通过使用将栅格强制读取为星形而不是星形代理,read_stars(my_filename, proxy=FALSE)并尝试使用st_as_sf上面的命令,但收到消息“错误:无法分配大小为 2.9 Gb 的向量”

我知道在最坏的情况下,我可能可以降低光栅分辨率并因此减小尺寸,并且能够创建我想要的多边形(但分辨率不太精确),但我想知道是否有人有其他我可以尝试的建议?1 和 NA 都位于大的连续区域,因此边缘具有高分辨率就足够了(如果有帮助的话)。

PS 这是我在 StackOverflow 上的第一个问题,所以如果我的问题没有清楚地描述,我深表歉意。我不知道如何提供大型数据集的可重复示例。

Chr*_*Chr 5

您正在寻找的是as.polygons()来自该terra包的内容,该raster包的后继者。处理terra大数据集比raster

  • 非常感谢您的建议!我现在开始使用 terra 进行所有空间处理,并且我爱上了它。 (4认同)