I am trying to build an app where I show circles that represent the radiuses of workers from certain coordinates. However, I would like to also include categorical variables like the day of the week in which the worker works (Say Monday or Tuesday) . I want to show only the circles that have certain combinations on the map when I select them. For instance, if I select Mon and I also select Manager Andrew_XXXXX, I will only see the circles of Mon and Manager_XXXXX I am having trouble making those intersections happen in an efficient way.
## Data
Latitude = c(33.79053,34.31533,21.44848,33.89115)
Longitude = c(-84.0348,-83.8166,-158.003, -117.295)
Worker = c('A','A','B','B')
Max.Distance.from.C.or.HB = c(35,55,75,20)
Manager = c('Andrew XXXXX','Andrew XXXXX','Andy YYYY', 'Andy YYYY')
Days = c('Tuesday','Monday','Monday','Tuesday')
coverage_data <- data.frame(Latitude,Longitude,Worker, Max.Distance.from.C.or.HB, Manager,
Days)
# Convert to miles
coverage_data <- coverage_data %>%
mutate(Radius = coverage_data$Max.Distance.from.C.or.HB * 1609.34)
#Show days Monday to Friday
coverage_Monday <- coverage_data %>%
filter(Days == "Monday")
coverage_Tuesday <- coverage_data %>%
filter(Days == 'Tuesday')
#Create label for Monday cases
coverage_Monday$label <- paste("<p>", coverage_Monday$Worker, "</p>",
"<p>", coverage_Monday$Manager, "</p>",
"<p>", coverage_Monday$Days, "</p>",
"<p>", coverage_Monday$Radius, "</p>",
sep="")
#Create label for Tuesday cases
coverage_Tuesday$label <- paste("<p>", coverage_Tuesday$Worker, "</p>",
"<p>", coverage_Tuesday$Manager, "</p>",
"<p>", coverage_Tuesday$Days, "</p>",
"<p>", coverage_Tuesday$Radius, "</p>",
sep="")
####### map 2 Managers ########
#Show Managers coverage
coverage_Andrew_XXXXX<- coverage_data %>%
filter(Manager == "Andrew XXXXX")
coverage_Andy_YYYY <- coverage_data %>%
filter(Manager == 'Andy YYYY')
#Create label for Managers
coverage_Andrew_XXXXX$label <- paste("<p>", coverage_Andrew_XXXXX$Worker, "</p>",
"<p>", coverage_Andrew_XXXXX$Manager, "</p>",
"<p>", coverage_Andrew_XXXXX$Days, "</p>",
"<p>", coverage_Andrew_XXXXX$Radius, "</p>",
sep="")
coverage_Andy_YYYY$label <- paste( "<p>", coverage_Andy_YYYY$Worker, "</p>",
"<p>", coverage_Andy_YYYY$Manager, "</p>",
"<p>", coverage_Andy_YYYY$Days, "</p>",
"<p>", coverage_Andy_YYYY$Radius, "</p>",
sep="")
#
pal <- colorFactor(
palette = 'Set1', #Dark2 is another palette option
domain = coverage_data$Worker
)
#colorFactor
#add checkbox control.
mapreprex <- leaflet(coverage_data) %>%
setView(lng = -95.7129, lat = 34.0902, zoom = 4.499) %>%
addProviderTiles(providers$OpenStreetMap.France, group = 'Monday') %>%
addProviderTiles(providers$OpenStreetMap.France, group = 'Tuesday') %>%
###### DAYS #######
addCircles(lng = coverage_Monday$Longitude,
lat = coverage_Monday$Latitude,
color = ~pal(coverage_Monday$Worker),
weight = 1,
radius = coverage_Monday$Radius,
opacity = 0.5,
#label = lapply(coverage_Monday$label, HTML),
fillOpacity = 0.55,
group = "Monday") %>%
addCircles(lng = coverage_Tuesday$Longitude,
lat = coverage_Tuesday$Latitude,
color = ~pal(coverage_Tuesday$Worker),
weight = 1,
radius = coverage_Tuesday$Radius,
opacity = 0.5,
fillOpacity = 0.55,
label = lapply(coverage_Tuesday$label, HTML),
group = "Tuesday") %>%
####### MANAGERS ######
addCircles(lng = coverage_Andrew_XXXXX$Longitude,
lat = coverage_Andrew_XXXXX$Latitude,
color = ~pal(coverage_Andrew_XXXXX$Worker),
weight = 1,
radius = coverage_Andrew_XXXXX$Radius,
opacity = 0.5,
label = lapply(coverage_Andrew_XXXXX$label, HTML),
fillOpacity = 0.55,
group = "Andrew XXXXX") %>%
addCircles(lng = coverage_Andy_YYYY$Longitude,
lat = coverage_Andy_YYYY$Latitude,
color = ~pal(coverage_Andy_YYYY$Worker),
weight = 1,
radius = coverage_Andy_YYYY$Radius,
opacity = 0.5,
fillOpacity = 0.55,
label = lapply(coverage_Andy_YYYY$label, HTML),
group = "Andy YYYY") %>%
addLayersControl(
overlayGroups= c("Andrew XXXXX", "Andy YYYY"),
baseGroups = c("Monday", "Tuesday"),
options = layersControlOptions(collapsed = FALSE))
mapreprex
Within my app I want to be able to select days say ( Mon ) and the manager and thus see the circles of for that manager on a Monday.
Notice from the code above that when I select Monday and Andrew XXXXX, Tuesday data also shows, which is wrong!