Leaflet layerGroup控件

时间:2013-04-30 04:41:36

标签: javascript jquery leaflet

我有一系列Leaflet FeatureGroups,它们由一系列GeoJSON图层组成。 FeatureGroup在概念上类似,但出于某些控制原因,我需要将它们分开。我还需要能够立即打开和关闭它们。有没有办法做到这一点?

我查看了文档,找不到FeatureGroup打开和关闭时触​​发的事件。还没有记录的方法将FeatureGroups集中到某种类型的超级组中。

对于那些想要想象它的人来说,这是工作流程:

GeoJSON获取在Leaflet中转换为图层的数据。这是不同的行政边界(例如国家,县等)。每个层根据其类型进入不同的FeatureGroup(例如,阿肯色州和纽约进入State FeatureGroup,福特和林肯县进入County FeatureGroup)。这样我可以控制不同FeatureGroup的不透明度和样式(例如,当我查看状态的县时,我可以降低所有其他状态的不透明度)。我还需要一种方法来关闭所有这些并重新开启。 Leaflet提供了基于FeatureGroup在FeatureGroup上执行此操作的功能,但不是超集的功能。

关于如何实现这一目标的任何想法?


新版问题:

打开和关闭图层组时触发的事件是什么?无论如何都要加入那个?

2 个答案:

答案 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},{}));

我希望这会有所帮助。