import React, { useState, useEffect } from "react"; import { useMap } from "../MapComponent"; import { Layer } from "ol/layer"; import { Checkbox, FormControlLabel } from "@mui/material"; import WebGLVectorTileLayer from "ol/layer/WebGLVectorTile"; const LayerControl: React.FC = () => { const map = useMap(); const [layers, setLayers] = useState([]); const [layerVisibilities, setLayerVisibilities] = useState< Map >(new Map()); useEffect(() => { if (!map) return; const mapLayers = map .getLayers() .getArray() .filter((layer) => layer instanceof WebGLVectorTileLayer) as Layer[]; setLayers(mapLayers); const visible = new Map(); mapLayers.forEach((layer) => { visible.set(layer, layer.getVisible()); }); setLayerVisibilities(visible); }, [map]); const handleVisibilityChange = (layer: Layer, visible: boolean) => { layer.setVisible(visible); setLayerVisibilities((prev) => new Map(prev).set(layer, visible)); }; return (
{layers.map((layer, index) => ( handleVisibilityChange(layer, e.target.checked) } size="small" /> } label={layer.get("name") || `Layer ${index + 1}`} sx={{ fontSize: "0.7rem", "& .MuiFormControlLabel-label": { fontSize: "0.7rem" }, }} /> ))}
); }; export default LayerControl;