pat*_*t-s 14
使用新的sf包,现在可以快速简便地使用:
library(sf)
out <- st_intersection(points, poly)
Run Code Online (Sandbox Code Playgroud)
如果您不希望多边形中的所有字段都添加到点要素中,则只需dplyr::select()在以下位置调用面要素:
library(magrittr)
library(dplyr)
library(sf)
poly %>%
select(column-name1, column-name2, etc.) -> poly
out <- st_intersection(points, poly)
Run Code Online (Sandbox Code Playgroud)
如果遇到问题,请确保多边形有效:
st_is_valid(poly)
Run Code Online (Sandbox Code Playgroud)
如果您FALSE在此处看到某些输出,请尝试使其有效:
poly <- st_make_valid(poly)
Run Code Online (Sandbox Code Playgroud)
请注意,这些"有效"函数取决于使用sf编译的安装liblwgeom.
Spa*_*man 13
如果你这样做overlay(pts, polys)pts是一个SpatialPointsDataFrame对象而多边形是一个SpatialPolygonsDataFrame对象,那么你得到的矢量长度与给出多边形数据帧行的点的长度相同.因此,您需要做的就是将多边形数据组合到点数据框上:
o = overlay(pts, polys)
pts@data = cbind(pts@data, polys[o,])
Run Code Online (Sandbox Code Playgroud)
然而!如果你的任何一个点落在你的所有多边形之外,那么叠加会返回一个NA,这将导致多边形[o,]失败,所以要么确保你的所有点都在多边形内,要么你必须考虑另一种分配方式多边形之外的点的值...