sp :: over()用于多边形分析中的点

Dot*_*tPi 30 gis r polygon shapefile

我有一个名为"ind_adm"的shapefile和一个名为"pnts"的SpatialPointsDataFrame."pnts"包含随机生成的点,并且一些点与多边形重叠.见下图. 在此输入图像描述

现在,我想在多边形分析中做一点,即我想找出哪些点位于代表印度边界的灰色多边形内.为此我在sp库中使用over()函数.

pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join
Run Code Online (Sandbox Code Playgroud)

但是,我得到的输出是

    >pt.in.poly
    values
    0 6.019467
Run Code Online (Sandbox Code Playgroud)

我应该得到多边形"在"中的点的索引.

我哪里错了?

Sim*_*lon 23

你不应该提供一个功能.您正在聚合多边形几何体上的点的属性值(即返回的数字是mean多边形内的点的属性).另外你有你的x,并y以错误的方式为你想要做什么.应该...

over( pnts , ind_adm , fn = NULL) 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢西蒙。问题出在x和y的顺序上。该函数指定如何聚合对象,因此“均值”工作正常。我猜想记住将来x和y的顺序的一种好方法是记住该分析称为“多边形中的点”,因此该点首先出现,然后是多边形。 (2认同)

小智 21

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

   pnts[ind_adm,] 
Run Code Online (Sandbox Code Playgroud)

这个介绍文件

  • 这个答案最适合我。就我而言,pnts 是 SpatialPointsDataFrame,ind_adm 是 SpatialPolygonsDataFrame。 (2认同)
  • 太感谢了!这值得 1000 票赞成,非常直观,非常适合通过 shapefile 对位置数据进行子集化,特别是在处理人口普查数据和收入等时 (2认同)
  • 很好的解决方案。提示:确保 pnts 和 ind_adm 使用相同的 CRS。 (2认同)

raf*_*ira 7

你可以使用point.in.polyfom spatialEco包.它"与点和面要素类相交,并将多边形属性添加到点".

library(spatialEco)

new_shape <- point.in.poly(pnts, ind_adm)
Run Code Online (Sandbox Code Playgroud)