计算R中多个坐标的距离

问题描述

正如标题中所写,我想使用包 osrm 计算从我家乡的所有加油站到这里附近两条高速公路入口的距离。

stations_ms 包含加油站的纬度和经度,highway_ms.df 包含高速公路入口的纬度和经度。

仅计算数据集中一行的距离没有问题,但我无法创建一个循环/函数来为每一行执行此操作。

这是我的代码

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]),overwiew = "FALSE")
}
```

Maybe someone can help me :)

解决方法

这里有一个可行的例子,可能会有所帮助。

overview 中的 osrmRoute 有以下选项:

“完整”、“简化”或“假”。使用“full”返回详细信息 几何,使用“简化”返回简化的几何,使用 FALSE 只返回时间和距离。

如果您只需要时间和距离,使用 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)
)

并且想要查找到柏林药店的距离(使用 apotheke.df 套餐附带的 osrm)。你可以这样做:

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