Как мне получить время в пути из Google Maps API?
Я использую следующую функцию, чтобы оценить время (в часах), чтобы проехать определенное расстояние, предполагая, что средняя скорость составляет 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 км / ч и, таким образом, получить лучшую оценку? Прочитав документацию, я попытался переключить "расстояние" на "продолжительность", но это не сработало. Я, вероятно, упускаю что-то простое, но я довольно новичок в работе с API, и я поражен всем этим текстом. Цени любую помощь!
2 ответа
Вы ищете это:
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 Maps.
Чтобы ответить на ваш вопрос, я думаю, что проще (даже рекомендуется) использовать 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"
Я собираюсь добавить свой пакет, который также запрашивает API Google для вас
(Вам нужен действующий ключ API Google, чтобы использовать его)
library(googleway)
api_key <- "your_api_key_here"
google_distance(origins = "Paris",
destinations = "London",
key = api_key)
# $destination_addresses
# [1] "London, UK"
#
# $origin_addresses
# [1] "Paris, France"
#
# $rows
# elements
# 1 456 km, 456230, 5 hours 31 mins, 19858, 6 hours 12 mins, 22311, OK
#
# $status
# [1] "OK"