2014-11-05 5 views
3

rCharts 및 전단지를 사용하여 반짝이는 매개 변수의 선택에 따라 다른 히트 맵을 사용자가 볼 수있게하고 싶습니다.rCharts 및 shiny가 포함 된 전단지 히트 맵 레이어 제거

히트 맵이 처음으로 표시되면 멋지게 보입니다.
다른 모든 경우 히트 맵은 첫 번째 레이어 위에 레이어로 표시됩니다.

현재 레이어/히트 맵 만 표시되도록 리프 맵을 재설정하는 방법은 무엇입니까?

이 샘플 코드는 유명한 Ramnath의 Houston 범죄 데모를 기반으로합니다.

library(shiny) 
library(rCharts) 
library(rjson) 
library(data.table) 
## 
crimedt <- as.data.table(na.omit(ggmap::crime[,c("address","offense","lon","lat")])) 
crimedt <- crimedt[,offense:=as.character(offense)] 
setkey(crimedt, lat,lon,offense) 
crime_cdt <- crimedt[, .(count = length(address)) 
          , by = .(lat,lon,offense)] 
setkey(crime_cdt,offense) 
seLabels <- unique(crime_cdt$offense) 

# 
runApp(list(
    ui = tabPanel("main", fluidPage(
    h4("Crime hotmap"), 
    column(3, 
    selectInput("slCrime", "Choose Crime Type:", 
              seLabels, seLabels[1]) 
    ), 
    column(9, 
      chartOutput('baseMap','leaflet'), 
      tags$style('.leaflet {height: 500px;}'), 
      tags$head(tags$script(src="http://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js")) 
      , uiOutput('datamap') 
    ) 
)), 
server = function(input, output, session) { 
output$baseMap<-renderMap({ 
baseMap <- Leaflet$new() 
mlon <- mean(crime_cdt$lon) 
mlat <- mean(crime_cdt$lat) 
baseMap$setView(c(mlat,mlon),9) 
baseMap$tileLayer(provider="OpenStreetMap") 
baseMap 
}) 
output$datamap<-renderUI({ 
    if(is.null(input$slCrime)) { return() } 
    q = quote(input$slCrime) 
    crime_cdt <- crime_cdt[eval(q), .(lat, lon, count)] 
    maxdat <- max(crime_cdt$count) 
    arrdat <- toJSONArray2(crime_cdt, json=F, names=F) 
    jsdat <- rjson::toJSON(arrdat) 

tags$body(tags$script(HTML(sprintf(" 
var addressPoints = %s 
var maxval = %f 
var heat = L.heatLayer(addressPoints, {maxZoom: 9, radius: 20, blur: 40}).addTo(map) 
</script>", jsdat, maxdat 
)))) 
}) 
} 
)) 

답변

1

내 문제에 대한 대답은 paulyeno에 의해 훌륭하게을 받고있다.

자바 스크립트 대신이 조각 위의 라인 :

tags$body(tags$script(HTML(sprintf(" 
var addressPoints = %s 
if (typeof heat === typeof undefined) { 
      heat = L.heatLayer(addressPoints, {maxZoom: 9, radius: 20, blur: 40}) 
      heat.addTo(map) 
      } else { 
      heat.setOptions({maxZoom: 9, radius: 20, blur: 40}) 
      heat.setLatLngs(addressPoints) 
      } 
</script>", jsdat 

가 현재 위의 코드가 반짝 0.10.1에서 실행 아니라에서 0.10.2.1 (버그 & rCharts을 반짝보고)를 참고