Добавьте два addLayersControl на одну карту (маркеры должны быть в нескольких группах) - PullRequest
2 голосов
/ 10 апреля 2019

У меня есть набор данных, который включает и дату, и вид для каждой птицы, наблюдаемой в округе.Я сопоставил их с помощью листовки, но хочу использовать два AddLayersControl для управления датой и видами.Прямо сейчас я могу контролировать только год или виды.Я хотел бы вторую группу флажков, чтобы я мог контролировать для видов.Я хочу, чтобы маркер исчез, если либо его годовая группа не отмечена, либо его видовая группа не отмечена.

Что мне нужно сделать, это назначить каждый маркер двум различным группам, которые я мог бы контролировать независимо.Я не думаю, что я могу назначить определенные маркеры в качестве базовых слоев, потому что я не хочу, чтобы определенное подмножество их было всегда доступно.Я также попытался просто добавить еще один AddLayersControl - к сожалению, второй всегда будет выигрывать, и не похоже, что вы можете иметь два на одной карте.

library(leaflet)
library(magrittr)
library(dplyr)
library(htmltools)

# Data
birds <- data.frame(observed_on = c("4/4/2009", "4/1/2009", "3/6/2016", "2/9/2016"),
                  url = c("http://www.inaturalist.org/observations/2236",
                          "http://www.inaturalist.org/observations/2237",
                          "http://www.inaturalist.org/observations/2778201",
                          "https://www.inaturalist.org/observations/9796150"),
                  latitude = c(43.08267975, 43.0844841, 43.055512, 43.0180932),
                  longitude = c(-89.43265533, -89.43793488, -89.314878, -89.52836138),
                  scientific_name = c("Agelaius phoeniceus", "Bubo virginianus", "Quiscalus quiscula", "Strix varia"),
                  common_name = c("Red-winged Blackbird", "Great Horned Owl", "Common Grackle", "Barred Owl"),
                  taxon_order_name = c("Passeriformes", "Strigiformes", "Passeriformes", "Strigiformes"),
                  taxon_species_name = c("Agelaius phoeniceus", "Bubo virginianus", "Quiscalus quiscula", "Strix varia" ),
                  year = c("2009", "2009", "2016", "2016"))

# Leaflet Chart Formatting --------------------------------------------------------

palette <- colorFactor(palette = rainbow(length(unique(birds$taxon_order_name))), domain = birds$taxon_order_name)

# Leaflet Chart -------------------------------------------------------------------

mymap <-  leaflet(birds) %>% addProviderTiles(providers$CartoDB.Positron) %>% 
  setView(lng = -89.398721, lat = 43.071580, zoom = 13)

for (t in unique(birds$year)){
  sub <- birds[birds$year == t,]
  labels <- mapply(function(x, y, z, a) {
    HTML(sprintf("%s<br><em>%s</em><br>%s<br><a href=%s>link</a>", htmlEscape(x), htmlEscape(y), htmlEscape(z), htmlEscape(a)))},
    sub$common_name, sub$taxon_species_name, sub$observed_on, sub$url, SIMPLIFY = FALSE)
  mymap <- mymap %>% addCircleMarkers(data = sub, lng = ~longitude, lat = ~latitude,
                                      fillOpacity = 0.6, radius = 8, fillColor = ~palette(taxon_order_name), 
                                      color = "black", weight = 1, opacity = 0.5, popup = labels,
                                      group = as.character(t))
}

mymap %>% 
  addLegend(pal = palette, values = ~taxon_order_name, title = "Taxon Order") %>%
  addLayersControl(overlayGroups = as.character(unique(birds$year)), options = layersControlOptions(collapsed = FALSE))
  # addLayersControl(overlayGroups = unique(birds$taxon_order_name), options = layersControlOptions(collapsed = FALSE))

map showing points with both year and species info but layers control for only year

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...