首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多路行车距离

多路行车距离
EN

Stack Overflow用户
提问于 2020-09-16 20:40:12
回答 1查看 187关注 0票数 3

我试图使用带有route()函数的ggmap包从由多对坐标组成的tibble获取驱动距离和时间。

数据:

代码语言:javascript
复制
locations <- tibble(start_loc = c("44.025135, -69.892204", "44.0175617, -70.0108097"), end_loc = "43.9195136, -69.9665309")

我想要结束的是附加了两个列的locations tibble,一个是旅行时间,另一个是距离。为此,我可能需要遍历locations中的每一行,通过route()函数传递每一对坐标。问题是来自route()的输出为路由中的每一步生成一行。

到目前为止我所拥有的是:

代码语言:javascript
复制
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重新定位到‘route_output’上。总之,我真的被堵住了。

关于该怎么做的建议?如果ggmap包对此没有好处,我还应该使用什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 16:52:59

试一试如下:

代码语言:javascript
复制
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

你会得到:

代码语言:javascript
复制
                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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63927641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档