Home > Software design >  How to pass a list of urls contained in a dataframe column into a leaflet map?
How to pass a list of urls contained in a dataframe column into a leaflet map?

Time:11-20

I want to make a map using leaflet so that the points in the map have popup notes. Each popup will have a clickable link to redirect to an Internet page. The URLs that will be inserted in such popups are in a column of my data frame, which has thousands of rows. Some toy data:

place <- c("a", "b", "c", "d", "e", "f")
thing <- c("potato","melon","black pepper", "bigfoot","black panther", "orchidaceae")
lat <- c(-17.456, 31.4009, 24.293, -8.956, 8.697, -25.257)
long <- c(-63.658,-111.144,-106.759,-81.029,-83.2052,-52.026)
urls <- c("https://en.wikipedia.org/wiki/Potato",
          "https://en.wikipedia.org/wiki/Melon",
          "https://en.wikipedia.org/wiki/Black_pepper",
          "https://en.wikipedia.org/wiki/Bigfoot",
          "https://en.wikipedia.org/wiki/Black_panther",
          "https://en.wikipedia.org/wiki/Orchidaceae")

d <- data.frame(place, thing, lat, long, urls)

And this is the code I've been trying to use to plot the map:

library(leaflet)
library(tidyverse)

content <- paste("The", thing, 
"occurs near.You can find some information",
"<b><a href=d$urls>here</a></b>")

mymap <- d %>% 
  leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery, group = "World Imagery") %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite") %>%
  addLayersControl(baseGroups =
                     c("Toner Lite", "World Imagery")) %>%
  addMarkers(label = thing,
             popup = content,
             icon = ~ icons(iconUrl = "marker_red.png",
                            iconWidth = 28, iconHeight = 24))%>%
  addMiniMap(
    toggleDisplay = TRUE,
    tiles = providers$Stamen.TonerLite
  ) %>% 
  print()

The problem is that the word "here" in the popup is sort of clickable, but does not redirect me to any internet page. I don't know what to do in this situation where the URLs are contained in a column of my data frame. Besides, I have no experience working with HTML objects. Could anyone help me figure out a way to pass those URLs into the popup notes?

Thanks in advance!

CodePudding user response:

The problem is with href=d$urls in the content, d$urls is assigned as the URL and the actual URL is not referred here. It can be resolved using paste0 function.

The content should be

content <- paste("The", thing, 
                 "occurs near.You can find some information",
                paste0("<b><a href=",d$urls, ">here</a></b>"))

mymap <- d %>% 
  leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery, group = "World Imagery") %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite") %>%
  addLayersControl(baseGroups =
                     c("Toner Lite", "World Imagery")) %>%
  addMarkers(label = thing,
             popup = content,
             icon = ~ icons(iconUrl = "marker_red.png",
                            iconWidth = 28, iconHeight = 24))%>%
  addMiniMap(
    toggleDisplay = TRUE,
    tiles = providers$Stamen.TonerLite
  ) %>% 
  print()
  • Related