如何快速找到大型网格中的最近点

时间:2019-05-23 15:33:02

标签: r

我有一个由1k点(经度和纬度)组成的网格grid

我还有另外1万个点的列表(也包括经度和纬度)pts

我想找到pts中每个值最接近哪个网格点。

我有一个蛮力算法,但是很慢:

d=NULL
for( i in 1:nrow(pts){
    for(j in 1:nrow(grid){
        d=d,distHaversine(pts[i,2:3],grid[j,2:3]))
}
}
m1=data.frame(matrix(d,ncol=nrow(grid),byrow=1)
c=apply(m,2,which.min)

有一种方法可以加快此过程,并且蛮力很慢且很烦人。

我正在使用R

1 个答案:

答案 0 :(得分:1)

distHaversine是矢量化的,因此只需要一个循环。而且您当然不需要存储所有距离,如果需要的话,只需保留每次迭代的最小值即可。

c = numeric(nrow(pts))
for( i in 1:nrow(pts){
  c[i] = which.min(distHaversine(pts[i, 2:3], grid[, 2:3])
}

上面的方法应该起作用并且速度要快得多。如果你 仍然想更快,您可以看看并行执行迭代。