Как построить полилинии в R в нескольких цветах?

Сейчас я работаю над пользовательским планировщиком маршрутов в R. Я использую выходные данные API Карт Google. Я хочу показать маршрут на карте между двумя местами. Пока все идет отлично. Единственная проблема состоит в том, что я не знаю, как дать маршруту несколько цветов в зависимости от скорости на данный момент. Я искал в интернете несколько дней и не смог найти то, что соответствует моей цели. Вот почему я сделал этот пост.

Вот так выглядит мой фрейм данных

Затем я визуализировал это в Leafet с помощью следующего кода:

#install.packages("leaflet")
library(leaflet)


pal <- colorNumeric(
palette = unique(polyline$Col),
domain = polyline$Speed,
na.color = "#FFFFFF"
)
rm(map)
map <- leaflet()
map <- addTiles(map)
a <- 1
for(a in length(unique(polyline$Step_ID))){


map <- addPolylines(map,lng = polyline$Lon, 
           lat = polyline$Lat,
           data = polyline[polyline$Step_ID==a,],
           color = polyline$col)
a <- a + 1
}
map <- addLegend(map,"bottomright", pal = pal, values = polyline$Speed,
        title = "Speed",
        opacity = 1)
map

До сих пор я думаю, что вам нужно создать несколько PolyLines (поправьте меня, если я ошибаюсь), чтобы построить несколько цветов в маршруте. Вот почему я сделал цикл для добавления PolyLine на карту.

Вот так выглядит моя визуализация

Все как раз то, что нужно. Единственная проблема - окраска линии. Я хочу раскрасить линии, как Google делает с трафиком.

Может кто-нибудь помочь мне с этим, пожалуйста?

1 ответ

Решение

Чтобы полностью повторить ваш вопрос, вы должны предоставить нам фактические данные для polyline (т.е. не скриншот). До этого я собираюсь создать свой собственный набор данных и покажу вам, как создавать цветные линии.

И, поскольку вы используете API Google для получения указаний, я предполагаю, что у вас будет ключ API, поэтому я покажу вам, как это сделать с помощью моего пакета googleway.

library(googleway)

api_key <- "your_api_key"

directions <- google_directions(origin = "St Kilda, Melbourne, Australia",
                                destination = "Geelong, Victoria, Australia",
                                key = api_key)

## the results of the API give you distance in metres, and time in seconds
## so we need to calculate teh speed
spd <- (directions$routes$legs[[1]]$steps[[1]]$distance$value / 1000) / (directions$routes$legs[[1]]$steps[[1]]$duration$value/ 60 / 60)

## then we can start to build the object to use in the plot
## and as we are staying within Google's API, we can use the encoded polyline to plot the routes
## rather than extracting the coordinates
df <- data.frame(speed = spd,
                 polyline = directions$routes$legs[[1]]$steps[[1]]$polyline)



df$floorSpeed <- floor(df$speed)
colours <- seq(1, floor(max(df$speed)))
colours <- colorRampPalette(c("red", "yellow","green"))(length(colours))

df <- merge(df, 
            data.frame(speed = 1:length(colours), 
                       colour = colours), 
            by.x = "floorSpeed", 
            by.y = "speed")

map_key <- "your_map_api_key"

google_map(key = map_key) %>%
    add_polylines(data = df, polyline = "points", stroke_colour = "colour",
                   stroke_weight = 5, stroke_opacity = 0.9)

Посмотрите этот ответ, чтобы узнать, как создать планировщик маршрута в Шине.

Другие вопросы по тегам