sp::over() 用于多边形分析中的点
Posted
技术标签:
【中文标题】sp::over() 用于多边形分析中的点【英文标题】:sp::over() for point in polygon analysis 【发布时间】:2013-09-30 22:00:02 【问题描述】:我有一个名为“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
我实际上应该得到多边形“内”点的索引。
我哪里错了?
【问题讨论】:
【参考方案1】:找到了这个简洁直观的 over 语法:
pnts[ind_adm,]
来自this介绍文档
【讨论】:
这个答案最适合我。在我的例子中 pnts 是一个 SpatialPointsDataFrame 而 ind_adm 是一个 SpatialPolygonsDataFrame。 非常感谢!这值得 1000 次投票,非常直观,非常适合通过 shapefile 子集位置数据,尤其是在处理人口普查数据和收入等时 很好的解决方案。提示:确保 pnts 和 ind_adm 使用相同的 CRS。【参考方案2】:您不应该提供函数。您正在聚合多边形几何上的点的属性值(即返回的数字是落在多边形内的点的属性的mean
)。此外,你有你的x
和y
错误的方式来完成你想做的事情。应该是……
over( pnts , ind_adm , fn = NULL)
【讨论】:
谢谢西蒙。问题在于 x 和 y 的顺序。该函数指定对象的聚合方式,因此“平均值”可以正常工作。我想将来记住 x 和 y 顺序的一个好方法是记住分析称为“多边形中的点”,因此点先出现,然后是多边形。【参考方案3】:您可以使用 point.in.poly
来自 spatialEco
包。它“与点和多边形要素类相交并将多边形属性添加到点”。
library(spatialEco)
new_shape <- point.in.poly(pnts, ind_adm)
【讨论】:
您必须确保您的spatialpolygon(在本例中为ind_adm)在某些列中没有缺失值,否则在使用point.in.poly时会显示错误。跨度> 【参考方案4】:您还可以使用 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)
【讨论】:
以上是关于sp::over() 用于多边形分析中的点的主要内容,如果未能解决你的问题,请参考以下文章