2017-12-24 36 views
1

これらの2点の間にポリラインを追加したいと思います。これどうやってするの?リーフレットの2つのマーカー間にルート(ポリライン)を追加する方法

m <- leaflet() %>% 
    addPolylines() %>% 
    addTiles() %>% # Add default OpenStreetMap map tiles 
    addMarkers(lng = -87.6266382, lat = 41.8674336, 
       popup = "starting") %>% 
    addMarkers(lng = -87.64847, lat = 41.9168862, 
       popup = "Destination") 

m # Print the map 

データの例。

| region  | from_lat | from_long | to_lat  | to_long | 
|-------------|------------|------------- |-------------|----------- | 
| 1   | 41.8674336 | -87.6266382 | 41.887544 | -87.626487 | 
| 2   | 41.8674336 | -87.6266382 | 41.9168862 | -87.64847 | 
| 3   | 41.8674336 | -87.6266382 | 41.8190937 | -87.6230967| 
+0

@jazzurro yup。私もそれを見た。しかし私はGPSのようなルートを取得したいが、直線を表示するのではなく、2つのマーカーの間にある。それは可能ですか?私は間違った質問をしていますか? –

+0

私はgooglewayパッケージをチェックしたいと思う。 – jazzurro

+0

https://rdrr.io/cran/googleway/man/add_polylines.htmlこのようなものですか? –

答えて

1

これは私の試みです。リーフレットマップにいくつかのルートを描きたいので、googlewayパッケージを使ってこのタスクを達成したいと考えています。 google_directions()decode_pl()を使用してルートデータを抽出することができます。複数のルートがあるので、lapply()を使用してデータセットを作成します。ルートデータを取得したら、仕事は簡単です。 addPolylines()のデータを使用します。 jazzurroの答え@

library(dplyr) 
library(googleway) 
library(leaflet) 

mydf <- data.frame(region = 1:3, 
        from_lat = 41.8674336, 
        from_long = -87.6266382, 
        to_lat = c(41.887544, 41.9168862, 41.8190937), 
        to_long = c(-87.626487, -87.64847, -87.6230967)) 

mykey <- "you need to have your API key here" 

lapply(1:nrow(mydf), function(x){ 

    foo <- google_directions(origin = unlist(mydf[x, 2:3]), 
          destination = unlist(mydf[x, 4:5]), 
          key = mykey, 
          mode = "driving", 
          simplify = TRUE) 

    pl <- decode_pl(foo$routes$overview_polyline$points) 

    return(pl) 

     } 
    ) %>% 
bind_rows(.id = "region") -> temp 


m <- leaflet() %>% 
    addProviderTiles("OpenStreetMap.Mapnik") %>% 
    addPolylines(data = temp, lng = ~lon, lat = ~lat, group = ~region) %>% 
    addMarkers(lng = -87.6266382, lat = 41.8674336, 
       popup = "starting")%>% 
    addMarkers(data = mydf, lng = ~to_long, lat = ~to_lat, 
       popup = "Destination") 

enter image description here

+0

もう一度質問できますか?あなたは、google_directions()とdecode_pl()を使って、ルートデータを抽出できると述べました。どうすればそれを達成できますか? as.numeric(foo)とas.numeric(pl)を使用しています。申し訳ありませんが、私は愚かな質問をしています。私はRの初心者、特にGoogleマップです。 –

+0

@EwsonPhang [** this link **](https://cran.r-project.org/web/packages/googleway/vignettes/googleway-vignette.html)をご覧ください – jazzurro

+0

@EwsonPhangパッケージ。あなたはパッケージであなたの仕事をすることができるかもしれません。パッケージ作成者はSOの周りにあります。あなたが彼/彼女をキャッチするなら、あなたはより多くの情報を得るでしょう。 – jazzurro

1

スポットオンであるので、それは受け入れ答えままにしてください。

Googleマップをプロットしたい場合は、googlewayパッケージ内でこれをお伝えください。リーフレットを使用する主な違いは、ポリラインをデコードする必要がないことです.Googleマップでエンコードされた文字列を処理できます。

enter image description here

polylines <- lapply(1:nrow(mydf), function(x){ 

    foo <- google_directions(origin = unlist(mydf[x, 2:3]), 
          destination = unlist(mydf[x, 4:5]), 
          key = apiKey, 
          mode = "driving", 
          simplify = TRUE) 

    ## no need to decode the line, just return the string as-is 
    foo$routes$overview_polyline$points 
} 
) 

df <- data.frame(polylines = unlist(polylines), stringsAsFactors = F) 

## add some colour values for the markers 
mydf$colour_from <- "red" 
mydf$colour_to <- "blue" 

## plot the polylines and the markers 
google_map(key = mapKey) %>% 
    add_markers(data = mydf, lat = "from_lat", lon = "from_long", colour = "colour_from") %>% 
    add_markers(data = mydf, lat = "to_lat", lon = "to_long", colour = "colour_to") %>% 
    add_polylines(data = df, polyline = "polylines") 

:私はgooglewayの作者です。

+0

この質問を発見してうれしいです。 goolewayタグがあるかどうかを調べると思っていました。 :)私は質問にそれを加えました。私は各ループに対してgoole_directions()をループする必要があることを確認したいだけです。そうですか?または、複数のルートを一度にダンプしてlapplyの使用を避けることはできますか? – jazzurro

+0

@ジャズロ - それは良い質問です。私はループを避けるための適切な方法を見つけようとしました。しかし、 'google_ *' API呼び出しは一度に1つしか処理できないため、私はまだそれを回避する方法を見つけていません。あなたが何か提案があれば、私はそれらを聞いてうれしいです。また、開発版では、[結果を簡単に抽出する]メソッドを追加しています(https://github.com/SymbolixAU/googleway/blob/master/R/results_directions.R)。 – SymbolixAU

+0

このような制限がある場合は、Googleが言うことに固執する必要があります。上記のコードを書いたとき、私はこの点についてはあまりよく分かりませんでした。あなたのCRANのマニュアルやバイナリでこの規制の事を見るのはいいでしょう。その後、パッケージのユーザーは、複数のルートのデータを取得するためにループを経由する必要があることを知ります。 OPは、上記のコメントに彼/彼女のコードを見てこの点について混乱しているように見えました。結果を抽出する方法については、それは私にはかなり良く見えます。 'direction_polyline < - function(res).access_result(resultType(res)、" polyline ")'はlongとlatを持つデータフレームを返しますか? – jazzurro

関連する問題