# 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 프록시) — 오프라인 시연 중엔 생성 건너뜀(무해)
