- 제주 DJI 시간기반 비행로그(CSV) 파싱 어댑터: 세그먼트 창 정렬, 가상 fps 환산 - 분할 영상(이름 오름차순) 연속재생 + 좌상단 영상목록 콤보(선택 재생), 세그먼트별 드론 로그 재정렬 - KML 다중 파일 병합 파싱: STA 체이니지 측점(71개) + 지장물 신포맷(타입/이름/텍스트박스_색상) - 시설물 라벨: 지정색 배경 박스 + 흰 글자, 팝업 중앙 정렬, 호버 구간 깜빡임 수정 - 카메라 자동감지(djmd: ZenmuseP1, focal 29.9mm) + <영상명>.camera.json PC 저장/폴더 자동 적용 - Yaw 자동추정(GPS 진행방위 기반) + 라벨 드래그 Yaw 역산 모드 - 스테이션바: GPS 이동거리 진행도(호버 시 정지), 노선밖 거리 표기, 원거리 구조물 마크 제외 - 서버: /api/camera 라우트, ecosystem 포트 54000·제주 데이터 경로 - docs/history: 작업 이력 21건 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
2026-07-09 지장물 KML 신포맷 파싱 (다중 KML + 라벨 색상)
소요 시간: 13분 Context 사용량: input 300k / output 8k tokens
문제
새로 받은 제주_중산간도로_지장물.kml(구글어스 Pro에서 CSV 변환, 지장물 33개)의
좌표/라벨 색상이 화면에 표시되지 않음.
원인
- parseKmz 가 KML 을 1개만 읽음 —
files.find(...)라 폴더에 KML 이 2개(측점 KML + 지장물 KML)면 첫 파일만 파싱되고 지장물 KML 은 통째로 무시됨 (핵심 원인) - 신포맷은 폴더(교량/터널 등) 구분이 없고 Placemark 직속 + Schema
(
타입/타입상세/텍스트박스_색상/이름/연장/X/Y/높이) — 기존 desc HTML 표 기반 분기와 불일치 - 라벨 색상 개념이 렌더러에 없음 — 캔버스 라벨이 고정색(#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)
- title=
- 라벨 색:
텍스트박스_색상한국어명(검정/남색/빨강/연두/주황/초록/파랑 등 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 색 폴백 → 그것도 없으면 기본 하늘색