Используйте плагин leaflet-groupedlayercontrol для достижения желаемого результата.
Когда компонент монтируется, вы можете отделить свой слой с помощью объекта groupedOverlays
, передав ключи как объекты, где их имя будет ваш разделительный слой похож на словарь:
useEffect(() => {
var basemaps = {
Grayscale: L.tileLayer(
"http://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png",
{
maxZoom: 18,
attribution:
'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}
),
Streets: L.tileLayer(
"http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{
maxZoom: 19,
attribution:
'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}
)
};
var groups = {
cities: new L.LayerGroup(),
restaurants: new L.LayerGroup(),
dogs: new L.LayerGroup(),
cats: new L.LayerGroup()
};
L.marker([39.61, -105.02], { icon })
.bindPopup("Littleton, CO.")
.addTo(groups.cities);
...
var map = L.map("map", {
center: [39.73, -104.99],
zoom: 10,
layers: [basemaps.Grayscale, groups.cities]
});
// Overlay layers are grouped
var groupedOverlays = {
SelectType: {
Type1Layer: groups.cities, // use your one
Type2Layer: groups.restaurants // use your one
},
SelectCategory: {
Category1: groups.dogs, // use your one
Category2: groups.cats // use your one
}
};
// Use the custom grouped layer control, not "L.control.layers"
L.control.groupedLayers(basemaps, groupedOverlays).addTo(map);
}, []);
return <div id="map" style={{ width: "600px", height: "400px" }} />;
Замените свои слои на те, что в экзамене, и вы должны быть хорошими
демо