초기 커밋: 스테이션(측점) 기반 주행영상 플레이어

- 클라이언트(React/Vite): Video.js 플레이어, 하단 스테이션바, POI/구조물 영상 오버레이, 카메라 파라미터 보정, 미니맵/RoutePanel
- 서버(Express): Range 스트리밍, HLS 변환, 프레임 추출, tus 업로드, 주석 API
- 최근 작업: 스테이션바 종점역 표출/양끝 정렬/미도착(재생불가) 표시, POI 라벨 '구분' 우선·컴팩트 팝업·겹침제외 토글·동일좌표 다중행, 진행방향(상/하) 우선 표출, 커서 배지 크기·픽셀 떨림 개선

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-25 16:37:57 +09:00
co-authored by Claude Opus 4.8
commit 78fc090360
214 changed files with 27897 additions and 0 deletions
@@ -0,0 +1,30 @@
# 측점/역사 파일을 root 에서도 인식 (building 폴더 삭제 가능)
**날짜**: 2026-06-24
**수정 파일**: `client/src/utils/geoData.ts`
## 배경
사용자가 v3.0 폴더에서 `01)측점.csv` 를 root(영상 옆)로 옮기고 building 폴더(02~06)를 지우려 함.
그런데 기존 코드는 측점/역사를 `building/` 안에서만 찾아 → root 이동 시 측점 미인식(중심선 깨짐).
## 조치
- `parseStations`: 측점 파일을 building → **root 어디든** 찾도록(`includes('01)측점')`/`'측점'`).
- `parseHistoricStations`: 역사 파일도 `isInBuilding` 제한 제거(root 허용).
- 드론 CSV 선택(`parseDroneFrames`)은 `<base>.csv` 우선이라 root 에 측점 CSV 가 같이 있어도 영향 없음.
## 파일 필요 여부 정리 (웹앱 기준)
| 파일 | 필요 |
|---|---|
| `<영상>.MP4` | ✅ 필수 |
| **`<영상>.csv`** (frame_cnt,lat,lon,alt,yaw,pitch,roll,focal) = 드론 프레임 | ✅ **필수** |
| `01)측점.csv` (root 또는 building) | ✅ 필수(KMZ에 없음) |
| `<영상>.kmz` | ✅ POI/구조물 |
| building/02~06)*.csv | ⭕ 삭제 가능(KMZ 대체, 폴백용) |
| `<영상>_POI.csv` | ⭕ 폴백(삭제 가능) |
| `.srt` / `.qgs` / `.qgz` / `_구조물추출_Z.xlsx` | ⭕ 웹앱 미사용 |
## 검증
- `npm run build -w client` (node20) tsc + vite build 통과.
**소요 시간**: 약 8분
**Context 사용량**: input ~1210k / output ~5k tokens