# 2026-07-13 표고 없는 KML → _byDem.kml 자동 생성 기능 **소요 시간**: 12분 **Context 사용량**: input 2000k / output 6k tokens ## 요청 폴더 로드 시 측점/지장물 KML 의 좌표 z(높이)가 없거나 0 이면, DEM 연동으로 채운 `지장물_byDem.kml` / `측점_byDem.kml` 을 생성·저장하는 기능. (원본 비파괴) ## 데이터 정리 (선행) 직전 턴에서 원본에 직접 기록했던 것을 새 규칙에 맞게 재정리(4개 폴더): - 현재(DEM 기록) 파일 → `<이름>_byDem.kml` 로 이동, `.bak` → 원본 복원 - 결과: 원본(z=0) + _byDem(z=DEM) 공존 ## 구현 ### client/src/utils/demKml.ts (신규) - `generateByDemKmls(files)`: 폴더의 각 KML 에서 고도 없는(≤0) 좌표만 수집 → 서버 `/api/elevation`(SRTM 30m 프록시) 100좌표/청크·1.2s 간격 조회 → 고도 성분만 치환한 `<이름>_byDem.kml` 을 Blob 다운로드. 기존 표고(>0)는 보존 - 건너뜀: 자신이 _byDem / 폴더에 _byDem 존재 / 전 좌표 표고 보유 ### client/src/utils/geoData.ts — parseKmz - `<이름>_byDem.kml` 존재 시 원본 `<이름>.kml` 파싱 제외 (중복 지물 방지, 표고 버전 우선) ### client/src/components/player/VideoPlayer.tsx - 폴더 선택 시 generateByDemKmls 자동 실행 — 생성되면 alert 로 안내 ("다운로드 파일을 영상 폴더에 넣으면 다음 로드부터 자동 사용"). 오프라인 실패는 콘솔 경고만 ## 검증 - 파일 선택 규칙 시뮬레이션: [지장물, 지장물_byDem, 측점, 측점_byDem, 기타] → 파싱 대상 [지장물_byDem, 측점_byDem, 기타] ✓ - 서버 DEM 프록시 응답 확인: {"elevation":[70],"source":"opentopodata-srtm30m"} ✓ - tsc+vite 빌드 통과, 새 번들(index-BY1J77b5.js) 서빙 ## 다음 단계 참고 - 브라우저 다중 다운로드 허용 팝업이 뜰 수 있음(측점+지장물 2파일) — 허용 1회 - DEM 조회는 인터넷 필요(서버가 외부 API 프록시) — 오프라인 시연 중엔 생성 건너뜀(무해)