Изменение цвета многоугольника на основе слоя в буклете R - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть большое количество полигонов (> 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, но я не знаю, кто знает, с чего начать.Меня не беспокоит возможность одновременного отображения нескольких слоев.

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