计算不同点之间的距离并添加距离最近的列和点

时间:2021-06-11 18:44:43

标签: r

我有每个公交车站代码的以下数据框,哪些线路在那里停靠以及每个站点的坐标:

code     line     latitude      longitude
C0002     10     -31.46496     -64.07821
C0002     12     -31.46496     -64.07821
C0002     16     -31.46496     -64.07821
C0002     19     -31.46496     -64.07821
C0003     10     -31.46497     -64.08067
C0003     12     -31.46497     -64.08067
C0003     18     -31.46497     -64.08067
C0004     10     -31.46495     -64.08214
C0004     12     -31.46495     -64.08214
C0004     16     -31.46495     -64.08214
C0004     18     -31.46495     -64.08214
C0005     10     -31.46497     -64.08417
C0005     16     -31.46497     -64.08417
C0005     18     -31.46497     -64.08417
C0006     12     -31.46482     -64.08665
C0006     16     -31.46482     -64.08665
C0006     18     -31.46482     -64.08665
C0006     19     -31.46482     -64.08665

我已经使用以下代码将此数据帧转换为 sf 对象:

df <- st_as_sf(df, coords = c("latitude", "longitude"), crs = 4326)
df <- st_transform(df, crs="+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")

对于数据框的每一行(即每行的每个代码),我想执行以下操作:
1-) 使用 st_distance() 函数来确定哪个是同一条线路的最近站点
2-) 将代码和同一行最近停靠点的距离添加到两个新列中。但考虑到这一点:

<块引用>

a-) 如果最近的停靠点与我之前已经计算的相同,则计算 第二个最近。例如:对于 10 号线,如果离 C0002 站点最近的站点是 C0003 停止,然后在第一行的“closest_stop”列中写入 C0003 并写入 >the “distance_to_closest”列中 C0002 和 C0003 之间的距离(以米为单位)。但是 > 那么, 如果离 C0003 停靠点最近的停靠点也恰好是 C0002 停靠点,则在 相应的行(第 5 行)不写 C0002,而是第二个最接近 C0003 的停止,比如 >for 示例 C0004,并在“distance_to_closest”列中写入距离(以 mts 为单位) C0003 和 C0004 之间。
b-) 当我们到达最后一站时(我会知道,因为所有最近的站 停止将已经被计算)。我想要“closes_stop”>列中的“结束”这个词 以及“distance_to_closest”列中方便的那个:NA, 9999999, "End", 随便。

因此,我需要一个如下所示的数据框:

code     line     latitude      longitude     closest_stop        distance_to_closest
C0002     10     -31.46496     -64.07821         C0003                xxxx (in mts)
C0002     12     -31.46496     -64.07821         C0003                xxxx (in mts)
C0002     16     -31.46496     -64.07821         C0004                xxxx (in mts)
C0002     19     -31.46496     -64.07821         C0006                xxxx (in mts)
C0003     10     -31.46497     -64.08067         C0004                xxxx (in mts)
C0003     12     -31.46497     -64.08067         C0004                xxxx (in mts)
C0003     18     -31.46497     -64.08067         C0004                xxxx (in mts)
C0004     10     -31.46495     -64.08214         C0005                xxxx (in mts)
C0004     12     -31.46495     -64.08214         C0006                xxxx (in mts)
C0004     16     -31.46495     -64.08214         C0006                xxxx (in mts)
C0004     18     -31.46495     -64.08214         C0005                xxxx (in mts)
C0005     10     -31.46497     -64.08417          End                      NA
C0005     16     -31.46497     -64.08417         C0006                xxxx (in mts)
C0005     18     -31.46497     -64.08417         C0006                xxxx (in mts)
C0006     12     -31.46482     -64.08665          End                      NA
C0006     16     -31.46482     -64.08665          End                      NA
C0006     18     -31.46482     -64.08665          End                      NA
C0006     19     -31.46482     -64.08665          End                      NA

0 个答案:

没有答案