У меня есть большое количество полигонов (> 5000, чтобы покрыть Великобританию), которые даже упрощенно вызывают довольно большой файл карты.У меня также есть набор информации о каждом из этих многоугольников со значением в неделю в течение 13-недельного периода.
Я хочу представить это в виде клороплета, где каждая неделя является слоем, а цвет многоугольника -связано со значением для этой недели.
До сих пор мне удавалось заставить его работать, объединяя SPDF и DF, затем циклически повторяя все 13 недель, но это приводит к загрузке карты, которая занимает очень много времени, и выходной html-файл огромен.В идеале, поскольку полигоны никогда не меняются, только их цвет, я бы хотел, чтобы обновление цвета основывалось на выбранном слое.
У меня есть следующий код в качестве минимального примера, чтобы показать, что я получил до сих пор,Я использовал числовое значение для цикла, а не для временных рядов, но принцип должен быть таким же.
# Libraries and data load
library(tigris)
library(spdplyr)
library(leaflet)
states <- states(cb=T)
binpal <- colorBin(c("red", "yellow", "green"), -5:5, c(-5, -0.5, 0.5, 5), pretty = FALSE)
# Subset to less states for example
states_subset <- states[5:10,]
state_names <- states_subset$NAME
# Generate random measure data
set.seed(100)
df <- data.frame(cycle = 1, state_names, val =rnorm(6))
for (i in 2:5){df <- df %>% rbind(data.frame(cycle = i, state_names, val = rnorm(6)))}
# Join the data and produce the map 1 layer per cycle
state_merged <- states_subset %>% merge(df, by.x = "NAME", by.y = "state_names", duplicateGeoms = TRUE)
m <- leaflet() %>%
addTiles()
for (i in 1:5){
temp <- state_merged %>% filter(cycle == i)
m <- m %>%
addPolygons(
data = temp,
color = ~binpal(val),
label = ~val,
group = as.character(i)
)
}
m <- m %>%
addLayersControl(
overlayGroups = as.character(1:5),
options = layersControlOptions(collapsed = TRUE),
position = "topleft"
) %>% hideGroup(as.character(1:4))
m
Я ожидаю, что ответ есть в некоторых пользовательских JS, но я не знаю, кто знает, с чего начать.Меня не беспокоит возможность одновременного отображения нескольких слоев.