Ich habe diesen Code angepasst, um Kategorie-Tag-Arrays zu erstellen - ich möchte jede tagCategory-Gruppe nehmen und wenn ihr Label-Referenz-Slice mit einem Feature übereinstimmt - füge es als Variable mit seinem Label-Namen zu einer Liste hinzu (zur Verwendung zum Filtern von Markern).
Hier ist mein Code - angepasst von hier
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);
},
})
});
Also möchte ich die Labels nehmen, die auf Label-Slices verweisen -
Und ich möchte die Markierungen aus Ebenen mit der Eigenschaft LR1 auf 'overlayremove' filtern:
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))
}
})
Der ind00ss00test kann hinzugefügt/entfernt werden, aber die Markierungen werden nicht mit LR1test.forEach gefiltert (ich muss nur Markierungen aus den hinzugefügten Ebenengruppen filtern, wenn LR1 deaktiviert ist.) Also im Wesentlichen - ich würde gerne nehmen können diese Ebenengruppen und fügen Sie sie dynamisch als Variablen zu einer Liste hinzu, die auf ähnlichen Merkmalen basiert - wie dieser -, ohne jede Ebenengruppe manuell nach Namen hinzufügen zu müssen.
Alle mögliche Vorschläge würden geschätzt.
Lösung des Problems
Nun, ich habe es herausgefunden, falls es jemanden interessiert. Behalten Sie den gleichen Code wie oben bei und ersetzen Sie diese Variablen/Optionen:
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))
}
})
Keine Kommentare:
Kommentar veröffentlichen