R 根据用户输入放大传单地图

R 根据用户输入放大传单地图,r,shiny,leaflet,R,Shiny,Leaflet,我试图找出如何根据用户输入放大地图。我从美国地图开始,然后尝试根据邮政编码和英里数放大到特定位置: shinyUI(fluidPage( # Application title titlePanel("Starbucks Locator"), # Sidebar with a slider input for number of bins sidebarLayout( sidebarPanel( textInput("zip","Zip Code:",

我试图找出如何根据用户输入放大地图。我从美国地图开始,然后尝试根据邮政编码和英里数放大到特定位置:

shinyUI(fluidPage(

  # Application title
  titlePanel("Starbucks Locator"),

  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
       textInput("zip","Zip Code:", value = "18101"),
       sliderInput("radius",
                   "Radius",
                   min = 1,
                   max = 25,
                   value = 15),
       actionButton("go", "Submit")
    ),

    # Show a plot of the generated distribution
    mainPanel(
       leafletOutput("myMap")
    )
  )
))
这是服务器代码:

library(shiny)
library(ZipRadius)
library(leaflet)
shinyServer(function(input, output) {
    data  <- reactive({x <- readRDS("Starbucks.rds")})
  output$myMap <- renderLeaflet({
    df    <- data()
    m     <- leaflet(data = df) %>% 
             addTiles() %>%
             addMarkers(lng = ~Lon, lat = ~Lat)

  })
  eventReactive(input$go, {
    zip_include  <- zipRadius(input$zip, input$radius)
  })
  leafletProxy("myMap") %>% fitBounds(~min(zip_include$longitude), ~min(zip_include$latitude),
                                      ~max(zip_include$longitude), ~max(zip_include$latitude))
})
库(闪亮)
图书馆(ZipRadius)
图书馆(单张)
shinyServer(功能(输入、输出){

数据您的服务器代码存在一些问题

  • 您不需要在反应式表达式中创建数据,因为您只上传一次(我猜您不会更改坐标或添加另一行)
  • 您的
    renderleaft
    功能可以简化
  • 而不是使用
    eventReactive
    使用
    observeEvent
    当您按下
    go
    按钮时,此功能会触发。您必须在观察者中添加按钮单击应触发的所有动作。因此,您还必须在此处插入
    proxy
    功能
  • 删除
    fitBounds
    函数中的
    ~
    符号。您已经指向
    fitBounds
    中的
    zip\u include
    数据集
  • 工作服务器(提供csv)

    shinyServer(功能(输入、输出){
    数据
    
    shinyServer(function(input, output) {
      data  <- read.csv("c:/starbucks_us_locations.csv")
      names(data) <- c('Lon', 'Lat')
      output$myMap <- renderLeaflet({leaflet(data) %>% 
          addTiles() %>%
          addMarkers(lng = ~Lon, lat = ~Lat)
      })
    
      observeEvent(input$go, {
        zip_include  <- zipRadius(input$zip, input$radius)
        print(zip_include)
        leafletProxy("myMap") %>% fitBounds(min(zip_include$longitude), min(zip_include$latitude),
                                            max(zip_include$longitude), max(zip_include$latitude))
      })
    })