Как отобразить направления карты Google с учетом информации о широте и долготе в r
У меня есть информация о широте и логитизме для нескольких мест. Вот образец:
lat<-c(17.48693,17.49222,17.51965,17.49359,17.49284,17.47077)
long<-c(78.38945,78.39643,78.37835,78.40079,78.40686,78.35874)
Я хочу построить эти местоположения в некотором порядке (скажем, лат-длинная комбинация первых элементов в вышеупомянутых векторах будет отправной точкой, и мне нужно путешествовать в том же порядке до последнего местоположения) с указаниями карты Google в R. После некоторого поиска Я обнаружил, что есть API-интерфейс карты Google, из которого я могу получить скриншот карты Google для указанных местоположений, и поверх него нам нужно нанести линии, чтобы соединить их. Но что мне нужно, это схема проезда карты Google, чтобы соединить местоположения (не линии ggplot). Пожалуйста помоги.
2 ответа
Это в основном сводится к созданию route_df
а затем нанесение на график результатов как geom_path
, Например, для одного маршрута вы можете сделать что-то вроде этого:
library(ggmap)
route_df <- route(from = "Hyderabad, Telangana 500085, India",
to = "Kukatpally, Hyderabad, Telangana 500072, India",
structure = "route")
my_map <- get_map("Hyderabad, Telangana 500085, India", zoom = 13)
ggmap(my_map) +
geom_path(aes(x = lon, y = lat), color = "red", size = 1.5,
data = route_df, lineend = "round")
Таким образом, вы могли бы, вероятно, подойти к этому, генерируя каждый из маршрутов и rbind
все результаты в одном большом route_df
и нанесение на график окончательных результатов. Другим легче помочь вам, если вы попытаетесь показать, где (с кодом) вы застряли. Вы можете отредактировать свой оригинальный вопрос или, возможно, отправить новый после того, как продемонстрируете, что пытались.
Этот ТАК пост с этим ответом должен оказаться полезным.
Я написал пакет google way для доступа к API карт Google с действующим ключом API.
Вы можете использовать функцию google_directions()
чтобы получить указания, в том числе путевые точки, шаги маршрута, ноги, расстояния, время и т. д.
Например
library(googleway)
## using a valid Google Maps API key
key <- "your_api_key"
## Using the first and last coordinates as the origin/destination
origin <- c(17.48693, 78.38945)
destination <- c(17.47077, 78.35874)
## and the coordinates in between as waypoints
waypoints <- list(via = c(17.49222, 78.39643),
via = c(17.51965, 78.37835),
via = c(17.49359, 78.40079),
via = c(17.49284, 78.40686))
## use 'stop' in place of 'via' for stopovers
## get the directions from Google Maps API
res <- google_directions(origin = origin,
destination = destination,
waypoints = waypoints,
key = key) ## include simplify = F to return data as JSON
Результатом являются все данные, полученные из Google Maps
## see the structure
# str(res)
Строка, которую вы видите на Картах Google, содержится в
res$routes$overview_polyline$points
# [1] "slviBqmm}MSLiA{B^wAj@sB}Ac@...
Который является закодированной полилинией.
Чтобы получить широту / долготу, используйте функцию decode_pl()
df_polyline <- decode_pl(res$routes$overview_polyline$points)
head(df_polyline)
# lat lon
# 1 17.48698 78.38953
# 2 17.48708 78.38946
# 3 17.48745 78.39008
# 4 17.48729 78.39052
# 5 17.48707 78.39110
# 6 17.48754 78.39128
Что, конечно, вы можете построить сюжет по своему желанию
library(leaflet)
leaflet() %>%
addTiles() %>%
addPolylines(data = df_polyline, lat = ~lat, lng = ~lon)
Изменить 2017-07-21
По состоянию на googleway
2.0 вы можете построить полилинию на карте Google, используя декодированные координаты, как и раньше, или напрямую используя полилинию
google_map(key = key) %>%
add_polylines(data = data.frame(polyline = res$routes$overview_polyline$points),
polyline = "polyline")