双击时将plotoutput替换为leafletoutput

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

我有一个来自plotOutput的输出,当双击地图时,我想看到来自leafletoutput的输出。在下面的代码中,当双击地图时,传单地图显示在谷歌地图下方。双击之前显示第一张图像,但双击之后,我只想查看传单地图。您对如何做到这一点有什么建议吗?

   library(shiny)
   library(shinydashboard)
   library(leaflet)
   library(dismo)
   library(ggmap)
   library(dplyr)

 shinyApp(
 ui = dashboardPage(
 dashboardHeader(title=""),

 dashboardSidebar(width = 200 ),


dashboardBody(   
  
  fluidRow(
    
    plotOutput("USA_GoogleMap",dblclick='plot_dblclick'),
    leafletOutput("leaflet_map")
    
    
  )
)),

 server=function(input, output, session) {

double_clicked <- reactiveValues(

center = NULL 
)

  # Handle double clicks on the plot

observeEvent(input$plot_dblclick, {

double_clicked$center <- c(input$plot_dblclick$x,input$plot_dblclick$y)

 })



output$USA_GoogleMap<-renderPlot({

statesMap = map_data("state")

xy=cbind(statesMap$long,statesMap$lat)
y=c(36.4,41.5,42.25,27.7,32.77)
x=c(-115.5,-100,-75,-81.5,-97.45)
state=c("Nevada","Nebraska","New York","Florida","Texas")
bases=cbind(x,y)
bases_mercator=data_frame(Mercator_X=Mercator(bases)[,1],Mercator_Y=Mercator(bases)[,2],State=state)


g = gmap(xy, type='satellite',zoom=4)   
plot(g, inter=TRUE)
points(Mercator(bases) , pch=20,cex=16, col=adjustcolor("white", alpha=0.2))
points(Mercator(bases) , pch=20,cex=16, col=adjustcolor("yellow", alpha=0.4))
text(bases_mercator$Mercator_X,bases_mercator$Mercator_Y,state)

})


 output$leaflet_map <- renderLeaflet({
if(!is.null(double_clicked$center)){
  
  leaflet()%>%setView(lng = -71.0589, lat = 42.3601, zoom = 12)%>%addTiles()
 }
})
}
   )
 shinyApp(ui = ui, server = server)

第一张图片

enter image description here

第二张图

enter image description here

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

首先让我先说 - 有一种比我展示的更好的方法。我只是还没有找到。我确信这是一个比我所知道的更好的程序员,但至少我可以说这是可行的。尽管它很丑陋。隐藏情节的关键是使用

conditionalPanel
(我以前不熟悉)。

我有一个文本触发器,用于识别绘图是否被双击,并使用它来触发是否显示面板。但是,如果不使用 textOutput 调用它,我就无法初始化文本...所以我有一个字体大小为零的 textOutput 调用。 再说一遍,肯定有一种比我现在做的更好的方式来触发它......但再说一遍,至少它有效。希望它会有所帮助。 library('shiny') library('shinydashboard') library('leaflet') library('dismo') library('ggmap') library('dplyr') shinyApp( ui = dashboardPage( dashboardHeader(title=""), dashboardSidebar(width = 200 ), dashboardBody( fluidRow( conditionalPanel( condition = 'output.condition == 0', plotOutput("USA_GoogleMap",dblclick='plot_dblclick') ), leafletOutput("leaflet_map"), textOutput('condition'), tags$head(tags$style("#condition{font-size: 0px}")) ) )), server=function(input, output, session) { double_clicked <- reactiveValues( center = NULL ) # Handle double clicks on the plot observeEvent(input$plot_dblclick, { double_clicked$center <- c(input$plot_dblclick$x,input$plot_dblclick$y) }) output$USA_GoogleMap<-renderPlot({ if(is.null(double_clicked$center)){ statesMap = map_data("state") xy=cbind(statesMap$long,statesMap$lat) y=c(36.4,41.5,42.25,27.7,32.77) x=c(-115.5,-100,-75,-81.5,-97.45) state=c("Nevada","Nebraska","New York","Florida","Texas") bases=cbind(x,y) bases_mercator=data_frame(Mercator_X=Mercator(bases)[,1],Mercator_Y=Mercator(bases)[,2],State=state) g = gmap(xy, type='satellite',zoom=4) plot(g, inter=TRUE) points(Mercator(bases) , pch=20,cex=16, col=adjustcolor("white", alpha=0.2)) points(Mercator(bases) , pch=20,cex=16, col=adjustcolor("yellow", alpha=0.4)) text(bases_mercator$Mercator_X,bases_mercator$Mercator_Y,state) } }) output$leaflet_map <- renderLeaflet({ if(!is.null(double_clicked$center)){ leaflet()%>%setView(lng = -71.0589, lat = 42.3601, zoom = 12)%>%addTiles() } }) output$condition <- renderText({ ifelse(!is.null(double_clicked$center), 1, 0) }) } )

	
© www.soinside.com 2019 - 2024. All rights reserved.