首页 文章

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

提问于
浏览
23

我有一个名为"ind_adm"的shapefile和一个名为"pnts"的SpatialPointsDataFrame . "pnts"包含随机生成的点,并且一些点与多边形重叠 . 见下图 .
enter image description here

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

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

但是,我得到的输出是

>pt.in.poly
    values
    0 6.019467

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

我哪里错了?

4 回答

  • 18

    你不应该提供一个功能 . 您正在聚合多边形几何体上的点的属性值(即返回的数字是落在多边形内的点的属性的 mean ) . 另外,你有 xy 错误的方式来做你想做的事情 . 应该...

    over( pnts , ind_adm , fn = NULL)
    
  • 7

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

    pnts[ind_adm,]
    

    来自this简介文件

  • 15

    您可以使用 point.in.poly fom spatialEco 包 . 它"intersects point and polygon feature classes and adds polygon attributes to points" .

    library(spatialEco)
    
    new_shape <- point.in.poly(pnts, ind_adm)
    
  • 0

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

相关问题