对于每个点,R中第二个数据集中距离最近点的距离

时间:2016-05-19 20:48:57

标签: r gis geospatial sp geos

尝试为SpatialPointsDataFrame中的每个点找到第二个SpatialPointsDataFrame中最近点的距离(相当于ArcGIS中两个SpatialPointDataFrames中的“最近”工具)。

我可以通过使用gDistance和min(like answer 1 here)计算所有成对距离来实现天真的实现,但我有一些庞大的数据集并且正在寻找更有效的东西。

例如,这是一个trick with knearneigh for points in same dataset

r-sig-geo

上交叉发布

2 个答案:

答案 0 :(得分:8)

SearchTrees 包提供了一种解决方案。引用其文档,它,"提供了QuadTree数据结构的实现[它]用于在二维中实现快速k-最近邻查找。"

以下是如何使用它快速查找SpatialPoints对象 b 中的每个点,第二个SpatialPoints对象中的两个最近点的

library(sp)
library(SearchTrees)

## Example data
set.seed(1)
A <- SpatialPoints(cbind(x=rnorm(100), y=rnorm(100)))
B <- SpatialPoints(cbind(x=c(-1, 0, 1), y=c(1, 0, -1)))

## Find indices of the two nearest points in A to each of the points in B
tree <- createTree(coordinates(A))
inds <- knnLookup(tree, newdat=coordinates(B), k=2)

## Show that it worked
plot(A, pch=1, cex=1.2)
points(B, col=c("blue", "red", "green"), pch=17, cex=1.5)
## Plot two nearest neigbors
points(A[inds[1,],], pch=16, col=adjustcolor("blue", alpha=0.7))
points(A[inds[2,],], pch=16, col=adjustcolor("red", alpha=0.7))
points(A[inds[3,],], pch=16, col=adjustcolor("green", alpha=0.7))

enter image description here

答案 1 :(得分:0)

R-Sig-Geo的另一个建议是knn库中的nabor函数。