mapview for shiny

这一生的挚爱 提交于 2019-11-30 11:46:58

mapview and shiny are not naturally made for each other. However, mapview is based on leaflet so we can leverage shiny support from leaflet. The trick is to set up your map object using mapview and then calling the @map slot (the leaflet part) inside renderLeaflet()

ui.R

library(shiny)
library(shinydashboard)
library(mapview)

header <- dashboardHeader(title="Ardusky")

sidebar <- dashboardSidebar(
)

body <- dashboardBody(
  # Define UI for application
  fluidPage(
    mainPanel(
      leafletOutput("mapplot"),
      mapview:::plainViewOutput("test")
    ))
)

ui <- dashboardPage(header, sidebar, body, skin="black")

server.ui

library(shiny)
library(mapview)
library(sp)

shinyServer(function(input, output, session) {

  data(meuse)
  coordinates(meuse) <- ~x+y
  proj4string(meuse) <- CRS("+init=epsg:28992")

  data(meuse.grid)
  coordinates(meuse.grid) <- ~x+y
  proj4string(meuse.grid) <- CRS("+init=epsg:28992")
  gridded(meuse.grid) <- TRUE

  m <- mapview(meuse.grid, zcol = "dist") + meuse

  output$mapplot <- renderLeaflet({
    m@map
  })

})

Does this solve your problem?


UPDATE: I have just added mapviewOutput and renderMapview to the development version on github. This means that we can now skip the explicit call to the @map slot of the mapview object. So something like output$mapplot <- renderMapview(m) should work now.

The development version of mapview can be installed with devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop")

UPDATE (2018/04/01): renderMapview and mapviewOutput currently do not work! Thus, calling renderLeaflet({ m@map }) is currently the way to use mapview with shiny.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!