如何对大型 SpatialPolygonsDataFrame 进行子集化

How to subset a large SpatialPolygonsDataFrame

我想计算野火的面积。我通过减去根据火灾前的 Landsat 图像和火灾后的另一幅图像计算出的 NDVI 进行了尝试,然后查看 NDVI 减少的位置。然而,不仅在燃烧区域NDVI发生了变化,而且还存在许多随机差异。我使用 rasterToPolygons 创建了一个 large SpatialPolygonsDataFrame,其中包含 NDVI 之后 - NDVI 之前 < 0 的所有区域。 现在我想删除所有面积低于某个阈值的多边形。但是,我找不到对大型 SpatialPolygonsDataFrame 进行子集化的方法。

我找到了一个关于如何获取面积高于阈值的多边形列表的示例(其中 burned_polylarge SpatialPolygonsDataFrame ):

pols <- lapply(burned_poly@polygons , slot , "Polygons")
pols_areas <- lapply(pols[[2]], function(x) slot(x, "area"))

但是,像这样访问大型 SpatialPolygonsDataFrame

bp <- burned_poly@polygons[[1]]@Polygons[pols_areas >= 9000]

给我一个列表,我目前无法将其强制转换为 SpatialPolygonsDataFrame。

有人能告诉我最后一步怎么做吗(我在 Sf 参数上遇到了问题,我不知道 中的参数是什么SpatialPolygonsDataFrame 函数),或者可能有一种不同的更好的方法将火灾范围提取为多边形?

如果您使用的是简单功能 sf 库,则可以使用 tidyverse 中的函数。过滤数据是使用 filter() 函数的问题。请注意,您可以使用 st_as_sf() 将对象转换为 sf。参见:https://r-spatial.github.io/sf/reference/st_as_sf.html and

好的,我想我找到了一个方法,多亏了 Orlando 的建议,使用 sf。 我通过 st_as_sf() 将 large SpatialPolygonsDataFrame 对象转换为 sf 对象我是多面体。这个 stf_MULTIPOLYGON 对象可以使用 st_cast() 细分为单个多边形,并且生成的对象像 data.frame.

bp_sf <- st_as_sf(burned_poly)
bps_sf <- st_cast(bp_sf, "POLYGON")
BpSf <- bps_sf[as.numeric(st_area(bps_sf))>=10000,]