带有串扰和R形传单的响应式热图

带有串扰和R形传单的响应式热图,r,leaflet,crosstalk,R,Leaflet,Crosstalk,我想用R中的串扰制作一张带有点和响应热图的地图。如下所示: library(crosstalk) library(leaflet) library(DT) # Wrap data frame in SharedData sd <- SharedData$new(quakes[sample(nrow(quakes), 10),]) bscols( # Create a filter input filter_slider("mag", "Magnit

我想用R中的串扰制作一张带有点和响应热图的地图。如下所示:

library(crosstalk)
library(leaflet)
library(DT)

# Wrap data frame in SharedData
sd <- SharedData$new(quakes[sample(nrow(quakes), 10),])

bscols(
  # Create a filter input
  filter_slider("mag", "Magnitude", sd, column=~mag, step=0.1, width=250),
  leaflet(sd) %>% addTiles() %>% addMarkers() %>% addHeatmap())
)
库(串扰)
图书馆(单张)
图书馆(DT)
#在SharedData中包装数据帧
sd%addTiles()%%>%addMarkers()%%>%addHeatmap())
)
但是,正如运行代码后可以观察到的那样,这种方式在过滤时不会对热图产生响应效果


如何才能达到效果?

这可以用Shiny轻松完成。然而,如果你真的不想使用串扰,那么你就必须添加一些javascript来在每次标记被更改时重新绘制热图,因为串扰似乎无法做到这一点

可在此处找到一个工作示例:

以下是产生此结果的代码:

library(crosstalk)
library(leaflet)
library(leaflet.extras)
library(dplyr)

# Wrap data frame in SharedData
sd <- SharedData$new(quakes[sample(nrow(quakes), 10),])

bscols(widths=c(3,9),
  # Create a filter input
  filter_slider("mag", "Magnitude", sd, column=~mag, step=0.1),
  leaflet(sd) %>% 
    addTiles() %>% 
    addMarkers() %>% 
    addHeatmap(layerId="heatmap") %>%
    removeHeatmap("heatmap") %>%
    htmlwidgets::onRender("
      function(el,x){
        var myMap = this;
        var coord_state;
        var coords;
        
        function get_markers(){
          coord_state = [];
          myMap.eachLayer(function(layer){
            if (typeof layer.options.lat != 'undefined'){
              coord_state.push([layer.options.lat, layer.options.lng, 0.5]);
            }
          })
          return(coord_state)
        }
        
        function update_layer(){
          coords = get_markers()
          heat1.setLatLngs(coords);
          heat1.redraw();
        }
        
        var heat1 = L.heatLayer(get_markers(), {radius: 25}).addTo(myMap);
        myMap.on('layerremove', update_layer);
        myMap.on('layeradd', update_layer);
      }
    "))
库(串扰)
图书馆(单张)
图书馆(单张、附加资料)
图书馆(dplyr)
#在SharedData中包装数据帧
sd%
addTiles()%>%
addMarkers()%>%
添加热图(layerId=“heatmap”)%%>%
移除热图(“热图”)%>%
htmlwidgets::onRender(“
函数(el,x){
var myMap=this;
var coord_州;
var-coords;
函数get_markers(){
协调状态=[];
myMap.eachLayer(函数(层){
if(typeof layer.options.lat!=“未定义”){
协调状态推送([layer.options.lat,layer.options.lng,0.5]);
}
})
返回(协调状态)
}
函数更新_层(){
coords=get_markers()
加热1.设定温度(坐标);
1.重画();
}
var heat1=L.heatLayer(get_markers(),{radius:25}).addTo(myMap);
myMap.on('layerremove',update_layer);
myMap.on('layeradd',update_layer);
}
"))