Рисование автомобильных трасс в R - PullRequest
1 голос
/ 16 января 2020

Я следую ответу, предоставленному в этом вопросе: Рисуем путь путешествия, используя буклет в R

И в надежде повторить ту же идею: рисуем карту, показывающую маршруты движения между городами.

Для справки, когда я просто копирую и вставляю код из ответа SymbolixAu ... отлично работает! (Простая карта, googe_map, а не «блестящий» код).

Другими словами, я думаю, что мой ключ API настроен правильно. Но по какой-то причине, когда я пытаюсь использовать один и тот же код в моих данных о местоположении, он не работает. Вот мой код:

df_locations<-structure(list(origin = c("WARWICK", "EAST PROVIDENCE", "WARREN", 
                      "CENTERDALE", "CENTRAL FALLS", "DAVISVILLE", "NORTH PROVIDENCE", 
                      "EAST PROVIDENCE", "PROVIDENCE", "CHEPACHET"), destination = c("CENTERDALE", "EAST PROVIDENCE", "BRISTOL", "JOHNSTON", "CRANSTON", "WARWICK","NORTH PROVIDENCE", "EAST PROVIDENCE", "WARREN", "CHEPACHET")), class = "data.frame", row.names = c(NA, -10L))


## loop over each pair of locations, and extract the polyline from the result
lst_directions <- apply(df_locations, 1, function(x){
res <- google_directions(
key = api_key
, origin = x[['origin']]
, destination = x[['destination']]
)

df_result <- data.frame(
origin = x[['origin']]
, destination = x[['destination']]
, route = res$routes$overview_polyline$points
)
return(df_result)
})

## convert the results to a data.frame
df_directions <- do.call(rbind, lst_directions)

## plot the map
google_map(key = map_key ) %>%
add_polylines(data = df_directions, polyline = "route")

Право, когда я получаю "применить" l oop, я получаю ошибку "Ошибка в data.frame (origin = x [[" origin "]], destination = x [["destination"]],: аргументы подразумевают различное количество строк: 1, 0 "

Когда я повторно запускаю точно такой же код, но просто использую примерный фрейм данных:

df_locations <- data.frame(
origin = c("Melbourne, Australia", "Sydney, Australia")
, destination = c("Sydney, Australia", "Brisbane, Australia")
, stringsAsFactors = F
)

Это работает отлично. Любые идеи? Мне было интересно, если это так, потому что в моих местах есть только названия городов (без штатов или стран), поэтому я настроил пример данных, чтобы сказать только «Мельбурн» или «Сидней», все еще работал.

1 Ответ

2 голосов
/ 17 января 2020

Для чего это стоит, я просто запустил ваш код без каких-либо проблем. Таким образом, @ Dave2e подозревает, что они могут что-то не так с вашими вызовами API, либо по тайм-ауту, либо по какой-то причине Google не возвращает результат. Поэтому вам придется продолжать отладку / печать результатов, чтобы убедиться, что это так.

df_locations<-structure(list(origin = c("WARWICK", "EAST PROVIDENCE", "WARREN", 
                                        "CENTERDALE", "CENTRAL FALLS", "DAVISVILLE", "NORTH PROVIDENCE", 
                                        "EAST PROVIDENCE", "PROVIDENCE", "CHEPACHET"), destination = c("CENTERDALE", "EAST PROVIDENCE", "BRISTOL", "JOHNSTON", "CRANSTON", "WARWICK","NORTH PROVIDENCE", "EAST PROVIDENCE", "WARREN", "CHEPACHET")), class = "data.frame", row.names = c(NA, -10L))

library(googleway)

set_key("MYKEY")


## loop over each pair of locations, and extract the polyline from the result
lst_directions <- apply(df_locations, 1, function(x){
  res <- google_directions(
    origin = x[['origin']]
    , destination = x[['destination']]
  )

  df_result <- data.frame(
    origin = x[['origin']]
    , destination = x[['destination']]
    , route = res$routes$overview_polyline$points
  )
  return(df_result)
})

df_directions <- do.call(rbind, lst_directions)

## plot the map
google_map() %>%
  add_polylines(data = df_directions, polyline = "route")

enter image description here

...