Вы можете сделать что-то вроде этого
n = leaflet() %>%
addTiles(group = "Base") %>%
setView( lng = 1, lat = 40, zoom = 5 )
n %>% addProviderTiles(providers$OpenStreetMap, group = 'OpenStreetMap') %>%
addProviderTiles(providers$OpenTopoMap, group='OpenTopoMap') %>%
addLayersControl(baseGroups = c('OpenStreetMap', 'OpenTopoMap'))
Обернуть в индекс вызова функции
layered_map <- function(..., provider=NULL, base_map_name="Base") {
select_providers <- provider[c(...)]
iter <- function(providers, layerid) {
if (length(providers)==0) {
leaflet() %>% addTiles(group = base_map_name) %>% setView(lng = 1, lat = 40, zoom = 5 )
} else {
iter(providers[-length(providers)], layerid-1) %>%
addProviderTiles(providers[[length(providers)]],
layerId = layerid,
group = providers[[length(providers)]])
}
}
controlnames <- if (length(select_providers)==0) base_map_name else names(select_providers)
iter(select_providers, length(select_providers)) %>% addLayersControl(baseGroups = controlnames)
}
Чтобы вызвать функцию:
library("leaflet")
library("leafem")
layered_map(1, 10, 40, provider=providers)
![map with multiple layers and controls](https://i.stack.imgur.com/2DjAT.png)
Это довольно общий c. Итак, если вы хотите создать базовую карту без дополнительных слоев. Вы можете просто набрать
layered_map()
или
layered_map(base_map_name="My base map")
, что даст вам ![base map](https://i.stack.imgur.com/6Rz7n.png)