Creating Leaflet heatmaps in r and shiny using rCharts

吃可爱长大的小学妹 提交于 2019-11-30 09:54:35
tospig

Turning my comment into an answer (making use of this question/answer)

library(rCharts)
library(shiny)
library(data.table)

runApp(
  list(ui = (pageWithSidebar(
    headerPanel("Heatmap"),
    sidebarPanel( width=2),
    mainPanel(
      chartOutput("baseMap", "leaflet"),
      tags$style('.leaflet {height: 500px;}'),
  tags$head(tags$script(src="http://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js")),
      uiOutput('heatMap')
    )
  )),
  server = function(input, output) {

    data(crime, package="ggmap")
    crime <- as.data.table(crime)

    output$baseMap  <- renderMap({
      baseMap <- Leaflet$new()
      baseMap$setView(c(29.7632836,  -95.3632715), 10)
      baseMap$tileLayer(provider = "MapQuestOpen.OSM")
      baseMap
    })

    output$heatMap <- renderUI({

      ## changed to use data.table for speed
      crime_dat <- crime[(lat != ""), .(count = .N), by=.(lat, lon)]
          ## there's a blank in there somewhere

      ## I was having issues with toJSON, so I'm creating my own JSON
      j <- paste0("[",crime_dat[,lat], ",", crime_dat[,lon], ",", crime_dat[,count], "]", collapse=",")
      j <- paste0("[",j,"]")

      tags$body(tags$script(HTML(sprintf("
                      var addressPoints = %s
                      var heat = L.heatLayer(addressPoints).addTo(map)"
                                         , j
      ))))

    })
  }
  ))

And to show it working

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