我正在使用R处理shapefiles文件,其中之一是point.shp,另一个是polygon.shp。现在,我想要将点与多边形相交,也就是说,多边形的所有值都应该附加到point.shp表格中。
我尝试了sp包中的overlay()和spRbind函数,但它们都没有像我期望的那样工作。
有人能给我提示吗?
使用新的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)
liblwgeom
编译的sf
安装程序。overlay(pts, polys)
,其中pts是一个SpatialPointsDataFrame对象,polys是一个SpatialPolygonsDataFrame对象,则会返回一个与点相同长度的向量,该向量给出多边形数据帧的行。因此,你只需要将多边形数据合并到点数据框上,就可以完成操作: o = overlay(pts, polys)
pts@data = cbind(pts@data, polys[o,])
然而!如果你的任何一个点都在所有多边形之外,那么叠加操作会返回NA,这将导致polys[o,]失败,因此要么确保所有点都在多边形内,要么您必须考虑另一种方法来为多边形外的点分配值...
overlay
函数现在是over
函数。你第二行中提到的polys
对象所指的内容不太清楚。 - colinspatialEco
包中的point.in.poly
函数在一行代码中完成此操作,该操作涉及到IT技术。请注意,不要删除任何HTML标签。library(spatialEco)
new_shape <- point.in.poly(pts, polys)
从文档中得知:point.in.poly
"相交点和多边形要素类,并将多边形属性添加到点"。
spatialEco::point.in.poly
只是 sp::over
的一个包装器。 - Valentin_Ștefan
sf
对象来完成这个任务。你提到的类是从sp
包中来的。请使用sf
包中的st_read()
函数读取你的数据。 - pat-s