r-邮政编码最近的邻国(德国)



我有两个德国邮政编码列表(长度不同(。我需要为第一个数据帧中相对于第二个列表的每个数据帧找到最接近的邮政编码邻居。我也有经度和纬度的信息。如果能看看哪个plz最接近,那就太好了,但我的主要兴趣是距离测量(目前我对任何距离测量都很灵活(。我可以计算所有可能的组合(2000000(,并通过geosphere软件包或谷歌地图DirectionFinder计算它们的距离(并选择最小的距离(。我想我需要申请某种形式的https://en.wikipedia.org/wiki/Nearest_neighbor_search大约有10000个始发地和200个目的地。我发现RANN包和nn2()带有选项searchtype = priority而不是searchtype = radius(我不需要(。

plz       city             lon             lat
1 69115 Heidelberg 8.6934499740601 49.406078338623
2 44137   Dortmund       7.4582135      51.5143952
3 70178  Stuttgart         9.17115        48.77426
4 68159   Mannheim 8.4696736826668 49.491940248873
5 68167   Mannheim       8.4971965      49.5038859
plz            city       lon        lat
1 76530     Baden-Baden 8.2423068 48.7438178
2 89081             Ulm  9.961367 48.4253282
3 69120      Heidelberg 8.6752461 49.4225417
4 72076        Tübingen 9.0406256 48.5312051
5 74523 Schwäbisch-Hall 9.7424451 49.1247435

我会使用FNN包,根据经度和纬度的欧几里得距离,为每个plz找到最近的邻居。例如:

library(data.table)
library(FNN)
df1 <- fread("plz       city             lon             lat
69115 Heidelberg 8.6934499740601 49.406078338623
44137   Dortmund       7.4582135      51.5143952
70178  Stuttgart         9.17115        48.77426
68159   Mannheim 8.4696736826668 49.491940248873
68167   Mannheim       8.4971965      49.5038859")
df2 <- fread("plz            city       lon        lat
76530     Baden-Baden 8.2423068 48.7438178
89081             Ulm  9.961367 48.4253282
69120      Heidelberg 8.6752461 49.4225417
72076        Tübingen 9.0406256 48.5312051
74523 Schwäbisch-Hall 9.7424451 49.1247435")
nearest_neighbours <- get.knnx(df1[,.(lon,lat)],df2[,.(lon,lat)],k=1)

nearest_neighbours对象包括两个列表,$nn.index给出第二表中最近邻居的索引;以及CCD_ 11给出到第二表中最近邻居的欧几里得距离。

$nn.index
[,1]
[1,]    4
[2,]    3
[3,]    1
[4,]    3
[5,]    3
$nn.dist
[,1]
[1,] 0.78190978
[2,] 0.86382655
[3,] 0.02454431
[4,] 0.27588458
[5,] 0.67023636

最新更新