将经度和纬度参数从R传递到Google地图中的读取URL并提取路径

时间:2013-07-02 13:28:18

标签: r google-maps

我尝试使用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&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”。

是否有人建议如何规避问题?

1 个答案:

答案 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,"&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