我有一个名为“ind_adm”的shapefile和一个名为“pnts”的SpatialPointsDataFrame。 “pnts”包含随机生成的点,并且一些点与多边形重叠。见下图。
现在,我想在多边形分析中做一点,即我想找出哪些点位于代表印度边界的灰色多边形内。为此我在sp库中使用over()函数。
pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join
然而,我得到的输出是
>pt.in.poly
values
0 6.019467
我实际上应该得到多边形中“点”的点的索引。
我哪里错了?
答案 0 :(得分:21)
您不应提供功能。您正在聚合多边形几何体上的点的属性值(即返回的数字是落在多边形内的点的属性的mean
)。另外,您的x
和y
错误的方式可以实现您的目标。应该......
over( pnts , ind_adm , fn = NULL)
答案 1 :(得分:19)
答案 2 :(得分:7)
您可以使用point.in.poly
fom spatialEco
套餐。它与点和面要素类相交,并将多边形属性添加到点&#34;。
library(spatialEco)
new_shape <- point.in.poly(pnts, ind_adm)
答案 3 :(得分:0)
您还可以使用st_intersection
包中的sf
功能:
library(sf)
ind_adm <- st_as_sf(ind_adm)
(24047是印度的EPSG代码)
pnts <- st_as_sf(pnts) %>% st_set_crs(., 24047)
kept_points <- st_intersection(ind_adm, pnts)