我有大量的多边形(覆盖英国超过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中,但我不知道从哪里开始。我不担心是否可以一次显示多层。