用R求最近的X,Y坐标



我刚刚开始学习R,但希望项目尽快完成。这很简单:我有一个X列和一个Y列,由X坐标和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

这里有一种方法,使用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]]

上面,我们向data参数提供您的单一点集xy,并指定我们希望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使用kd树-您可能想尝试treetype='bd'

相关内容

  • 没有找到相关文章

最新更新