R中的相交点和多边形

r spatial shapefile intersect

10545 观看

3回复

1082 作者的声誉

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

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

谁能给我一个提示?

作者: Jens 的来源 发布者: 2010 年 9 月 5 日

回应 (3)


12

72965 作者的声誉

决定

如果你这样做overlay(pts, polys)pts是一个SpatialPointsDataFrame对象而多边形是一个SpatialPolygonsDataFrame对象,那么你得到的矢量长度与给出多边形数据帧行的点的长度相同。因此,您需要做的就是将多边形数据组合到点数据框上:

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

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

作者: Spacedman 发布者: 06.09.2010 08:02

4

6011 作者的声誉

你用point.in.polyfom spatialEco包在一行中做到这一点。

library(spatialEco)

new_shape <- point.in.poly(pts, polys)

从文档:point.in.poly“交叉点和面要素类,并将点属性添加到点”。

作者: rafa.pereira 发布者: 26.10.2015 10:13

10

1873 作者的声誉

使用新的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) 

请注意,这些“有效”函数取决于使用sf编译的安装liblwgeom

作者: pat-s 发布者: 18.05.2017 08:41
32x32