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