R 如何在传单地图中的闪亮应用程序中停止反应?
在我闪亮的应用程序中,我有一个R 如何在传单地图中的闪亮应用程序中停止反应?,r,shiny,leaflet,reactive-programming,R,Shiny,Leaflet,Reactive Programming,在我闪亮的应用程序中,我有一个选择Input站点,列出所有气象站和传单地图。按照我前面的问题(),我可以setView而无需更改缩放级别 现在我想添加一个新功能,允许用户单击地图中的标记,并在selectInput中更新所选值。在我的当前代码中(请参见下面的示例),将更新站点的选定值,但也会调用设置视图,以更改视图点 我期望的功能是1)选择新站点更新视图,2)单击地图不更新视图 我如何打破这两个特性之间的联系?我想我可以使用隔离来实现它。老实说,我仍然对隔离感到困惑 谢谢你的建议 以下是我的示例
选择Input
站点
,列出所有气象站和传单地图。按照我前面的问题(),我可以setView
而无需更改缩放级别
现在我想添加一个新功能,允许用户单击地图中的标记,并在selectInput
中更新所选值。在我的当前代码中(请参见下面的示例),将更新站点
的选定值,但也会调用设置视图
,以更改视图点
我期望的功能是1)选择新站点更新视图,2)单击地图不更新视图
我如何打破这两个特性之间的联系?我想我可以使用隔离来实现它。老实说,我仍然对隔离感到困惑
谢谢你的建议
以下是我的示例代码:
library(shiny)
library(leaflet)
df <- data.frame(
site = c('S1', 'S2'),
lng = c(140, 120),
lat = c(-20, -30),
stringsAsFactors = FALSE)
# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(
selectInput('site', 'Site', df$site),
leafletOutput('map')
))
server <- shinyServer(function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng = 133, lat = -25, zoom = 4) %>%
addMarkers(lng = df$lng, lat = df$lat, popup = df$site)
})
observe({
sel_site <- df[df$site == input$site,]
isolate({
new_zoom <- 4
if (!is.null(input$map_zoom)) new_zoom <- input$map_zoom
leafletProxy('map') %>%
setView(lng = sel_site$lng, lat = sel_site$lat, zoom = new_zoom)
})
})
observe({
event <- input$map_marker_click
if (is.null(event))
return()
click_site <- df %>%
filter(lng == event$lng, lat == event$lat)
isolate({
updateSelectInput(session, 'site', selected = click_site$site)
})
})
})
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)
df这并不是你想要的,因为它使用了一个按钮,但也许你可以好好利用它。我还修复了你的过滤
library(shiny)
library(leaflet)
df <- data.frame(
site = c('S1', 'S2'),
lng = c(140, 120),
lat = c(-20, -30),
stringsAsFactors = FALSE)
ui <- shinyUI(fluidPage(
selectInput('site', 'Site', df$site),
actionButton("center","Center map on site"),
leafletOutput('map')
))
server <- shinyServer(function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng = 133, lat = -25, zoom = 4) %>%
addMarkers(lng = df$lng, lat = df$lat, popup = df$site)
})
observeEvent(input$center,{
sel_site <- df[df$site == input$site,]
isolate({
new_zoom <- 4
if (!is.null(input$map_zoom)) new_zoom <- input$map_zoom
leafletProxy('map') %>%
setView(lng = sel_site$lng, lat = sel_site$lat, zoom = new_zoom)
})
})
observe({
event <- input$map_marker_click
if (is.null(event))
return()
else{
latdist<- unlist(lapply((event$lat - df$lat), FUN=abs))
if (min(latdist)<4){
match <-
df[with(df, {which(lat[latdist==min(latdist)] == lat )
}), ]
if(abs(match$lng-event$lng)<4)
{
click_site <- df[with(df,{ which(lng == match$lng & lat == match$lat) }),]
}
updateSelectInput(session, 'site', selected = click_site$site)
}# first if
} # end else
})
})
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)
df这并不是你想要的,因为它使用了一个按钮,但也许你可以好好利用它。我还修复了你的过滤
library(shiny)
library(leaflet)
df <- data.frame(
site = c('S1', 'S2'),
lng = c(140, 120),
lat = c(-20, -30),
stringsAsFactors = FALSE)
ui <- shinyUI(fluidPage(
selectInput('site', 'Site', df$site),
actionButton("center","Center map on site"),
leafletOutput('map')
))
server <- shinyServer(function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng = 133, lat = -25, zoom = 4) %>%
addMarkers(lng = df$lng, lat = df$lat, popup = df$site)
})
observeEvent(input$center,{
sel_site <- df[df$site == input$site,]
isolate({
new_zoom <- 4
if (!is.null(input$map_zoom)) new_zoom <- input$map_zoom
leafletProxy('map') %>%
setView(lng = sel_site$lng, lat = sel_site$lat, zoom = new_zoom)
})
})
observe({
event <- input$map_marker_click
if (is.null(event))
return()
else{
latdist<- unlist(lapply((event$lat - df$lat), FUN=abs))
if (min(latdist)<4){
match <-
df[with(df, {which(lat[latdist==min(latdist)] == lat )
}), ]
if(abs(match$lng-event$lng)<4)
{
click_site <- df[with(df,{ which(lng == match$lng & lat == match$lat) }),]
}
updateSelectInput(session, 'site', selected = click_site$site)
}# first if
} # end else
})
})
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)
df您在哪里找到引用输入$map\u zoom
的文档?我有一个有点相关的问题,我正试图弄清到底。我不完全清楚这个问题,但我们正在构建mapedit
,以帮助实现其中一些目标。请看邮报。我们希望得到反馈。您在哪里找到引用input$map\u zoom
的文档?我有一个有点相关的问题,我正试图弄清到底。我不完全清楚这个问题,但我们正在构建mapedit
,以帮助实现其中一些目标。请看邮报。我们希望得到反馈。