2016-05-19 6 views
3

の2番目のデータセットの最も近いポイントまでの距離SpatialPointsDataFrameの各ポイントについて、2番目のSpatialPointsDataFrame(2つのSpatialPointDataFrameのArcGISの「最も近い」ツールに相当)に最も近いポイントまでの距離を見つけようとしています)。各ポイントについて、R

私はすべてのペアごとの距離gDistanceを使用して分を取る(like answer 1 here)を計算することにより、ナイーブな実装を行うことができますが、私はいくつかの巨大なデータセットを持っており、より効率的な何かを探していました。

たとえば、trick with knearneigh for points in same datasetです。

r-sig-geo

+0

'sp'パッケージの中の' spDists'があなたの望むところでうまくいくかのようです。最初の2つの引数は、例のように2つの点集合を表すために使用できる異なる行列であるように見えます。とにかく見る価値がある。 – lmo

+0

@Imoありがとう!まだすべてのペアを計算しているように見えるので、同じパフォーマンスの問題がある可能性があります。 gDistanceと照合しますが、彼らはおおよそ同じことをしているようです。 –

+0

クロスポストしないでください。 –

答えて

8

にクロスポストSearchTreesパッケージには、一つの解決策を提供しています。そのドキュメンテーションから引用すると、QuadTreeデータ構造の実装が提供されています。この構造は、2次元の高速k-Nearest Neighbor [...]ルックアップを実装するために使用されます。

はここ二SpatialPointsオブジェクトB

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

+0

Thanks @ JoshO'Brien –

0

別で最も近い2つのポイント、あなたがSpatialPointsオブジェクトBの各点のために、すぐに見つけるためにそれを使用することができる方法ですR-Sig-Geoからの提案はnaborライブラリのknn関数です。

関連する問題