我有一系列Leaflet FeatureGroups,它们由一系列GeoJSON图层组成。 FeatureGroup在概念上类似,但出于某些控制原因,我需要将它们分开。我还需要能够立即打开和关闭它们。有没有办法做到这一点?
我查看了文档,找不到FeatureGroup打开和关闭时触发的事件。还没有记录的方法将FeatureGroups集中到某种类型的超级组中。
对于那些想要想象它的人来说,这是工作流程:
GeoJSON获取在Leaflet中转换为图层的数据。这是不同的行政边界(例如国家,县等)。每个层根据其类型进入不同的FeatureGroup(例如,阿肯色州和纽约进入State FeatureGroup,福特和林肯县进入County FeatureGroup)。这样我可以控制不同FeatureGroup的不透明度和样式(例如,当我查看状态的县时,我可以降低所有其他状态的不透明度)。我还需要一种方法来关闭所有这些并重新开启。 Leaflet提供了基于FeatureGroup在FeatureGroup上执行此操作的功能,但不是超集的功能。
关于如何实现这一目标的任何想法?
新版问题:
打开和关闭图层组时触发的事件是什么?无论如何都要加入那个?
答案 0 :(得分:1)
我最终得到了我常用的LayerGroups或FeatureGroups,然后是一个包含所有组中所有图层的FeatureGroup。因此,当您向FeatureGroup添加形状或图层时,还要将其添加到用于跟踪所有内容的FeatureGroup中。当然,如果你删除不要忘记删除它。 您可以将此基本FeatureGroup与其他组一起添加到地图中,它应该没问题。
答案 1 :(得分:1)
我不认为Leaflet当前打开或关闭LayerGroup时会提供一个事件(你正在谈论L.Control,对吧?)。我同意它会有用。现在,您只需扩展代码即可完成您需要完成的任务。例如:
var customLayerControl = L.Control.Layer.extend({
_onInputClick: function(Layer, name){
// This is just like calling super() if this confuses you!
L.Control.Layers.prototype._onInputClick.call(this,Layer,name);
// Do stuff
}
});
然后使用自定义图层控件而不是使用L.Control.Layers:
map.addControl(new customLayerControl({}, {'Custom Layer':customLayer},{}));
我希望这会有所帮助。