He adaptado este código para crear matrices de etiquetas de categoría: quiero tomar cada grupo de categoría de etiqueta y, si su segmento de referencia de etiqueta coincide con alguna característica, agregarlo como una variable por su nombre de etiqueta a una lista (para usar para filtrar marcadores)
Aquí está mi código - adaptado de aquí
let ind00ss00test = new L.layerGroup(); console.log(ind00ss00test) let LR1test = new L.layerGroup() const subGroups1 = []; d3.json(mapsData, function(data){ industry = L.geoJSON(data, { pointToLayer: function (feature){ return new L.circleMarker([feature.geometry.coordinates[1], feature.geometry.coordinates[0]], { className: feature.properties.HASHcodePM, radius: getRadius(feature.properties.size), fillOpacity:0.8, color: getColor(feature.properties.type), fillColor: getColor(feature.properties.type), weight: getRadius(feature.properties.size)/3, }) }, onEachFeature: function(feature, layer) { layer.bindPopup("Name: " + feature.properties.Name + "<br>Type: "+ feature.properties.type) var HASHcode = feature.properties["HASHcodePM"]; var INDSShash = feature.properties.HASHcodePM.slice(0,9); //INDSS var LRhash = feature.properties.HASHcodePM.slice(9,12); //LR var tagCategories = subGroups1[HASHcode]; if (!tagCategories) { tagCategories = subGroups1[HASHcode] = L.geoJson(); } tagCategories.addLayer(layer); if (INDSShash == "IND00SS00") tagCategories.addTo(ind00ss00test); if (LRhash == "LR1") tagCategories.addTo(LR1test); }, }) });Así que quiero tomar las etiquetas que hacen referencia a segmentos de etiquetas:
Y quiero filtrar los marcadores de las capas con la propiedad LR1 en 'overlayremove':
const content = L.layerGroup().addTo(myMap); myMap.on('overlayadd overlayremove', () => { if (myMap.hasLayer(ind00group)) { ind00ss00test.addTo(content)) } if (myMap.hasLayer(ind99group)) { ind00ss99test.addTo(content)) } if (!myMap.hasLayer(LR1Group)) { LR1test.forEach(marker => content.removeLayer(marker)) } })La prueba ind00ss00 se puede agregar/quitar, pero los marcadores no se filtran usando LR1test.forEach (solo necesito filtrar los marcadores de los grupos de capas agregados si se anula la selección de LR1). Entonces, esencialmente, me gustaría poder tomar estos grupos de capas y agregarlos dinámicamente como variables a una lista basada en características similares , como esta , sin tener que agregar manualmente cada grupo de capas por nombre.
Cualquier sugerencia sera apreciada.
Bueno, lo descubrí si alguien tiene curiosidad. Manteniendo el mismo código que el anterior y reemplazando estas variables/opciones:
let lr1group = L.layerGroup() let ind00ss00group = L.layerGroup() let lr1List = []; let ind00ss00List = []; if (INDSShash =='IND00SS00' ) ind00ss00List.push(tagCategories); if (LRhash == "LR1") lr1List.push(tagCategories); const content = L.layerGroup().addTo(myMap); // filter selection myMap.on('overlayadd overlayremove', () => { if (myMap.hasLayer(ind00ss00group)) {ind00ss00List.forEach(marker=> marker.addTo(content)) } if (!myMap.hasLayer(ind00ss00group)) {ind00ss00List.forEach(marker => content.removeLayer(marker)) } if (!myMap.hasLayer(lr1group)) { lr1List.forEach(marker => content.removeLayer(marker)) } })