从 R 中的大栅格创建多边形
Create polygon from large raster in R
我有一个很大的光栅文件 (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
和
我尝试了几种方法来创建多边形:
- 使用 dissolve==TRUE 选项的光栅中的 rasterToPolygons(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 这是我在 Whosebug 上的第一个问题,如果我的问题没有被清楚地描述,我深表歉意。我不知道如何提供大型数据集的可重现示例。
您正在寻找的是 terra
包中的 as.polygons()
,raster
包的后继者。 terra
比 raster
更好地处理大型数据集。
我有一个很大的光栅文件 (5GB),其中只包含 1 和 NA。我想将其转换为带 1 的区域的多面体,相邻单元格溶解为一个多边形。
我已经使用
将文件导入到 Rr = 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 崩溃),
当我在覆盖 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 这是我在 Whosebug 上的第一个问题,如果我的问题没有被清楚地描述,我深表歉意。我不知道如何提供大型数据集的可重现示例。
您正在寻找的是 terra
包中的 as.polygons()
,raster
包的后继者。 terra
比 raster
更好地处理大型数据集。