36

我有一个名为“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

4 回答 4

28

为 over 找到了这种简洁直观的语法:

   pnts[ind_adm,] 

这个介绍文档

于 2016-12-02T04:57:30.747 回答
26

您不应该提供函数。您正在聚合多边形几何上的点的属性值(即返回的数字是mean落在多边形内的点的属性值)。此外,对于您想做的事情,您有自己的错误方式xy应该...

over( pnts , ind_adm , fn = NULL) 
于 2013-09-25T10:47:34.270 回答
8

您可以使用point.in.polyfomspatialEco包。它“与点和多边形要素类相交并将多边形属性添加到点”。

library(spatialEco)

new_shape <- point.in.poly(pnts, ind_adm)
于 2015-10-26T10:10:59.037 回答
1

您还可以使用包中的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)

于 2017-12-30T20:06:23.270 回答