【问题标题】:Replicating shiny tmap with leaflet?用传单复制闪亮的 tmap?
【发布时间】:2021-02-08 02:33:33
【问题描述】:

我已经构建了以下应用程序https://iseak.shinyapps.io/Mapa/ 我想从 tmap 切换到应用程序的地图部分的传单,因为我遇到了一些限制(我想要更漂亮的弹出窗口和其他一些东西)。

目前地图正在使用以下代码与 tmap 配合使用:

output$map = renderLeaflet({
  
  tm <- tm_shape(subsetData()) +
    tm_fill(selvar(), palette=colores(),
            alpha=0.95,
            breaks=breaks(),
            id="Zona", 
            popup.vars=c(" "="popover"),
            popup.format=list(digits=2),  
            legend.show = F,
            labels=c(" "=selvar())
            
    ) + 
    tm_borders() +
    tmap_options(basemaps = "CartoDB.Positron"
    ) 
  
  
  tmap_leaflet(tm) %>%
    removeLayersControl()
})

我尝试直接使用传单的出发点是:

output$map = renderLeaflet({
  
  leaflet(data=subsetData()) %>%
    addProviderTiles("CartoDB.Positron") %>% 
    clearShapes() %>% 
    clearControls() %>% 
    addPolygons(data = subsetData(),
                fillColor = ~colores()(selvar()),
                fillOpacity = 0.9,
                weight = 2)
  
  
})

但我不断收到错误。我会很感激一些关于如何轻松地从 tmap 切换到传单以及如何在传单调用中使用反应值的指示。谢谢!

【问题讨论】:

    标签: r shiny leaflet tmap


    【解决方案1】:

    这个问题很开放。我认为传单网站有很好的示例代码(https://rstudio.github.io/leaflet/)。浏览左侧菜单。

    在反应性方面,您不需要括号来使用由reactiveValues 创建的变量;如果是reactive(),你需要一些。

    查看您的代码,我不确定 color() 和 selvar() 背后的内容。假设 selvar() 是色阶的数字,我的方法应该是这样的:

    selvar <- reactiveValues(n=c(1:10)
    
    output$map = renderLeaflet({
        pal <- leaflet::colorBin(brewer.pal(9,"Blues"), domain = selvar, bins = 7, na.color = "gray")
    
        leaflet() %>%
            addProviderTiles("CartoDB.Positron") %>%
            addPolygons(data=shp,
                        fillColor = ~pal(selvar),
                        fillOpacity = 0.9,
                        weight = 2)
    

    您可以在leaflet()addPolygons() 中指定您的形状数据。使用后者允许使用不同的形状文件表。最后,另一个有用的指针是leafletProxy('map'),它可以与地图下方的年份按钮配合使用,以便快速更新。

    【讨论】:

    • 谢谢,我去看看。关于leafletProxy:我目前正在做的是在运行leaflet()之前根据所有输入(包括年份按钮)对数据进行子集化,以便selvar()仅包含所选年份的值。您是否建议为此切换到leafletProxy,是否应该更快地更新地图?谢谢!
    • 对不起,我通过在leafletProxy 函数中的混合没有这个想法(这不是100% 的点)。 leafletProxy 的想法是修改现有地图而不是重新绘制它,从而节省再次生成整个地图的时间。因此,您需要使用leaflet 绘制地图。但是您的时间按钮可以通过 leafletProxy 重新访问地图,剥离多边形 (clearShapes()) 并添加更新的多边形图层:observe({ leafletProxy('map') %>% clearShapes() %>% clearControls () %>% addPolygons(...) })
    猜你喜欢
    • 2018-11-23
    • 2019-07-25
    • 1970-01-01
    • 2020-10-31
    • 2017-05-30
    • 2019-10-22
    • 1970-01-01
    • 2021-08-30
    • 2018-04-30
    相关资源
    最近更新 更多