我现在所拥有的主要基于这篇文章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()有一些问题,但我已经尝试了其他帖子中的很多东西,但此时基本上不知所措。
使用
var.zoom
作为selectInput
的选择,input$countryZoom
是一个数字,所以你也必须在as.numeric
中使用subset
:
subset(country_centroid, as.numeric(COUNTRY) == input$countryZoom))