2014-06-17 20 views
5

Sto usando la grande demo di Ramnath Vaidyanathan allo http://rmaps.github.io/blog/posts/leaflet-heat-maps/index.html e vorrei riprodurre la sua mappa di calore per la mia applicazione lucida.Creazione di mappe di calore per volantini in r e lucente usando rCharts

Quando cerco di usare il codice di Ramnath in lucido, riesco solo ad ottenere la mappa, ma non la mappa di calore. Probabilmente parte del motivo dei miei problemi è che il codice originale di Ramnath usa rMaps mentre sto usando rCharts (anch'esso sviluppato da Ramnath) in quanto è più sviluppato/meglio integrato con il lucido e ovviamente include Leaflet. Ho provato a usare rMaps con i comandi generici HTML di shiny renderUI e htmlOutput senza successo.

Questo è il codice lucida che non funziona (solo visualizza la mappa ignorando la biblioteca hotspot):

library(rCharts) 
library(shiny) 

runApp(
list(ui = (pageWithSidebar(
headerPanel("Heatmap"), 
sidebarPanel(width=2), 
mainPanel(
mapOutput("leafmap") 
) 
)), 
server = function(input, output) { 
output$leafmap <- renderMap({ 
L2 <- Leaflet$new() 
L2$setView(c(29.7632836, -95.3632715), 10) 
L2$tileLayer(provider = "MapQuestOpen.OSM") 
data(crime, package = 'ggmap') 
library(plyr) 
crime_dat = ddply(crime, .(lat, lon), summarise, count = length(address)) 
crime_dat = toJSONArray2(na.omit(crime_dat), json = F, names = F) 
L2$addAssets(jshead = c(
"http://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js" 
)) 
L2$setTemplate(afterScript = sprintf(" 
           <script> 
           var addressPoints = %s 
           var heat = L.heatLayer(addressPoints).addTo(map)   
           </script> 
           ", rjson::toJSON(crime_dat) 
)) 

L2 
}) 
} 
)) 
+0

[Mappa di calore in lucido con r Grafici] (http://stackoverflow.com/q/33193546/4002530) ha una soluzione – tospig

risposta

4

Girando il mio commento in una risposta (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 
    )))) 

    }) 
    } 
)) 

E per mostrarlo funzionante

enter image description here

+0

posso mettere da qualche parte una scala quando essere blu, arancione o rosso? –

Problemi correlati