用rCharts和Shining去除传单热图层

用rCharts和Shining去除传单热图层,r,leaflet,shiny,heatmap,rcharts,R,Leaflet,Shiny,Heatmap,Rcharts,我希望能够让用户看到不同的热图根据参数的选择在光泽,使用rCharts和传单 第一次显示热图时,它看起来很棒。 所有其他时间,热图都显示为第一个热图顶部的层 如何重置叶贴图,以便仅显示当前图层/热量贴图 此示例代码基于臭名昭著的Ramnath的休斯顿犯罪演示 library(shiny) library(rCharts) library(rjson) library(data.table) ## crimedt <- as.data.table(na.omit(ggmap::crim

我希望能够让用户看到不同的热图根据参数的选择在光泽,使用rCharts和传单

第一次显示热图时,它看起来很棒。
所有其他时间,热图都显示为第一个热图顶部的层

如何重置叶贴图,以便仅显示当前图层/热量贴图

此示例代码基于臭名昭著的Ramnath的休斯顿犯罪演示

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
))))
})
}
))
库(闪亮)
图书馆(艺术)
图书馆(rjson)
库(数据表)
##   

我的问题的答案由保列诺巧妙地给出了

这段javascript替换了上面的几行:

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
tags$body(tags$script(HTML)(sprintf()
var addressPoints=%s
if(热量类型===未定义类型){
heat=L.heatLayer(地址点,{maxZoom:9,半径:20,模糊:40})
heat.addTo(地图)
}否则{
setOptions({maxZoom:9,radius:20,blur:40})
加热设置(地址点)
}
“,jsdat
请注意,目前上述代码在Shinny 0.10.1中运行,但不在0.10.2.1中运行(向Shinny&rCharts报告了错误)