Connecting Dots on a Map

I am working with the R programming language.

Using the "leaflet" library, I made the following map for these 5 cities:

library(dplyr)
library(leaflet)

map_data <- data.frame("Lat" = c(43.6426, 43.6424, 43.6544, 43.6452, 43.6629), "Long" = c(-79.3871, -79.3860, -79.3807, -79.3806,-79.3957 ), type = c(1,2,3,4,5))

map_data$type = as.factor(map_data$type)



leaflet(map_data) %>%
    addTiles() %>% addCircleMarkers(stroke = FALSE, label = ~type,fillOpacity = 0.8, labelOptions = labelOptions(direction = "center",style = list('color' = "white"),noHide = TRUE, offset=c(0,0), fill = TRUE, opacity = 1, weight = 10, textOnly = TRUE))

enter image description here

On this above map that I have created, I would now like to "connect" all these "points" (i.e. cities) on the map (in a circular route) based on their "number" (e.g. connect 1 with 2, 2 with 3, 3 with 4, 4 with 5, 5 with 1), and output the "total distance" of the route. I found a previous post that shows how to do this: How to show path and distance on map with leaflet, shiny apps?

I tried to adapt the code from this post to suit my question:

library(osrm)

route = osrmRoute(c(-79.3871, -79.3860, -79.3807, -79.3806,-79.3957 ), c(43.6426, 43.6424, 43.6544, 43.6452, 43.6629),  overview = 'full')


route_summary = osrmRoute(c(-79.3871, -79.3860, -79.3807, -79.3806,-79.3957 ), c(43.6426, 43.6424, 43.6544, 43.6452, 43.6629), overview = FALSE)

leaflet() %>% addTiles() %>% 
    addCircleMarkers(c(-79.3871, -79.3860, -79.3807, -79.3806,-79.3957 ), c(43.6426, 43.6424, 43.6544, 43.6452, 43.6629), stroke = FALSE, label = ~type,fillOpacity = 0.8, 
                     labelOptions = labelOptions(direction = "center",style = list('color' = "white"),noHide = TRUE, offset=c(0,0), fill = TRUE, opacity = 1, weight = 10, textOnly = TRUE)) %>% 
    addPolylines(route$lon,route$lat, 
                 label = paste(round(route_summary[1]/60), 'hr - ', round(route_summary[2]), 'km'), 
                 labelOptions = labelOptions(noHide = TRUE))

But this returns the following error:

Error in UseMethod("metaData") : 
  no applicable method for 'metaData' applied to an object of class "NULL"

Can someone please show me how to fix this problem?

I would like to do this using "leaflet" and not using "rshiny".

Thanks!

Note: I am starting to think that problem might be that the "osrmRoute()" function might not be able to work for more than 2 points?

The issue is with label = ~ type, when commented it work's quite well. I would leave to you to find the reason :slight_smile:

leaflet() |> addTiles() |>
  addCircleMarkers(
    c(-79.3871,-79.3860,-79.3807,-79.3806, -79.3957),
    c(43.6426, 43.6424, 43.6544, 43.6452, 43.6629),
    stroke = FALSE,
#    label = ~ type,
    fillOpacity = 0.8,
    labelOptions = labelOptions(
      direction = "center",
      style = list('color' = "white"),
      noHide = TRUE,
      offset = c(0, 0),
      fill = TRUE,
      opacity = 1,
      weight = 10,
      textOnly = TRUE
    )
  ) |>
  addPolylines(
    route$lon,
    route$lat,
    label = paste(round(route_summary[1] / 60), 'hr - ', round(route_summary[2]), 'km'),
    labelOptions = labelOptions(noHide = TRUE)
  )

Thank you for your answer! I tried something similar and the map doesnt even appear on the right continent! LOL