是否可以更新传单中的多边形填充以获得闪亮而无需重新创建地图对象

时间:2015-05-07 02:48:31

标签: r leaflet shiny

在传单中,我通常会创建一个地图:

server.R

shinyServer(function(input, output, session) {
url <- "custommapboxurl"
attrib <- "Maps by http://www.mapbox.com/Mapbox"

...
     map_out <- reactive({

        map <- leaflet()%>%
        addTiles(urlTemplate = url, attribution = HTML(attrib))%>%
        addPolygons(data = sub_shape,
                    fill = TRUE,
                    fillColor = colors$color,
                    fillOpacity = .8,
                    stroke = TRUE,
                    weight = 3,
                    color = "white",
                    dashArray = c(5,5),
                    popup = pops
        )
    })

    output$myMap <- renderLeaflet({
            map_out()
    })
...
})
上面的

sub_shape是我的shapefile(在本例中是美国的邮政编码),颜色$ color是与每个形状对应的颜色的动态矢量。您可以使用此处的链接重新创建:http://www.nws.noaa.gov/geodata/catalog/national/html/province.htmcolors <- data.frame(color = colorRampPalette(c("white","blue"))(13))

ui.R

shinyUI(
    ...
    leafletOutput('myMap', width = "100%" , height = "100%")
    ...
)

这给出了:

enter image description here

我想要做的是根据用户的输入更改颜色矢量。例如,他们可能会选择一个不同的变量来为每个邮政编码着色,生成一个新的渐变。

Shiny允许我们这样做,就好像我根据输入小部件更改颜色向量,反应函数刷新,并根据新向量重新创建地图。问题是,对于大型shapefile对象,此刷新需要很长时间。

有没有办法直接更改当前渲染形状的颜色,而无需重新创建整个图层?似乎color参数被锁定在leaflet()函数中。还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

为说明@Yihui Xie的评论,下面是一个示例,该示例基于frame使用layoutSubviews来更改多边形的颜色。

leafletProxy