【问题标题】:How to get Name/ID of featureGroup when layer is clicked单击图层时如何获取要素组的名称/ ID
【发布时间】:2016-11-30 09:10:44
【问题描述】:

我正在玩 Leaflet,我创建了一张地图,其中一些圆形标记放置在一个特征组中,多边形放置在其他特征组中。

圆形标记是可点击的点,一旦点击,就会从地图中删除图层并将正确的多边形特征组添加到地图中。现在,我正在删除名称为圆圈的 featureGroup。

当您单击其中一个圆圈标记时,是否可以获取父要素组的 NameID

当我添加更多带有可点击圆圈的功能组时,我想通过点击的圆圈父功能组从地图中动态删除该功能组,而不是直接引用它。

【问题讨论】:

    标签: javascript leaflet


    【解决方案1】:

    传单没有“父组”的概念。一个L.Layer 可以属于零个、一个或多个L.LayerGroups,例如:

    var kyiv = [50.5, 30.5],
        lnd = [51.51, -0.12],
        sf = [37.77, -122.42],
        dc = [38.91, -77.04],
        trd = [63.41, 10.41],
        mad = [40.40, -3.7];
    
    var markerKyiv = L.marker(kyiv).addTo(all),
        markerLnd  = L.marker(lnd).addTo(all),
        markerDC   = L.marker(dc).addTo(all),
        markerSF   = L.marker(sf).addTo(all),
        markerTrd  = L.marker(trd).addTo(all),
        markerMad  = L.marker(mad).addTo(all);
    
    var euro = L.featureGroup([markerTrd, markerMad, markerKyiv, markerLnd]).addTo(map);
    var usa  = L.featureGroup([markerDC, markerSF]).addTo(map);
    var northern  = L.featureGroup([markerTrd, markerKyiv, markerLnd]).addTo(map);
    var southern  = L.featureGroup([markerDC, markerSF, markerMad]).addTo(map);
    
    L.control.layers({},{
      Euro: euro,
      USA: usa,
      Northern: northern,
      Southern: southern
    },{
      collapsed:false
    }).addTo(map);
    

    将其视为一个工作示例over here

    不过,您可能希望使用hasLayer method 来检查给定层是否在组中。

    如果您不害怕 Leaflet 源代码(并且您已经阅读了插件教程并且对内部架构有所了解),您还可以对这个功能进行猴子补丁,例如:

    L.LayerGroup.include({
        addLayer: function (layer) {
            var id = this.getLayerId(layer);
            this._layers[id] = layer;
            if (this._map) {
                this._map.addLayer(layer);
            }
    
            // Add this group to the layer's known groups
            layer._groups.push(this);
    
            return this;
        },
    
        removeLayer: function (layer) {
            var id = layer in this._layers ? layer : this.getLayerId(layer);
            if (this._map && this._layers[id]) {
                this._map.removeLayer(this._layers[id]);
            }
            delete this._layers[id];
    
            // Remove this group from the layer's known groups
            layer._groups.splice(layer._groups.indexOf(this), 1);
    
            return this;
        }
    });
    
    // Make sure to init a property in L.Layer
    L.Layer.addInitHook(function(){
        this._groups = [];
    });
    
    // Add a public getter for the layer's groups
    L.Layer.include({
        getGroups: function() {
            return this._groups;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2012-12-27
      • 2021-03-28
      • 1970-01-01
      相关资源
      最近更新 更多