2014-06-17 20 views
5

Tôi đang sử dụng bản trình diễn tuyệt vời của Ramnath Vaidyanathan tại http://rmaps.github.io/blog/posts/leaflet-heat-maps/index.html và tôi muốn tái tạo bản đồ nhiệt của mình cho ứng dụng sáng bóng của tôi.Tạo bản đồ nhiệt Leaflet trong r và sáng bóng bằng rCharts

Khi tôi cố gắng sử dụng mã của Ramnath sáng bóng mặc dù tôi chỉ quản lý để có được bản đồ, nhưng không phải bản đồ nhiệt. Có thể một phần lý do của vấn đề của tôi là mã ban đầu từ Ramnath sử dụng các rMaps trong khi tôi đang sử dụng rCharts (cũng được phát triển bởi Ramnath) vì nó được phát triển/tích hợp tốt hơn với sáng bóng và tất nhiên bao gồm Leaflet. Tôi đã cố gắng sử dụng các lệnh rMaps với các lệnh chung của HTML là renderUIhtmlOutput mà không thành công.

Đây là mã sáng bóng mà không làm việc (nó chỉ hiển thị bản đồ bỏ qua các thư viện 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

[Bản đồ nhiệt bằng sáng bóng với r Biểu đồ] (http://stackoverflow.com/q/33193546/4002530) có một giải pháp – tospig

Trả lời

4

Biến nhận xét của tôi vào một câu trả lời (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 
    )))) 

    }) 
    } 
)) 

Và để hiển thị nó hoạt động

enter image description here

+0

tôi có thể đặt một nơi nào đó quy mô khi có màu xanh, cam hoặc đỏ? –

Các vấn đề liên quan