使用简单特征(sf)获取距离内的字段值总和

时间:2018-12-03 22:56:23

标签: r spatial sf

我正在尝试从sf对象上的字段中获取到每个点的给定距离内的所有点的值的总和,不包括该点的值。

set.seed(123);m=matrix(runif(30,1,40),ncol=3)
loc<-m %>% 
  as.data.frame %>% 
  sf::st_as_sf(coords = c(1,2))
a<-st_is_within_distance(loc,dist=10)
> a
Sparse geometry binary predicate list of length 10, where the predicate was `is_within_distance'
 1: 1, 6, 10
 2: 2, 4
 3: 3
 4: 2, 4
 5: 5, 8
 6: 1, 6
 7: 7, 9
 8: 5, 8
 9: 7, 9
 10: 1, 10

我们如何获得一个包含这10个点以及V3之和的列表的数据框?

    point|sum
    1    | sum_of_v3_of(6,10)
    2    | sum_of_v3_of(4)
...

这对于postgis很容易实现,但是在R中拥有所有其他代码,并且想学习如何做。

1 个答案:

答案 0 :(得分:1)

我们可以执行以下操作:

// really simple options
let options = {
  columns: columns,
  data: tabledata,
}

一旦我们注意到data.frame(point = 1:length(a), sum = sapply(a, function(p) sum(loc$V3[p])) - loc$V3) # point sum # 1 1 35.37012 # 2 2 39.77652 # 3 3 0.00000 # 4 4 28.01933 # 5 5 24.17154 # 6 6 35.69203 # 7 7 12.27723 # 8 8 26.57253 # 9 9 22.21857 # 10 10 35.69203 是一个列表(请参阅a),它的元素(例如1、6、10作为其第一个元素str(a))就变得很容易。 a[[1]]也是具有loc可以访问的元素V3的列表。因此,然后使用loc$V3,我们遍历sapply的元素,查看a的对应元素,并对它们进行总结。结果loc$V3返回一个向量,然后我们为结果创建数据帧或矩阵。