2016-11-30 4 views
0

私はリーフレットで遊んでいて、1つのフィーチャーグループに円マーカーを、他のフィーチャーグループにポリゴンを配置したマップを作成しました。レイヤーをクリックしたときのフィーチャーグループの名前/ IDの取得方法

サークルマーカーは、クリックするとクリックした場所で、マップからレイヤーを削除し、適切なポリゴンのfeatureGroupをマップに追加します。今は、その名前でサークルを持つfeatureGroupを削除しています。

それはあなたがサークルマーカーのいずれかをクリックしたときに、親featureGroups' 名前またはIDを取得することは可能ですか?

私はクリック可能なサークルでさらにfeatureGroupsを追加していますので、直接参照するのではなくクリックされた円の親フィーチャグループによってフィーチャグループをマップから動的に削除したいと思います。

答えて

3

いいえ

リーフレットには「親グループ」という概念はありません。 L.Layerは例えば、ゼロに1を属し、または多くのL.LayerGroupのことができます。:

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を使用して、特定のレイヤーがグループに含まれているかどうかを確認できます。

あなたは(あなたがプラグインのチュートリアルを読んで、内部アーキテクチャについて少し知ってました)リーフレットのソースコードを恐れていない場合は、することもできますのようなものを持つ猿パッチこの機能は、:

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; 
    } 
}); 
+0

ありがとうIvan! – Dixos

関連する問題