多条路线的行驶距离

Posted

技术标签:

【中文标题】多条路线的行驶距离【英文标题】:Driving Distance with Multiple Routes 【发布时间】:2021-01-03 17:36:17 【问题描述】:

我正在尝试使用带有 route() 函数的 ggmap 包从包含多对坐标的小标题中获取行驶距离和时间。

数据:

locations <- tibble(start_loc = c("44.025135, -69.892204", "44.0175617, -70.0108097"), end_loc = "43.9195136, -69.9665309")

我想要结束的是locations tibble 附加两列,total 旅行时间和total 距离。为此,我可能需要遍历locations 中的每一行,将每对坐标传递给route() 函数。问题是route() 的输出为路径中的每个步骤生成一行。

到目前为止我所拥有的:

library(ggmap)
library(dplyr)

locations

# A tibble: 2 x 2
#  start_loc               end_loc                
# <chr>                   <chr>                  
#1 44.025135, -69.892204   43.9195136, -69.9665309
#2 44.0175617, -70.0108097 43.9195136, -69.9665309

for(i in 1:nrow(locations)) 
  route_output <- route(from = locations$start_loc[i], to = locations$end_loc[i], 
                        mode = c("driving"), output = c("simple"), units ="mi", structure = "legs")


route_output
# A tibble: 6 x 11
#      m    km  miles seconds minutes   hours start_lon start_lat end_lon end_lat route
#  <int> <dbl>  <dbl>   <int>   <dbl>   <dbl>     <dbl>     <dbl>   <dbl>   <dbl> <chr>
#1  2608 2.61  1.62       184   3.07  0.0511      -70.0      44.0   -70.0    44.0 A    
#2   524 0.524 0.326       32   0.533 0.00889     -70.0      44.0   -70.0    44.0 A    
#3  3106 3.11  1.93       232   3.87  0.0644      -70.0      44.0   -70.1    44.0 A    
#4  9516 9.52  5.91       528   8.8   0.147       -70.1      44.0   -70.0    43.9 A    
#5    88 0.088 0.0547       9   0.15  0.0025      -70.0      43.9   -70.0    43.9 A    
#6  1960 1.96  1.22       166   2.77  0.0461      -70.0      43.9   -70.0    43.9 A 

这显示的是仅最后一个start_loc end_loc 对的路线的每一步。所以它没有像我想要的那样循环,我也没有得到摘要信息。我什至没有办法将route_output tibble 重新定位到 `locations tibble。简而言之,我真的被卡住了。

关于如何做的建议?如果 ggmap 包不适合这个,我还应该使用什么?

【问题讨论】:

【参考方案1】:

尝试类似:

library(ggmap)

locations <- data.frame(start_loc = c("44.025135, -69.892204", "44.0175617, -70.0108097"), end_loc = "43.9195136, -69.9665309")

trip_dist_time <- function(from, to, mode) 
    
    results <- ggmap::route(from, to, mode)
    
    data.frame(time_minutes = sum(results$minutes),
               distance_km = sum(results$km),
               mode = mode)


# Select a travel mode from "driving", "walking", "bicycling", "transit"
travel_mode <- "driving"

results <- mapply(trip_dist_time, locations$start_loc, locations$end_loc, travel_mode, SIMPLIFY = FALSE)
results <- Reduce(rbind, results)
results <- cbind(locations, results)
results

你会得到:

                start_loc                 end_loc time_minutes distance_km    mode
1   44.025135, -69.892204 43.9195136, -69.9665309        15.95      16.476 driving
2 44.0175617, -70.0108097 43.9195136, -69.9665309        19.40      17.802 driving

【讨论】:

以上是关于多条路线的行驶距离的主要内容,如果未能解决你的问题,请参考以下文章

location Points:到指定路线的距离

如何通过公交获得覆盖距离

确定行进路径 mkmapview swift 上的距离

到最近的火车站的距离

gps行驶路程怎计算的知道的才说

Android java从sqlite计算距离许多坐标[重复]