使用R找到最近的X,Y坐标

jhe*_*son 8 r spatial coordinates

我刚开始学习R,但希望项目尽快完成.它很简单:我有一个X列和一个由X坐标和Y坐标组成的Y列.(在NAD27坐标系中工作).从第一个坐标开始,我想找到数据集中的最近点,然后移动到下一个坐标并找到它在同一数据集中的最近点.理想情况下,它会遍历每个点并确定最近的点.

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
Run Code Online (Sandbox Code Playgroud)

jba*_*ums 9

这是使用RANN包的一种方式.该方法是类似于示出此信息,而是适用于一个单一的点的集合(链接的文章是关于发现在组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]]
Run Code Online (Sandbox Code Playgroud)

以上,我们提供您的单点的集合,xydata论证,并指定我们想nn2找到2个最接近点每个点(因为最近的点是焦点本身).该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
Run Code Online (Sandbox Code Playgroud)

要获得最近点的坐标矩阵,您可以使用:

xy[closest[, 2], ]
Run Code Online (Sandbox Code Playgroud)

默认情况下nn2使用kd树 - 您可能想要试验treetype='bd'.