3

我尝试使用 Google Maps 和 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&region=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&region=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”之间的路线。

有没有人有关于如何规避问题的建议?

4

1 回答 1

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,"&region=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
于 2013-07-02T15:01:24.377 回答