초기 커밋: 스테이션(측점) 기반 주행영상 플레이어
- 클라이언트(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:
@@ -0,0 +1,47 @@
|
||||
# 1-클릭 FOV(초점) 보정 — POI를 실제 위치로 드래그해 focal 역산
|
||||
|
||||
**날짜**: 2026-06-24
|
||||
**수정 파일**: `client/src/components/overlay/StationOverlay.tsx`
|
||||
**관련**: [2026-06-24_1051_라벨-멀리뒤로-가까이먼저-FOV진단.md](2026-06-24_1051_라벨-멀리뒤로-가까이먼저-FOV진단.md),
|
||||
[2026-06-24_1106_오버레이-objectfit-cover정렬.md](2026-06-24_1106_오버레이-objectfit-cover정렬.md)
|
||||
|
||||
## 배경
|
||||
cover 정렬 후에도 "멀리 뒤로 / 가까이 먼저" 잔차 동일 → 투영 수식 버그 아님(검증). 남은 원인은
|
||||
**FOV(초점 f) 미스매치**(중심 기준 배율 오차 → 위/아래 반대로 벌어짐). 손으로 f 맞추는 대신
|
||||
**1-클릭 보정** 추가.
|
||||
|
||||
## 기능
|
||||
편집 모드와 별개의 **🎯 FOV(초점) 보정** 모드. POI 라벨 하나를 영상 속 **실제 위치로 드래그**하면,
|
||||
그 대응점으로 focal 을 역산해 즉시 적용 → 전 거리(멀·근) 정렬.
|
||||
|
||||
### 역산 수식
|
||||
```
|
||||
px = 0.5 + cx0 + (Xc/Zc)·(f/sW), py = 0.5 + cy0 + (Yc/Zc)·(f/sH)
|
||||
a=Xc/Zc, b=Yc/Zc, u=px*-0.5-cx0, v=py*-0.5-cy0
|
||||
f = ((a/sW)·u + (b/sH)·v) / ((a/sW)² + (b/sH)²) // 두 축 공통 f 의 최소제곱
|
||||
```
|
||||
- f 는 가로·세로 공통 → 한 점이면 화각 배율 결정(센서·픽셀 정방, 16:9 가정).
|
||||
- POI 카메라좌표는 렌더와 동일한 poiZ(드론높이 모드면 드론−이격거리, 아니면 선택 z)로 계산.
|
||||
- `setParam('focalLen', clamp(10..100))` → 카메라 파라미터 패널에 반영·데이터셋별 영속화.
|
||||
|
||||
## 구현
|
||||
- 상태 `fovMode`(+ref), `poiDroneHeightRef`/`droneHeightDropRef`(역산용).
|
||||
- `onPoiPointerDown`: editMode **또는** fovMode 에서 POI 선택. 캔버스 pointer-events 도 동일 조건.
|
||||
- `onPoiPointerUp`: fovMode 면 focal 역산 분기(위 수식), 아니면 기존 위치(lat/lon) 보정.
|
||||
- 드래그 피드백 마커: editMode/fovMode 모두 표시.
|
||||
- UI: "🎯 FOV(초점) 보정" 토글(편집 모드와 상호 배타) + 안내 InfoTip + 현재 f 표시.
|
||||
|
||||
## 사용법
|
||||
1. 화면표시 옵션 → **🎯 FOV(초점) 보정** 클릭.
|
||||
2. 멀거나 가까운 POI 하나를 **영상 속 실제 위치로 드래그**(일시정지 권장).
|
||||
3. f 자동보정 → 멀·근 라벨이 함께 지물에 정렬. 값은 자동 저장.
|
||||
|
||||
## 한계
|
||||
- z(표고)가 크게 틀리면 세로 대응에 z 오차가 섞일 수 있음 → 먼저 DEM/표고 보정 후 FOV 보정 권장.
|
||||
- 한 점 기준이라, 가능하면 화면 중심에서 충분히 떨어진(위/아래) POI 로 보정하면 안정적.
|
||||
|
||||
## 검증
|
||||
- `npm run build -w client` (node20) tsc + vite build 통과.
|
||||
|
||||
**소요 시간**: 약 18분
|
||||
**Context 사용량**: input ~330k / output ~9k tokens
|
||||
Reference in New Issue
Block a user