Đây là một cách, sử dụng gói RANN
. Cách tiếp cận tương tự như được hiển thị trong this post, nhưng được điều chỉnh cho một tập hợp các điểm (bài đăng được liên kết là về việc tìm điểm gần nhất trong tập A đến mỗi điểm trong tập 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]]
Ở trên, chúng tôi cung cấp thiết lập duy nhất của bạn điểm, xy
, để lập luận data
, và xác định rằng chúng tôi muốn nn2
để tìm hai điểm gần mỗi điểm (vì điểm gần nhất là tâm điểm chinh no). Hàm nn2
trả về một danh sách có hai phần tử: một vectơ (ma trận, trong trường hợp này) là các chỉ số của mỗi điểm k
gần nhất (đối với mỗi điểm truy vấn); và một vector (ma trận) của khoảng cách. Tôi giả sử chúng tôi không quan tâm đến khoảng cách, vì vậy ở trên chúng tôi sẽ đặt kết quả cho phần tử đầu tiên.
Đối với vấn đề của chúng tôi, kết quả là ma trận hai cột cho chỉ mục của điểm được truy vấn trong cột đầu tiên và chỉ mục của điểm gần nhất trong cột thứ hai.
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
Để có được một ma trận của tọa độ của các điểm gần nhất, bạn có thể sử dụng:
xy[closest[, 2], ]
Theo mặc định nn2
sử dụng một cây kd - bạn có thể muốn thử nghiệm với treetype='bd'
.
Chào mừng bạn đến với Stack Overflow! Vui lòng bao gồm một tập dữ liệu mẫu nhỏ (Tôi không quen thuộc với hệ thống tọa độ NAD27 và tôi giả định rằng những người khác có thể cũng vậy). Hơn nữa, vui lòng bao gồm bất kỳ mã nào bạn đã cố thực hiện thao tác này. – josliber
Tại sao điểm tiêu cực? Đó là một câu hỏi hay. Yêu cầu anh ta chỉnh sửa câu hỏi. – Soheil
'sp :: spDists' hoặc' rgeos :: gDistance' nên trợ giúp, nhưng bạn sẽ cần phải thử một số thứ đầu tiên (mọi người không chỉ viết mã) – hrbrmstr