根据R传单中的图层,使整体厚度改变多边形颜色

时间:2019-02-21 17:19:49

标签: javascript r dictionary leaflet polygon

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

0 个答案:

没有答案