R中的相交点和多边形

时间:2010-09-05 20:45:56

标签: r spatial shapefile intersect

我在 R 中使用shapefile,一个是point.shp,另一个是polygon.shp。 现在,我想将点与多边形相交,这意味着多边形中的所有值都应该附加到point.shp的表中。

我在包sp中尝试了overlay()和spRbind,但没有做我希望他们做的事情。

有人能给我一个提示吗?

3 个答案:

答案 0 :(得分:13)

如果执行overlay(pts, polys)其中pts是SpatialPointsDataFrame对象而多边形是SpatialPolygonsDataFrame对象,则返回的矢量长度与给出多边形数据帧行的点的长度相同。因此,您需要做的就是将多边形数据组合到点数据框上:

 o = overlay(pts, polys)
 pts@data = cbind(pts@data, polys[o,])

无论其!如果你的任何一个点落在你的所有多边形之外,那么叠加会返回一个NA,这将导致多边形[o,]失败,所以要么确保你的所有点都在多边形内,要么你必须考虑另一种分配方式多边形之外的点的值......

答案 1 :(得分:12)

使用新的sf软件包,现在既快又简单:

library(sf)
out <- st_intersection(points, poly)

其他选项

如果您不希望多边形中的所有字段都添加到点要素中,只需在多边形要素上调用dplyr::select()

library(magrittr)
library(dplyr)
library(sf)

poly %>% 
  select(column-name1, column-name2, etc.) -> poly

out <- st_intersection(points, poly)

如果遇到问题,请确保多边形有效:

st_is_valid(poly)

如果您在此处看到一些FALSE输出,请尝试使其有效:

poly <- st_make_valid(poly) 

请注意,这些&#39;有效&#39;函数依赖于使用sf编译的liblwgeom安装。

答案 2 :(得分:4)

您使用point.in.poly fom spatialEco包在一行中执行此操作。

library(spatialEco)

new_shape <- point.in.poly(pts, polys)
文档中的

point.in.poly&#34;与点和面要素类相交,并将多边形属性添加到点&#34;。