如何找到两个 shapefile 之间的重叠?

How do I find the overlap between two shapefiles?

我有两个 shapefile (sf),一个是多边形,一个是点。作为输出,我想要一个 df 显示哪些点落在哪些多边形内,如下所示:

polygon   overlap  geometry
polygon1  point34  c(3478,234872)
polygon1  point56  c(23423,234982)
polygon2  point23  c(23498,2334)
polygon3  point45  c(872348,23847)
polygon3  point87  c(234982,1237)
polygon3  point88  c(234873,2873)

我假设我必须对 st_intersection() 做一些事情,但到目前为止我还没有设法获得所需的输出。

经过一番折腾,我想到了这个解决方案,但我很确定它不是最优雅的。 x 和 y 是 shapefile,x 是点,y 是多边形。

count_overlap <- function(x, y){
  f1 <- function(z){
    r <- st_intersects(x,y[z,])
    return(r)
    }
  l1 <- c(1:nrow(y))
  l2 <- lapply(l1, f1)
  l3 <- lapply(l2, unlist)
  r <- sapply(l3, sum)
  y$overlap <- r
  return(y)
}

结果是原始 y sf/dataframe 添加了一个名为 'overlap' 的列,该列显示了 x 落入多边形内的点数。不完全是我在问题中要求的,但对我个人来说是一个很好的结果。