如何在 r 中显示给定经纬度信息的 google 地图方向
How to display google map directions given latitude and longitude information in 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 中的地图方向。经过一些搜索,我发现有一张 google 地图 api,我可以从中获取指定位置的 google 地图屏幕截图,我们需要在其上绘制线来连接它们。但我需要的是 google 映射行车路线以连接位置(不是 ggplot 线)。
请帮忙
这基本上归结为创建一个 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
并绘制最终结果来解决这个问题。如果您尝试并显示您卡住的位置(代码),其他人会更容易帮助您。您可能想要编辑您的原始问题,或者在您展示您尝试过的内容后提交一个新问题。
This SO post with this answer 应该会有帮助。
我已经编写了包 googleway 以使用有效的 API 密钥访问 google 地图 API。
您可以使用函数google_directions()
获取路线,包括waypoints、路线步数、路程、距离、时间等
例如
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地图
接收到的所有数据
## see the structure
# str(res)
您在 Google 地图上看到的线路包含在
中
res$routes$overview_polyline$points
# [1] "slviBqmm}MSLiA{B^wAj@sB}Ac@...
这是一条编码折线。
要从中获取 lat/lon,请使用函数 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")
我有几个地点的纬度和经度信息。这是一个示例:
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 中的地图方向。经过一些搜索,我发现有一张 google 地图 api,我可以从中获取指定位置的 google 地图屏幕截图,我们需要在其上绘制线来连接它们。但我需要的是 google 映射行车路线以连接位置(不是 ggplot 线)。 请帮忙
这基本上归结为创建一个 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
并绘制最终结果来解决这个问题。如果您尝试并显示您卡住的位置(代码),其他人会更容易帮助您。您可能想要编辑您的原始问题,或者在您展示您尝试过的内容后提交一个新问题。
This SO post with this answer 应该会有帮助。
我已经编写了包 googleway 以使用有效的 API 密钥访问 google 地图 API。
您可以使用函数google_directions()
获取路线,包括waypoints、路线步数、路程、距离、时间等
例如
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地图
接收到的所有数据## see the structure
# str(res)
您在 Google 地图上看到的线路包含在
中res$routes$overview_polyline$points
# [1] "slviBqmm}MSLiA{B^wAj@sB}Ac@...
这是一条编码折线。
要从中获取 lat/lon,请使用函数 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")