gpt4 book ai didi

r - 查找从一个数据集到第二个数据集的最近点(纬度/经度)

转载 作者:行者123 更新时间:2023-12-04 10:16:01 25 4
gpt4 key购买 nike

我有两个数据集 A 和 B,它们给出了英国不同点的位置,如下所示:

A = data.frame(reference = c(C, D, E), latitude = c(55.32043, 55.59062, 55.60859), longitude = c(-2.3954998, -2.0650243, -2.0650542))

B = data.frame(reference = c(C, D, E), latitude = c(55.15858, 55.60859, 55.59062), longitude = c(-2.4252843, -2.0650542, -2.0650243))
A 有 400 行,B 有 1800 行。
对于 A 中的所有行,我想找到 A 中的一个点与 B 中三个最近点中的每一个之间的最短公里距离,以及 B 中这些点的经纬度的引用和坐标。
我尝试使用这篇文章
R - Finding closest neighboring point and number of neighbors within a given radius, coordinates lat-long
但是,即使我遵循所有说明,主要使用命令 distm来自包装 geosphere , 距离的单位不可能是公里。我看不到代码中要更改什么,尤其是因为我对 geo 完全不熟悉包。

最佳答案

我在下面添加了一个使用 spatialrisk 的解决方案包裹。此包中的关键函数是用 C++ (Rcpp) 编写的,因此速度非常快。
函数spatialrisk::points_in_circle从中心点计算半径内的观测值。请注意,距离是使用 Haversine 公式计算的。由于输出的每个元素都是一个数据框,purrr::map_dfr用于将它们行绑定(bind)在一起:

purrr::map2_dfr(A$latitude, A$longitude, 
~spatialrisk::points_in_circle(B, .y, .x,
lon = longitude,
lat = latitude,
radius = 1e6)[1:3,],
.id = "id_A")

id_A reference latitude longitude distance_m
1 1 C 55.15858 -2.425284 18115.958
2 1 E 55.59062 -2.065024 36603.447
3 1 D 55.60859 -2.065054 38260.562
4 2 E 55.59062 -2.065024 0.000
5 2 D 55.60859 -2.065054 2000.412
6 2 C 55.15858 -2.425284 53219.597
7 3 D 55.60859 -2.065054 0.000
8 3 E 55.59062 -2.065024 2000.412
9 3 C 55.15858 -2.425284 55031.092

关于r - 查找从一个数据集到第二个数据集的最近点(纬度/经度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57525670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com