/** * deck.gl IconLayer용 SVG 아이콘 생성 유틸. * MapLibre ship-triangle / gear-diamond 형태와 동일. * Data URI로 캐싱하여 반복 생성 방지. */ const ICON_SIZE = 64; /** 선박 삼각형 SVG (heading 0 = north, 위쪽 꼭짓점) */ function createShipTriangleSvg(): string { const s = ICON_SIZE; return ` `; } /** 어구 마름모 SVG */ function createGearDiamondSvg(): string { const s = ICON_SIZE; return ` `; } function svgToDataUri(svg: string): string { return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`; } // ── 정적 캐시 (모듈 로드 시 1회 생성) ── const SHIP_TRIANGLE_URI = svgToDataUri(createShipTriangleSvg()); const GEAR_DIAMOND_URI = svgToDataUri(createGearDiamondSvg()); export const SHIP_ICON_MAPPING = { 'ship-triangle': { url: SHIP_TRIANGLE_URI, width: ICON_SIZE, height: ICON_SIZE, anchorY: ICON_SIZE * 0.62, mask: true }, 'gear-diamond': { url: GEAR_DIAMOND_URI, width: ICON_SIZE, height: ICON_SIZE, anchorY: ICON_SIZE / 2, mask: true }, }; export const SHIP_ICON_ATLAS = SHIP_TRIANGLE_URI; export const GEAR_ICON_ATLAS = GEAR_DIAMOND_URI; export { ICON_SIZE };