如何解决如何在预先建立的区域内创建缓冲区和剪辑,在 r 的同一进程中?
我正在评估采矿在某些地区的影响,为了了解这种影响的范围,我生成了一定距离的缓冲区。但是,有几个区域在空间上很近,这些缓冲区最终会到达相邻区域。这已经成为一个问题,因为我正在评估 300 多个区域,很难通过视觉审查消除不需要的缓冲区。 而且我相信有一些技巧,但我找不到。
-
如下例所示,我的受影响区域位于
shapefile
中,而我的研究区域位于另一个shapefile
中:plot(study_area) plot(impacted_area,add=T)
library(rgeos)
#generate the buffers arround the impacted areas
my_buffer<- rgeos::gBuffer(impacted_area,width = 10000,byid = T)
###centroid remove
my_buffer.er <- erase(my_buffer,impacted_area)
后来,为了建立限制,我使用了相交工具。此方法有效,但可以到达其他邻近区域。
library(raster)
study_area.bff <-raster::intersect(my_buffer.er,study_area)
- 因为有更多的研究区域非常接近,所以我缓冲区的最后两个环到达了邻近区域,这是不可取的。
解决它的一种方法是将其留在形状上,仅将多边形与要交集的区域限制在一起,但我有几个受影响的区域(多边形),在我看来,这将是不可能分开对待。
-
解决方法
在询问 R 问题时,请始终提供一个最小的、独立的、可重现的示例。也就是说,提供简单的数据和完整的代码来说明哪些有效,哪些无效。
说明问题的示例数据,我相信
library(raster)
p1 <- rbind(c(-180,-20),c(-140,55),c(-60,0),-60),c(-180,-20))
p2 <- rbind(c(-45,c(0,60),c(40,5),c(15,-45),c(-45,0))
pols <- spPolygons(p1,p2)
xy <- SpatialPoints(rbind(cbind(-73.65,1.75),cbind(-39.28,2.35)))
xy <- SpatialPointsDataFrame(xy,data.frame(id=1:2))
b <- buffer(xy,7000000,dissolve=FALSE)
plot(pols)
points(xy,cex=2,pch=20)
lines(b,col="blue",lwd=2)
在我看来,您可以通过将缓冲区与其对应的多边形相交来解决此问题。你可以按照这些方式做一些事情
ptpol <- extract(pols,xy)
x <- list()
for (i in 1:length(b)) {
x[[i]] <- intersect(b[i,],pols[ptpol$poly.ID[i],])
}
x <- do.call(rbind,x)
lines(x,col="red",lwd=4)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。