R在矩阵中找到最近的点

R find nearest points in matrix

R:在矩阵中找到点靠近两个选定点的线。

我有一个区域的长/纬度矩阵。
而且我在这个区域有一个点,有经度和纬度,所以我需要在矩阵中找到最佳匹配的点。

我试过了,但它不起作用:

1
2
find.point <- is.numeric(which(abs(matrix[,1]-East)==min(abs(matrix[,1]-East)))
                               && which(abs(matrix[,2]-North)==min(abs(matrix[,2]-North))))

如何找到最靠近矩阵[,1]的东和最靠近矩阵[,2]的北的点?


如果没有您提供的具体数据,很难准确地帮助您。但是假设您想用欧几里得距离计算最近的点并且您的数据与下面有些相似,这可以说明您如何做到这一点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Create some toy data
set.seed(1)
pos <- matrix(runif(20), 10, 2)
colnames(pos) <- c("lon","lat")
print(pos)
#             lon       lat
# [1,] 0.26550866 0.2059746
# [2,] 0.37212390 0.1765568
# [3,] 0.57285336 0.6870228
# [4,] 0.90820779 0.3841037
# [5,] 0.20168193 0.7698414
# [6,] 0.89838968 0.4976992
# [7,] 0.94467527 0.7176185
# [8,] 0.66079779 0.9919061
# [9,] 0.62911404 0.3800352
#[10,] 0.06178627 0.7774452

new.pos <- c(0.5, 0.5) # New position

# Compute distance to points and select nearest index
nearest.idx <- which.min(colSums((t(pos) - new.pos)^2))
nearest.idx
#[1] 9

# Pick out the point
pos[nearest.idx, ]
#      lon       lat
#0.6291140 0.3800352

计算距离的行依赖于两个事实:1)R 中的矩阵以列优先顺序存储,2)当向量太短时,R 的重用/重复规则。