【问题标题】:Create polygon from large raster in R从R中的大栅格创建多边形
【发布时间】:2021-01-20 09:27:47
【问题描述】:

我有一个只包含 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 

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

  • 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 上的第一个问题,所以如果我的问题没有清楚地描述,我深表歉意。我不知道如何提供大型数据集的可重现示例。

【问题讨论】:

  • 如果我理解正确,您的栅格大小为 70,000 x 70,000 像素。对于西班牙大小的区域,这意味着每 10 m 大约有 1 个像素。你真的需要这种详细程度吗?即使在每个维度上将其减少 10 倍,也不会对高分辨率监视器上的最终绘制对象产生任何影响。另外,如果有多个多边形,你不能将栅格分割成每个多边形周围的区域吗?
  • 我已编辑问题以显示有关栅格的更多信息。该地图是全球性的,我刚刚在西班牙地区尝试了 rasterToPolygons 和 isoband,看看我的方法是否有效。我正在为一位同事做这件事,他们选择使用这个决议,是的,如果没有其他方法,我们将不得不减少它。我还考虑将全局地图拆分为几个区域,并在每个区域内分别制作多边形。这很繁琐,但可能是一种选择。

标签: r geospatial large-data r-raster r-stars


【解决方案1】:

您正在寻找的是 as.polygons() 来自 terra 包,raster 包的继任者。 terraraster 更好地处理大型数据集。

【讨论】:

  • 非常感谢您的建议!我现在已经开始使用 terra 进行所有空间处理,而且我恋爱了。
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2017-12-16
  • 1970-01-01
  • 2021-07-14
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多