gpt4 book ai didi

javascript - R 传单 : Assign multiple groups to a layer to filter data and change column represented

转载 作者:行者123 更新时间:2023-12-04 01:19:29 26 4
gpt4 key购买 nike

我正试图在 R 传单中找到一种方法来包含过滤掉数据中的组的叠加按钮。我还需要包括单选按钮,用于切换数据中表示的列。我似乎找不到使用 addLayersControl() 函数在 R 传单中执行此操作的方法。

我最初认为可以将多个组添加到单个图层并使用 baseGroups 和 overlayGroups(如下面的代码所示)。然而,这并没有达到预期的效果。如果有人可以建议一种替代方法来实现这一点,我将不胜感激。最好没有光泽。

library(dplyr)
library(leaflet)

data <- data.frame(Name = c("A", "A", "A", "B", "B", "C", "C", "C"),
Value1 = c(12,43,54,34,23,77,44,22),
Value2 = c(6,5,2,7,5,6,4,3),
Lat = c(51.1, 51.6, 57.3, 52.4, 56.3, 54.3, 60.4, 49.2),
Lon = c(5, -3, -2, -1, 4, 3, -5, 0))
data %>%
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addCircles(lat=~Lat, lng=~Lon, radius = ~Value1*1000, group=c(~Name, "Value1")) %>%
addCircles(lat=~Lat, lng=~Lon, radius = ~Value2, group=c(~Name, "Value2")) %>%
addLayersControl(
baseGroups = c("Value1", "Value2"),
overlayGroups = c("A", "B", "C"),
options = layersControlOptions(collapsed = F)
)

Image: Output not what I expect

最佳答案

下面是一个非常不优雅和 hacky 的问题解决方案。它为每个圆分配一个图层 ID,并使用一些 javascript 来确定在给定输入复选框的情况下应显示哪个圆。

可在此处找到工作演示:https://rpubs.com/Jumble/leaflet_layer_control

如果有人有更优雅的解决方案,请分享。

library(dplyr)
library(leaflet)
library(htmlwidgets)

data <- data.frame(ID = c("1", "2","3","4","5","6","7","8"),
Name = c("A", "A", "A", "B", "B", "C", "C", "C"),
Value1 = c(12,43,54,34,23,77,44,22),
Value2 = c(6,5,2,7,5,6,4,3),
Lat = c(51.1, 51.6, 57.3, 52.4, 56.3, 54.3, 60.4, 49.2),
Lon = c(5, -3, -2, -1, 4, 3, -5, 0))
data %>%
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addCircles(lat=~Lat, lng=~Lon, radius = ~Value1*1000, group=~Name, label=~Name, popup=~as.character(Value1), layerId = ~paste(ID,"Value1", sep="")) %>%
addCircles(lat=~Lat, lng=~Lon, radius = ~Value2, group=~Name, label=~Name, popup=~as.character(Value2), layerId = ~paste(ID,"Value2", sep="")) %>%
addLayersControl(
baseGroups = c("Value1", "Value2"),
overlayGroups = c("A", "B", "C"),
options = layersControlOptions(collapsed = F)
) %>%
htmlwidgets::onRender("
function(el, x) {
var myMap = this;
var baseLayer = 'Value1';
myMap.eachLayer(function(layer){
var id = layer.options.layerId;
if (id){
if ('Value1' !== id.substring(1,)){
layer.getElement().style.display = 'none';
}
}
})
console.log(myMap.baselayer);
myMap.on('baselayerchange',
function (e) {
baseLayer=e.name;
myMap.eachLayer(function (layer) {
var id = layer.options.layerId;
if (id){
if (e.name !== id.substring(1,)){
layer.getElement().style.display = 'none';
layer.closePopup();
}
if (e.name === id.substring(1,)){
layer.getElement().style.display = 'block';
}
}

});
})
myMap.on('overlayadd', function(e){
myMap.eachLayer(function(layer){
var id = layer.options.layerId;
if (id){
if (baseLayer !== id.substring(1,)){
layer.getElement().style.display = 'none';
}
}
})
})
}")

关于javascript - R 传单 : Assign multiple groups to a layer to filter data and change column represented,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62817005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com