我有两个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是形状文件,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,添加了一个名为"重叠"的列,显示了从x到多边形内的点的计数。这并不是我在问题中所要求的,但对我个人来说是一个好结果。
尝试在sp:中使用over
library(sp)
out = over(pnt,plgn)
来自?超过:
x=";"空间点";,y=";"空间多边形";返回一个长度等于点数的数字矢量;数字是点落在其中的y的多边形的索引(数字(;NA表示该点不落在多边形中;如果一个点落在多个多边形中,则会记录最后一个多边形。