我有一个名为"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
我应该得到多边形“在”中的点的索引 .
我哪里错了?
4 回答
你不应该提供一个功能 . 您正在聚合多边形几何体上的点的属性值(即返回的数字是落在多边形内的点的属性的
mean
) . 另外,你有x
和y
错误的方式来做你想做的事情 . 应该...找到这种简洁直观的语法:
来自this简介文件
您可以使用
point.in.poly
fomspatialEco
包 . 它"intersects point and polygon feature classes and adds polygon attributes to points" .您还可以使用
sf
包中的st_intersection
函数:加载库
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)