从重心R中的边到质心到20 m处创建缓冲区

问题描述 投票:0回答:1

我有一个shapefile,由状态边界内的海洋和河流多边形组成(从Landcover地图(栅格)和状态边界中裁剪和蒙版(多边形shapefile))。在状态边界内,我有多个多边形(在我的情况下,超过1500个不同的多边形),我想从边缘和向内20 m处提取区域(如内部缓冲区)。但就我而言,我的所有多边形的形状都不完美,有的是河流,有的只是正方形(距离栅格文件10 * 10 m),有的是大湖。我的问题是如何为多边形创建此“内部缓冲区”,因为所有多边形,甚至不是多边形的所有部分都需要具有缓冲区(因为它们小于40 m,因此每侧缓冲区20 m)。

让我告诉我我的代码以及我走了多远。

poly <- jvk_18[53,]
cropped <- crop(mark_data, poly, snap = "near")
masked <- mask(cropped, poly)
sjo <- (masked == 61)
sjo <- clump(sjo, directions = 8, gaps = T)

所以这里只是州边界内的croppingmaskingclumping海洋和河流的抽取。

此外,我已将数据转换为MULTIPOLYGON

test <- st_as_stars(sjo)
test <- st_as_sf(test, merge = TRUE)
test <- st_cast(test, "MULTIPOLYGON")

此后,我找到了st_centroid函数来检测多边形的中间点。我的下一个问题是,是否可以从质心到边缘20 m处创建buffer?这可能吗,在那种情况下,怎么办?

pol <- test[904, ]
cent <- st_centroid(pol)

最后,如开头所述,我想删除此“内部部分”,最后仅从边缘和向内获得20 m。

r buffer polygon edges centroid
1个回答
0
投票

不是像您说的那样使用内部缓冲区,您不能从中心向外工作吗?

为您提供一个可重现的示例会更容易,但是考虑到包含多边形的SF对象poly,我会做类似的事情:

core <- st_buffer(poly, -20) %>% st_union()    # this will shrink your edges by your desired amount, 20m (and union to tidy up)

diff <- st_difference(poly, core)  # difference will leave you with the 20 m ring, removing the core

当然,这会使小多边形消失...您可能可以设置条件缓冲区的大小,但是如果需要帮助,请发布示例!

© www.soinside.com 2019 - 2024. All rights reserved.