根据输入更改传单闪亮的缩放

问题描述 投票:0回答:1

我现在所拥有的主要基于这篇文章Leaflet R闪亮:选择和缩放

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

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))
))))

服务器.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)
})
})

国家质心

 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()有一些问题,但我已经尝试了其他帖子中的很多东西,但此时基本上不知所措。

r shiny r-leaflet
1个回答
0
投票

使用

var.zoom
作为
selectInput
的选择,
input$countryZoom
是一个数字,所以你也必须在
as.numeric
中使用
subset

subset(country_centroid, as.numeric(COUNTRY) == input$countryZoom))
© www.soinside.com 2019 - 2024. All rights reserved.