根据输入更改小册子上的缩放

时间:2017-04-28 12:21:27

标签: r shiny leaflet

我对Shiny和R一般是新手,所以我确定这是一个非常简单的问题,但我花了很长时间才想弄明白并且无处可去所以任何帮助都会非常感激!我现在所拥有的主要基于这篇文章Leaflet R shiny: select & zoom

我正在尝试创建一个应用,让用户定义他们想要查看的国家/地区,然后该应用将缩放到该国家/地区。每个国家/地区由质心的lat,lng,缩放级别和名称定义。我的代码是这样的:

UI

var.zoom <- setNames(as.numeric(country_centroid$COUNTRY),country_centroid$COUNTRY)

shinyUI(navbarPage("SnailViz", theme = shinytheme("united"),
tabPanel("Map",
fluidPage(
fluidRow(column(width =3,id = "visualization", fixed = TRUE,
             h1("Visualization", align = "center"),
wellPanel(fluidRow(selectInput("countryZoom", label = h3("Zoom to"), 
                                  choices = var.zoom)))),
column( 9, id = "mapp", fixed =TRUE,
        leafletOutput("map", width = "100%", height= 850))
))))

server.R

shinyServer(function(input, output, session) {

output$map <- renderLeaflet({
leaflet() %>%
addPolygons( data = climateZones, fillOpacity = 0.5, fillColor = ~pal_grid(climateZones$Climate), stroke = FALSE) %>%
addLegend(pal = pal_grid, values = climateZones$Climate, title = "Climate Zones") %>%
addProviderTiles("CartoDB.Positron",group="CartoDB.Positron",options = providerTileOptions(opacity = 1))  %>%
setView(lat=1.701620, lng = 17.27356, zoom = 4)
})

Zooming <-reactive({
subset(country_centroid, COUNTRY == input$countryZoom)})

observe({
leafletProxy("map") %>%
setView(lng=Zooming()$X,lat=Zooming()$Y,zoom = Zooming()$Level)
})
})

country_centroid

 X       Y    Level   COUNTRY
 17.27    1.70  4   Africa
 -1.74   12.28  8   Burkina Faso
 29.88   -3.37  8   Burundi
 12.74    5.69  8   Cameroon
 23.65   -2.87  8   Congo DRC
 29.51    26.3  8   Egypt
 39.63    8.62  8   Ethiopia
 -1.20    7.97  8   Ghana
 -5.55    7.63  8   Ivory Coast
 37.81    0.60  8   Kenya
 34.30  -13.21  8   Malawi
 -3.52   17.36  8   Mali
 -8.89   29.11  8   Morocco
  8.11    9.62  8   Nigeria
-14.45   14.36  8   Senegal
-11.78    8.56  8   Sierra Leone
 30.01   16.05  8   Sudan
 34.80   -6.26  8   Tanzania
  9.57   34.11  8   Tunisia
 32.38    1.27  8   Uganda
 27.79  -13.45  8   Zambia
 29.87  -19.00  8   Zimbabwe

基本上一切都按照我的预期显示,但是当我使用下拉列表更改输入时,地图不会响应。我对此的理解是非常基本的,但我认为我对observe()有一些问题,但我从其他帖子中尝试过很多东西,而且此时我基本上处于亏损状态。提前谢谢!!

1 个答案:

答案 0 :(得分:0)

使用var.zoom作为selectInput的选项,input$countryZoom是一个数字,因此您必须在as.numeric中使用subset

subset(country_centroid, as.numeric(COUNTRY) == input$countryZoom))