【问题标题】:How do I find the overlap between two shapefiles?如何找到两个 shapefile 之间的重叠?
【发布时间】:2022-10-20 15:24:59
【问题描述】:

我有两个 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() 做点什么,但到目前为止,我还没有设法获得所需的输出。

【问题讨论】:

    标签: r gis shapefile


    【解决方案1】:

    在摆弄之后,我想出了这个解决方案,但我很确定它不是最优雅的。 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 中落在多边形内的点的计数。不完全是我在问题中要求的,但对我个人来说是一个很好的结果。

    【讨论】:

      【解决方案2】:

      尝试在 sp 中使用 over:

      library(sp)
      out = over(pnt,plgn)
      

      从?结束:

      x = “空间点”,y = “空间多边形” 返回长度等于点数的数值向量;数字是一个点所在的y的多边形的索引(数字); NA 表示该点不属于多边形;如果一个点落在多个多边形中,则记录最后一个多边形。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        相关资源
        最近更新 更多