2016-05-19 6 views
3

Пытаясь найти для каждой точки в SpatialPointsDataFrame расстояние до ближайшей точки во втором SpatialPointsDataFrame (эквивалентно «ближайшему» инструменту в ArcGIS для двух пространственных шаблонов SpatialPointDataFrames).Для каждой точки, расстояние до ближайшей точки во втором наборе данных в R

Я могу выполнить наивную реализацию, вычисляя все попарные расстояния с помощью gDistance и принимая min (like answer 1 here), но у меня есть некоторые огромные наборы данных и искал что-то более эффективное.

Например, здесь trick with knearneigh for points in same dataset.

Перекрестная разм r-sig-geo

+0

Похоже, что 'spDists' в пакете' sp' может работать для вас. Первые два аргумента кажутся разными матрицами, которые могут использоваться для представления двух наборов точек, как в вашем примере. Стоит посмотреть так или иначе. – lmo

+0

@ Имо спасибо! Похоже, он все еще вычисляет каждую пару, поэтому может иметь такую ​​же производительность. Будет проверяться против gDistance, но похоже, что они делают примерно то же самое. –

+0

Пожалуйста, не перекрестно. –

ответ

8

SearchTrees пакет предлагает одно решение. Цитируя из своей документации, он «обеспечивает реализацию структуры данных QuadTree, которую он использует для быстрого поиска k-Nearest Neighbor [...] в двух измерениях».

Вот как вы можете использовать его, чтобы быстро найти для каждой точки в SpatialPoints объекта б, два ближайших точек во втором 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

Спасибо @ JoshO'Brien –

0

другой предложение от R-Sig-Geo является функцией knn в библиотеке nabor.

 Смежные вопросы

  • Нет связанных вопросов^_^