Как построить полилинии в 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)
Посмотрите этот ответ, чтобы узнать, как создать планировщик маршрута в Шине.