2017-12-24 57 views
1

두 점 사이에 폴리선을 추가하고 싶습니다. 어떻게해야합니까?전단지에있는 두 마커 사이에 경로 (폴리선)를 추가하는 방법

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와 같은 경로를 얻길 원하지만 직선을 표시하는 대신 두 마커 사이에 있습니다. 그게 가능하니? 또는 나는 잘못된 질문을하고 있는가? –

+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 [**이 링크 **]보세요 (https://cran.r-project.org/web/packages/googleway/vignettes/googleway-vignette.html) – jazzurro

+0

@EwsonPhang 꾸러미. 패키지를 사용하여 작업을 수행 할 수 있습니다. 패키지 작성자가 SO를 사용하고 있습니다. 당신이 그/그녀를 붙잡을 수 있다면, 당신은 더 많은 정보를 얻을 것입니다. – jazzurro

1

이 자리-에 그래서 그 허용 대답 남아 있어야합니다.

Google지도를 원한다면, googleway 패키지 내에서 모두 언급했듯이 할 수 있습니다. 전단을 사용하는 것의 가장 큰 차이점은 다중 선을 디코딩 할 필요가 없다는 것입니다. Google Map은 인코딩 된 문자열을 처리 할 수 ​​있습니다.

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

@jazzurro - 좋은 질문입니다. 그리고 루프를 피하기위한 적절한 방법을 찾으려고 노력했습니다.그러나'google_ *'API 호출은 한 번에 하나만 처리 할 수 ​​있으므로 아직 해결 방법을 찾지 못했습니다. 당신이 어떤 제안이라도 있으면 그들을 기쁘게 생각합니다. 또한, dev 버전에서는 [결과를 더 쉽게 추출 할 수있는] 메소드를 추가했습니다 (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