Jos*_*cha 5 r geospatial latitude-longitude dplyr geosphere
我想创建多个坐标之间距离的“矩阵”。最好使用 dplyr/geosphere。我已经看到 geosphere 包提供了这个。我设法创建了两个向量之间的距离,但我很难创建完整的矩阵。
这是具有多个坐标的示例表。
df <- data.frame(latitude = c(49.48609,-8.14671,11.28625),
longitude = c(8.463678,143.05793,-11.18285))
latitude longitude
1 49.48609 8.463678
2 -8.14671 143.057930
3 11.28625 -11.182850
Run Code Online (Sandbox Code Playgroud)
这是我正在寻找的输出:
latitude longitude distance-latlon1 distance-latlon2 distance-latlon3
1 49.48609 8.463678 NA *latlon2><latlon1 *latlon3><latlon1
2 -8.14671 143.057930 *latlon1><latlon2 NA *latlon3><latlon2
3 11.28625 -11.182850 *latlon1><latlon3 *latlon2><latlon3 NA
Run Code Online (Sandbox Code Playgroud)
我尝试使用 geosphere,但我只找到了一种计算两列之间距离的方法(在此代码段中结果为 0)。
library(geosphere)
df$distance <- distVincentyEllipsoid(df[,c('longitude','latitude')],
df[,c('longitude','latitude')])
Run Code Online (Sandbox Code Playgroud)
您需要-packagedistm的功能geosphere。和:
# create a distance matrix
m <- distm(df[2:1], df[2:1], fun = distVincentyEllipsoid)
# replace the diagonal with NA
diag(m) <- NA
# make column names for the distance matrix
colnames(m) <- paste0('r',1:nrow(df))
# bind the distance matrix to the dataframe
cbind.data.frame(df, m)
Run Code Online (Sandbox Code Playgroud)
你得到:
Run Code Online (Sandbox Code Playgroud)latitude longitude r1 r2 r3 1 49.48609 8.463678 NA 13792423 4606658 2 -8.14671 143.057930 13792423 NA 17189185 3 11.28625 -11.182850 4606658 17189185 NA
| 归档时间: |
|
| 查看次数: |
2511 次 |
| 最近记录: |