xml - 我如何从 Google Maps API 获取行车时间?

标签 xml r google-maps-api-3 driving-distance

我使用以下函数来估计行驶一定距离的时间(以小时为单位),假设平均速度为 65 公里/小时:

distHoras <- function(origin, destination){
  xml.url <- paste0('http://maps.googleapis.com/maps/api/distancematrix/xml?origins=',
                    origin, '&destinations=', destination, '&mode=driving&sensor=false')
  xmlfile <- xmlParse(getURL(xml.url))
  dist <- xmlValue(xmlChildren(xpathApply(xmlfile,"//distance")[[1]])$value)
  distance <- as.numeric(sub(" km", "", dist))
  time <- (distance / 1000) / 65
  return(time)
}

我怎样才能调整这个函数,让它直接产生时间,这样我就不需要做出这个 65 公里/小时的假设,从而得到更好的估计?看完the documentation ,我尝试将“距离”与“持续时间”切换,但没有用。我可能遗漏了一些简单的东西,但我对使用 API 还很陌生,并且对所有这些文本感到不知所措。感谢任何帮助!

最佳答案

你在找这个吗:

library(ggmap)
from <- 'Paris'
to <- 'London'
mapdist(from,to,mode='driving')
 from     to      m      km    miles seconds  minutes    hours
1 Paris London 454416 454.416 282.3741   18283 304.7167 5.078611

mapdist 使用 Google map 计算 map 距离。

为了回答您的问题,我认为使用 json 版本的 google API 比使用 XML 版本更容易(甚至推荐)。

这里是一个使用 RJSONIO 的快速版本。即使我推荐你使用上面的功能。无需进行任何转换,因为结果已经以小时为单位。

library(RJSONIO)
distHoras <- function(origin, destinations){

origin <- gsub(",", "", origin)
origin <- gsub(" ", "+", origin)
origin <- paste("origins=", origin, sep = "")

destinations <- gsub(",", "", destinations)
destinations <- gsub(" ", "+", destinations)
destinations <- paste("destinations=", paste(destinations, 
                                             collapse = "|"), sep = "")


mode4url <- paste("mode=", 'driving', sep = "")
lang4url <- paste("language=", 'en-EN', sep = "")
sensor4url <- paste("sensor=", tolower(as.character(FALSE)), 
                   sep = "")
posturl <- paste(origin, destinations, mode4url, sensor4url, 
                 sep = "&")
url_string <- paste("http://maps.googleapis.com/maps/api/distancematrix/json?", 
                    posturl, sep = "")
url_string <- URLencode(url_string)
connect <- url(url_string)
tree <- fromJSON(paste(readLines(connect), collapse = ""))
close(connect)
rapply(tree$rows,I)
}

现在你测试它:

distHoras('Paris','London')
 elements.distance.text elements.distance.value  elements.duration.text 
               "454 km"                "454416"        "5 hours 5 mins" 
elements.duration.value         elements.status 
                "18283"                    "OK" 

关于xml - 我如何从 Google Maps API 获取行车时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282124/

相关文章:

c# - 使用 < 和 > 解析 XML

r - 为什么我的包中的数据是 "serialized"而不是在最新版本的 R 中读取?

javascript - Google 圆圈可视化未出现

javascript - 从 php Controller 动态添加标记

c# - 反序列化未知类型

xml - XSLT 删除节点但保留内容

r - 如何使用ggplot在直方图上叠加任意参数分布?

r - 在 R 中使用 Leaflet 时如何在 addCircleMarkers() 中指定半径单位

c#-4.0 - 如何计算谷歌地图圆半径js到C#

jquery - 使用 jQuery 解析 XML