计算R中多个坐标的距离
Calculating distance of multiple coordinates in R
正如标题所写,我想使用包 osrm 计算从我家乡的所有加油站到这附近的两条高速公路的距离。
stations_ms 包含加油站的纬度和经度,highway_ms.df 包含高速公路入口的纬度和经度。
仅计算数据集中一行的距离没有问题,但我无法创建一个 loop/function,它对每一行都进行计算。
这是我的代码:
route4 <- osrmRoute(src = c(stations_ms$longitude[1], stations_ms$latitude[1]),
dst = highway_ms.df[1,],
overview = "FALSE")
for (i in 1:nrow(stations_ms)) {
route[i] <- osrmRoute(src = c(stations_ms$longitude[i], stations_ms$latitude[i]),
dst = highway_ms.df[1,],
overwiew = "FALSE")
}
```
Maybe someone can help me :)
这是一个可能有用的可行示例。
osrmRoute
中的overview
有以下选项:
"full", "simplified" or FALSE. Use "full" to return the detailed
geometry, use "simplified" to return a simplified geometry, use FALSE
to return only time and distance.
如果您只需要时间和距离,使用 FALSE
应该没问题。我的评论是关于拼写的(有一个“w”而不是一个“v”)。
我编了一些示例数据:
my_points <- data.frame(
id = 1:3,
longitude = c(13.4, 13.5, 13.3),
latitude = c(52.4, 52.5, 52.3)
)
并想查找到柏林一家药店的距离(使用 osrm
包附带的 apotheke.df
)。你可以这样做:
library(osrm)
route <- list()
for (i in 1:nrow(my_points)) {
route[[i]] <- osrmRoute(src = c(my_points$longitude[i], my_points$latitude[i]),
dst = apotheke.df[1,],
overview = FALSE)
}
这从一个名为 route
的空列表开始。然后,我们用时间和持续时间填充每个列表元素。最终结果如下表:
R> route
[[1]]
duration distance
20.56 11.77
[[2]]
duration distance
17.38 7.63
[[3]]
duration distance
33.12 27.45
其中可以转换为矩阵或者数据框(本例中,我做了一个矩阵):
R> do.call(rbind, route)
duration distance
[1,] 20.56 11.77
[2,] 17.38 7.63
[3,] 33.12 27.45
正如标题所写,我想使用包 osrm 计算从我家乡的所有加油站到这附近的两条高速公路的距离。
stations_ms 包含加油站的纬度和经度,highway_ms.df 包含高速公路入口的纬度和经度。
仅计算数据集中一行的距离没有问题,但我无法创建一个 loop/function,它对每一行都进行计算。
这是我的代码:
route4 <- osrmRoute(src = c(stations_ms$longitude[1], stations_ms$latitude[1]),
dst = highway_ms.df[1,],
overview = "FALSE")
for (i in 1:nrow(stations_ms)) {
route[i] <- osrmRoute(src = c(stations_ms$longitude[i], stations_ms$latitude[i]),
dst = highway_ms.df[1,],
overwiew = "FALSE")
}
```
Maybe someone can help me :)
这是一个可能有用的可行示例。
osrmRoute
中的overview
有以下选项:
"full", "simplified" or FALSE. Use "full" to return the detailed geometry, use "simplified" to return a simplified geometry, use FALSE to return only time and distance.
如果您只需要时间和距离,使用 FALSE
应该没问题。我的评论是关于拼写的(有一个“w”而不是一个“v”)。
我编了一些示例数据:
my_points <- data.frame(
id = 1:3,
longitude = c(13.4, 13.5, 13.3),
latitude = c(52.4, 52.5, 52.3)
)
并想查找到柏林一家药店的距离(使用 osrm
包附带的 apotheke.df
)。你可以这样做:
library(osrm)
route <- list()
for (i in 1:nrow(my_points)) {
route[[i]] <- osrmRoute(src = c(my_points$longitude[i], my_points$latitude[i]),
dst = apotheke.df[1,],
overview = FALSE)
}
这从一个名为 route
的空列表开始。然后,我们用时间和持续时间填充每个列表元素。最终结果如下表:
R> route
[[1]]
duration distance
20.56 11.77
[[2]]
duration distance
17.38 7.63
[[3]]
duration distance
33.12 27.45
其中可以转换为矩阵或者数据框(本例中,我做了一个矩阵):
R> do.call(rbind, route)
duration distance
[1,] 20.56 11.77
[2,] 17.38 7.63
[3,] 33.12 27.45