2

いくつかの場所の緯度と経度の情報を持っています。以下にサンプルを示します。

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)

これらの場所をある順序でプロットしたい (たとえば、上記のベクトルの最初の要素の緯度と経度の組み合わせが開始点になり、最後の場所まで同じ順序で移動する必要がある) R の Google マップの方向を使用します。指定された場所のGoogleマップのスクリーンショットを取得できるGoogleマップAPIがあることがわかりました。その上に、それらを接続するために線をプロットする必要があります。しかし、必要なのは、場所を接続するためのGoogleマップの運転ルートです(ggplotラインではありません)。助けてください。

4

2 に答える 2

8

有効な API キーを使用して Google マップ API にアクセスするためのパッケージgooglewayを作成しました。

この関数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 マップから受け取ったすべてのデータです。

## 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

2.0 では、googleway以前のようにデコードされた座標を使用するか、ポリラインを直接使用して、Google マップにポリラインをプロットできます。

google_map(key = key) %>%
    add_polylines(data = data.frame(polyline = res$routes$overview_polyline$points), 
                                polyline = "polyline")

ここに画像の説明を入力

于 2016-06-25T01:59:18.823 に答える
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そのため、各 from-to ルートを生成し、すべての結果を 1 つの大きなものにしroute_dfて最終結果をプロットすることで、おそらくこれにアプローチできます。試してみて、行き詰まっている場所を (コードで)示すと、他の人が助けやすくなります。元の質問を編集するか、試したことを示した後で新しい質問を送信することをお勧めします。

この回答を含むこの SO 投稿が役立つはずです。

于 2015-10-29T14:54:01.597 に答える