我尝试使用Google地图和R来计算出发地和目的地之间每次转机的行程时间。
搜索指南可在以下网址找到:https://developers.google.com/maps/documentation/directions/#TravelModes
当我将原点和目的地的纬度和经度作为文字提交时,一切正常。
例如,以下R代码正确执行,我们获取距离和行程持续时间(搜索输出为JSON格式,并转换为带有fromJSON的R对象)
library(rjson)
library(gooJSON)
route <- url('http://maps.googleapis.com/maps/api/directions/json? origin=51.13854,4.384575&destination=51.13156,4.387118®ion=be&sensor=false&mode=transit&departure_time=1372665319')
route_file <- file("route_file.json")
L <- readLines(route,-1)
writeLines(L, route_file)
close(route)
routesR_zone1_to_zone20 <- fromJSON( file = route_file )
routesR_zone1_to_zone20$routes[[1]][[3]][[1]]$distance$value/1000
routesR_zone1_to_zone20$routes[[1]][[3]][[1]]$duration$value/60
然而,我真正感兴趣的是对数千个始发地 - 目的地对重复此操作。然后,起源和目的地的经度和纬度成为变量。
例如:
> lat_or
[1] 51.13854
> long_or
[1] 4.384575
> lat_des
[1] 51.13156
> long_des
[1] 4.387118
> route <- url('http://maps.googleapis.com/maps/api/directions/json? origin=lat_or,long_or&destination=lat_des,long_des®ion=be&sensor=false&mode=transit&departure_time=1372665319')
> route_file <- file("route_file.json")
> L <- readLines(route,-1)
> writeLines(L, route_file)
> close(route)
> routesR_zone1_to_zone20 <- fromJSON( file = route_file )
> routesR_zone1_to_zone20
$routes
list()
$status
[1] "NOT_FOUND"
因此,虽然坐标与前一个例子中的相同,但这次没有找到路线。
我认为问题在于,当访问url时,lat_or等没有在相应的数值中“翻译”,并且Google试图计算文字“lat_or,long_or”和“lat_des”之间的路径, long_des”。
是否有人建议如何规避问题?
答案 0 :(得分:0)
标准文字处理:
lat_or <- 51.13854
long_or <- 4.384575
lat_des <- 51.13156
long_des <- 4.387118
route <- url(paste0("http://maps.googleapis.com/maps/api/directions/json?origin=",lat_or,",",long_or,"&destination=",lat_des,",",long_des,"®ion=be&sensor=false&mode=transit&departure_time=1372665319") )
route_file <- file("route_file.json")
L <- readLines(route,-1)
writeLines(L, route_file)
close(route)
routesR_zone1_to_zone20 <- fromJSON( file = route_file )
routesR_zone1_to_zone20$routes[[1]][[3]][[1]]$distance$value/1000
#[1] 1.161
routesR_zone1_to_zone20$routes[[1]][[3]][[1]]$duration$value/60
#[1] 11.73333