【发布时间】:2020-09-16 09:26:37
【问题描述】:
我已使用以下代码将光栅读入我的 R 会话:
raster <- stack("raster.tif")
现在我想制作一个简单的特征 (sf) 对象来表示该栅格的轮廓。我不能使用边界框,因为栅格是多部分的,所以边界框会比栅格大得多。所以足迹也需要是一个多部分的特征(sf multipolygon)。
如果能提供任何帮助,我将不胜感激。谢谢!
标记
【问题讨论】:
我已使用以下代码将光栅读入我的 R 会话:
raster <- stack("raster.tif")
现在我想制作一个简单的特征 (sf) 对象来表示该栅格的轮廓。我不能使用边界框,因为栅格是多部分的,所以边界框会比栅格大得多。所以足迹也需要是一个多部分的特征(sf multipolygon)。
如果能提供任何帮助,我将不胜感激。谢谢!
标记
【问题讨论】:
如果您想要堆栈中的每个栅格,您需要使用 lapply 循环遍历每个栅格。这将返回一个多边形图层列表。然后,您需要将列表的每个组件转换为 sf 多面体。最后,您需要连接特征(注意 c 是 c() 函数)。 shp 应该是你的多面体。你可能不想溶解多边形,你并没有真正明确你想要什么。
a <- lapply(as.list(raster), rasterToPolygons, dissolve=TRUE)
b <- lapply(a, st_as_sf) # convert to sf multipolygon
shp <- Reduce(c, b) # combine all polygons to one
附带说明一下,使用 raster 作为变量名可能不太好,因为 raster 包有一个名为 raster 的函数。
【讨论】: