【发布时间】:2021-04-06 05:57:48
【问题描述】:
我创建了 2 个带有 geom 列(POINT 类型)的数据框。现在我想计算每对点之间的距离,例如从第一个 df 中的第一行指向第二个 df 中的第一行等。这是我的数据框:
df1 <- table %>%
st_as_sf(coords = c("lonCust","latCust"), crs = 4326)
df2 <- table %>%
st_as_sf(coords = c("lonApp","latApp"), crs = 4326)
我用st_distance:
distance <- st_distance(df1$geometry,df2$geometry)
但我得到了一个矩阵,其中计算了两个 geom 列中每一对的距离:
[,1] [,2] [,3] [,4] [,5] ...
[1,] 139.7924 7735.5718 15225.02995 558.104089 1016.58121
[2,] 8503.0544 755.2915 8764.75396 7957.289600 8788.02800
[3,] 15306.5855 9336.9008 18.96914 14876.589918 15929.51643
[4,] 548.3045 7232.0164 14898.70637 8.094068 1078.38236
[5,] 911.5635 8084.3086 15993.36365 1127.730022 46.97799
.
.
我希望在一列中计算距离,仅在相应的几何行之间:
[,1]
[1,] 139.7924
[2,] 8503.0544
[3,] 15306.5855
[4,] 548.3045
[5,] 911.5635
.
.
我读过geosphere 包,但sf 有非常好的st_distance 功能来测量距离,我想用它。最重要的是,我需要先加入这些数据框吗?来自dplyr 的简单inner_join 不允许加入两个空间数据帧,另一方面st_join 对我来说不是一个选项,因为我不想通过几何加入(两个数据帧中的几何是完全不同)
【问题讨论】:
-
你已经接近了。
st_distance(df1$geometry, df2$geometry, by_element = TRUE) -
谢谢!顺便说一句,我有大约 25000 行,计算速度很慢,我认为最好在服务器端计算距离
-
library(geodist)对于这类事情可能更快,它可以直接对data.frames进行操作。查看geodist()和/或geodist_vec(),并设置paired = TRUE。
标签: r geospatial sf