Created on September 21, 2026 with R Markdown and Leaflet.

Click a marker for details, use the layer control (top right) to switch between base maps and toggle categories, and drag the mini-map in the corner.

library(leaflet)

sites <- data.frame(
  name = c("Great Pyramid of Giza", "Machu Picchu", "Petra", "Colosseum",
           "Taj Mahal", "Great Wall of China", "Angkor Wat",
           "Grand Canyon", "Victoria Falls", "Mount Fuji",
           "Eiffel Tower", "Sydney Opera House"),
  lat  = c(29.9792, -13.1631, 30.3285, 41.8902,
           27.1751, 40.4319, 13.4125,
           36.1069, -17.9243, 35.3606,
           48.8584, -33.8568),
  lng  = c(31.1342, -72.5450, 35.4444, 12.4922,
           78.0421, 116.5704, 103.8670,
           -112.1129, 25.8572, 138.7274,
           2.2945, 151.2153),
  category = c("Ancient", "Ancient", "Ancient", "Ancient",
               "Ancient", "Ancient", "Ancient",
               "Natural", "Natural", "Natural",
               "Modern", "Modern"),
  fact = c("Built c. 2560 BCE; the tallest structure on Earth for ~3,800 years.",
           "15th-century Inca citadel high in the Andes.",
           "Rock-cut city of the Nabataeans, known as the 'Rose City'.",
           "Roman amphitheatre that could seat 50,000 spectators.",
           "Ivory-white marble mausoleum completed around 1653.",
           "A network of fortifications stretching thousands of kilometres.",
           "The largest religious monument in the world.",
           "A mile-deep canyon carved by the Colorado River.",
           "Known locally as 'The Smoke That Thunders'.",
           "Japan's highest mountain and an active stratovolcano.",
           "Wrought-iron tower finished for the 1889 World's Fair.",
           "Sail-shaped performing arts centre opened in 1973."),
  stringsAsFactors = FALSE
)

pal <- colorFactor(
  palette = c("Ancient" = "#c0392b", "Natural" = "#27ae60", "Modern" = "#2980b9"),
  domain  = sites$category
)

popup_html <- paste0(
  "<b>", sites$name, "</b><br/>",
  "<i>", sites$category, "</i><br/>",
  sites$fact
)

m <- leaflet(sites, width = "100%", height = 550) |>
  # Base maps
  addProviderTiles(providers$CartoDB.Positron,   group = "Light") |>
  addProviderTiles(providers$OpenStreetMap,      group = "Street") |>
  addProviderTiles(providers$Esri.WorldImagery,  group = "Satellite") |>
  setView(lng = 20, lat = 25, zoom = 2)

# One layer group per category so they can be toggled independently
for (cat in unique(sites$category)) {
  d <- sites[sites$category == cat, ]
  m <- m |>
    addCircleMarkers(
      data = d, lng = ~lng, lat = ~lat,
      radius = 9, weight = 2, color = "white",
      fillColor = ~pal(category), fillOpacity = 0.9,
      popup = popup_html[sites$category == cat],
      label = ~name,
      group = cat
    )
}

m |>
  addLegend("bottomleft", pal = pal, values = ~category,
            title = "Type of wonder", opacity = 1) |>
  addLayersControl(
    baseGroups    = c("Light", "Street", "Satellite"),
    overlayGroups = unique(sites$category),
    options       = layersControlOptions(collapsed = FALSE)
  ) |>
  addMiniMap(toggleDisplay = TRUE, position = "bottomright") |>
  addScaleBar(position = "bottomleft")