import Image from "next/image"; import { parseWmsUrl } from "../utils/wms"; export function MapLegend({ parsed, width = 600, }: { parsed: ReturnType; width: number; }) { if (!parsed?.baseUrl || !parsed?.params?.layers) return null; const layers = String(parsed.params.layers) .split(",") .map((l) => l.trim()) .filter(Boolean); const styles = parsed.params.styles ? String(parsed.params.styles) .split(",") .map((s) => s.trim()) : []; return (
{layers.map((layer, i) => { const style = styles[i]; const url = buildLegendUrl(parsed, layer, style); return (
{`Legend
); })}
); } // local function function buildLegendUrl( parsed: ReturnType | null | undefined, layer: string, style?: string ) { if (!parsed?.baseUrl) { return ""; } const u = new URL(parsed.baseUrl); u.searchParams.set("SERVICE", "WMS"); u.searchParams.set("REQUEST", "GetLegendGraphic"); u.searchParams.set("VERSION", parsed.params.version || "1.1.1"); u.searchParams.set("FORMAT", "image/png"); u.searchParams.set("TRANSPARENT", "true"); u.searchParams.set("LAYER", layer); if (style) u.searchParams.set("STYLE", style); // if use specific style u.searchParams.set("SLD_VERSION", "1.1.0"); return u.toString(); }