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)
  )

1 Like

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

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.