Вот один из способов, используя пакет RANN
. Этот подход аналогичен описанному в this post, но адаптирован для одного набора точек (связанная запись заключалась в нахождении ближайшей точки в множестве A каждой точке в множестве B).
xy <- read.table(text='point x y
1 1601774 14544454
2 1616574 14579422
3 1608698 14572922
4 1602948 14572990
5 1607355 14573871
6 1615336 14578178
7 1603398 14574495
8 1605153 14570727
9 1606758 14573845
10 1606655 14570953', header=TRUE, row.names=1)
library(RANN)
closest <- nn2(data=xy, k=2)[[1]]
Выше мы поставляем ваш единственный набор точек, xy
, к data
аргумента, и указать, что мы хотим nn2
найти два ближайших точек для каждой точки (потому что ближайшая точка является координационным центром сам). Функция nn2
возвращает список с двумя элементами: вектор (матрица, в данном случае) индексов каждого из k
ближайших точек (для каждой запрашиваемой точки); и вектор (матрица) расстояний. Я предполагаю, что нас не интересуют расстояния, поэтому выше мы подмножаем результат на первый элемент.
Для нашей задачи результатом является матрица с двумя столбцами, которая дает индекс запрашиваемой точки в первом столбце и индекс ближайшей точки во втором.
closest
## [,1] [,2]
## [1,] 1 8
## [2,] 2 6
## [3,] 3 5
## [4,] 4 7
## [5,] 5 9
## [6,] 6 2
## [7,] 7 4
## [8,] 8 10
## [9,] 9 5
## [10,] 10 8
Чтобы получить матрицу координат ближайших точек, вы можете использовать:
xy[closest[, 2], ]
По умолчанию nn2
использует кД дерево - вы можете экспериментировать с treetype='bd'
.
Добро пожаловать в переполнение стека! Пожалуйста, включите небольшой образец данных (я не знаком с системой координат NAD27, и я бы предположил, что другие могут быть тоже). Кроме того, пожалуйста, укажите любой код, который вы пытались выполнить. – josliber
Почему отрицательные моменты? Это хороший вопрос. Попросите его отредактировать вопрос. – Soheil
'sp :: spDists' или' rgeos :: gDistance' должны помочь, но сначала вам нужно попробовать что-то (люди не просто собираются писать код) – hrbrmstr