5-minute map

Day 19 of 30DayMapChallenge
R
30DayMapChallenge
spatial
datavisualization
Author

Michaël

Published

2023-11-19

Modified

2023-11-20

A photo of a clock

Clock 10:05 – CC-BY-NC-ND by Bill Dickinson

Day 19 of 30DayMapChallenge: « 5-minute map » (previously).

Setup

library(tidyverse)
library(leaflet)
library(httr)
library(fs)
library(glue)

Data

We reuse the Geonames data from Bad map.

gn_file <- "~/data/geonames/allCountries.zip"

if (!file_exists(gn_file)) {
  GET("http://download.geonames.org/export/dump/allCountries.zip",
      write_disk(gn_file))
}

gn <- read_delim(
  gn_file, 
  delim = "\t", 
  col_names = c("geonameid",     
                "name",          
                "asciiname",     
                "alternatenames",
                "latitude",      
                "longitude",     
                "feature_class", 
                "feature_code",  
                "country_code",  
                "cc2",           
                "admin1_code",   
                "admin2_code",   
                "admin3_code",   
                "admin4_code",   
                "population",    
                "elevation",     
                "dem",           
                "timezone",      
                "modification_date"))

We randomly keep five places containing “minute”…

set.seed(5555)

minute <- gn |> 
  filter(str_detect(asciiname, "\\b[Mm]inutes?\\b")) |> 
  slice_sample(n = 5)

Map

minute |> 
  leaflet() |> 
  addCircleMarkers(popup = ~ glue("{name} ({asciiname})<br />
                                  <b>{country_code}</b>"),
                   label = ~ asciiname,
                   labelOptions = labelOptions(noHide = TRUE)) |> 
  addTiles(attribution = "Geonames and © OpenStreetMap, ODbL")
Figure 1: … and here is the Five minute map

And it just took five minutes to do…