# 2026-07-09 지장물 KML 신포맷 파싱 (다중 KML + 라벨 색상) **소요 시간**: 13분 **Context 사용량**: input 300k / output 8k tokens ## 문제 새로 받은 `제주_중산간도로_지장물.kml`(구글어스 Pro에서 CSV 변환, 지장물 33개)의 좌표/라벨 색상이 화면에 표시되지 않음. ## 원인 1. **parseKmz 가 KML 을 1개만 읽음** — `files.find(...)` 라 폴더에 KML 이 2개(측점 KML + 지장물 KML)면 첫 파일만 파싱되고 지장물 KML 은 통째로 무시됨 (핵심 원인) 2. 신포맷은 폴더(교량/터널 등) 구분이 없고 Placemark 직속 + Schema (`타입/타입상세/텍스트박스_색상/이름/연장/X/Y/높이`) — 기존 desc HTML 표 기반 분기와 불일치 3. 라벨 색상 개념이 렌더러에 없음 — 캔버스 라벨이 고정색(#64c8ff) 단일 ## 수정 내용 ### client/src/utils/geoData.ts - **parseKmz 다중 파일 병합**: 폴더 내 모든 .kml/.kmz 를 순회 파싱해 pois/structures/stations 병합 (파일 단위 실패는 경고 후 건너뜀) - **신포맷(지장물 스키마) 브랜치**: `타입` SimpleData 존재로 감지 — - title=`이름`(폴백 name), category=`타입`(교차로/도로/교량/강.하천/마을/산/지장물/지장물L) - 좌표는 SimpleData X/Y(저정밀)가 아닌 **Point coordinates(고정밀)** 사용 - `높이`는 표고가 아닌 구조물 높이 → z=0 유지(팝업 props 로만 노출) - 타입 교량/터널은 구조물(스테이션바·노선패널 마크)로도 중복 등록 (연장→lengthM) - **라벨 색**: `텍스트박스_색상` 한국어명(검정/남색/빨강/연두/주황/초록/파랑 등 13색) → CSS 매핑, 없으면 인라인 IconStyle 색(KML aabbggrr → #rrggbb) 폴백 → `GeoPoint.labelColor` ### client/src/types/geo.ts - `GeoPoint.labelColor?: string` 추가 ### client/src/components/overlay/StationOverlay.tsx - labelColor 를 poiCand → poiMarkers(라벨 캐시) → 캔버스 렌더로 전달 - 십자 마커·라벨 텍스트를 지정 색으로 렌더, 어두운 색(검정·남색)은 외곽선을 밝게 반전(가독성) - CATEGORY_EMOJI 확장: 교차로🚦 도로🛣️ 강.하천🌊 마을🏘️ 산⛰️ 지장물L🏢 ## 검증 - tsc+vite 빌드 통과, 54000 포트 새 번들(index-CLmojEn3.js) 서빙 - 지장물 KML 데이터 검증: 33개 전부 파싱, 색상 매핑 33/33, 교량 3건 구조물 중복 등록, 좌표 불량 0 (Point coordinates 고정밀 사용) - 기존 측점 KML(STA 71개)과 병합 로드 확인 (다중 KML) ## 다음 단계 참고 - 신포맷 감지 키는 `타입` SimpleData — 회덕 desc표/STA 스키마와 충돌 없음 - styleUrl(#pointStyleMap1) → StyleMap 참조 해석은 미구현 (인라인 Style 이 항상 존재해 불필요) - 색상명 미정의 시(예: 새로운 색 이름) 인라인 IconStyle 색 폴백 → 그것도 없으면 기본 하늘색