Files
GhiVideo_v4/docs/history/2026-07-09_2021_카메라json-세그먼트라벨-팝업정렬.md
T
b23042andClaude Fable 5 84f4921826 제주 드론 도로영상 지원: DJI 로그 어댑터·분할영상 연속재생·카메라 자동감지·오버레이 개선
- 제주 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>
2026-07-09 20:58:49 +09:00

48 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-07-09 카메라 JSON 저장/적용 + 세그먼트 라벨 캐시 + 팝업 정렬 + 박스 높이
**소요 시간**: 20분
**Context 사용량**: input 640k / output 10k tokens
## 요청 4건 처리
### 1. 카메라 화각 정보를 영상 이름의 JSON 으로 서버 저장 → 폴더에 함께 있으면 자동 적용
- **서버**: `routes/camera.ts` 신규 — `PUT /api/camera/:videoId` 가 영상 폴더(VIDEOS_DIR)에
`<영상 base>.camera.json` 저장(`{ camera: {...}, model, savedAt }`), `GET` 조회. Path traversal 방어
- **클라이언트**:
- `parseCameraJson`(geoData): 폴더에서 `<영상 base>.camera.json`(또는 `<base>.json`) 인식 —
폴더 내 어떤 분할본 base 와도 매칭, 숫자 필드만 통과
- geoStore `cameraJson` 적재 → StationOverlay 에서 **최우선 적용**(localStorage 보정·djmd 감지값보다 위,
effect 선언 순서로 보장)
- 카메라 파라미터 패널 📷 줄에 **[서버에 저장]** 버튼 — 현재 파라미터 전체(focalLen/yaw/pitch/…)를
현재 재생 중인 영상 이름으로 저장. 저장중…/저장됨 ✓/실패 상태 표시
- E2E 검증: PUT → D: 폴더에 파일 생성 → GET 일치 → 정리 완료
### 2. 두 번째 영상에서 시설물 미표출
- 원인: 라벨 사전계산(startLabelPrecompute) effect deps 에 `storeFrames` 누락 —
세그먼트 전환(loadSegment)으로 frames 가 교체돼도 이전 세그먼트의 라벨 캐시를 계속 사용 →
새 위치에서 전부 화면 밖 투영
- 수정: 두 precompute effect deps 에 `storeFrames` 추가 → 세그먼트 전환 시 재계산
### 3. 시설물 라벨 아래 검은 팝업 정렬
- 원인: 팝업 x 앵커가 구 라벨 레이아웃(지점 오른쪽 텍스트) 기준 `sx 10` 고정 —
라벨이 중앙정렬 박스로 바뀌면서 어긋남
- 수정: POI 팝업은 `sx 팝업폭/2`(박스 중앙 아래 정렬), 측점 팝업은 기존 유지
### 4. 라벨 배경 박스 여유
- BOX_H 22 → **24**(글자 20px × 1.2), PAD_X 6→7, 동일좌표 다중 라벨 행 간격 ROW_H 24→28
## 검증
- 클라이언트(tsc+vite)·서버(tsc) 빌드 통과, pm2 재시작, 새 번들(index-BxAoyQvu.js) 서빙
- 카메라 API 왕복 테스트 통과
## 다음 단계 참고
- camera.json 저장은 서버 VIDEOS_DIR 기준 — 폴더 선택으로 여는 로컬 폴더가 VIDEOS_DIR 과
다른 경로면 저장 파일이 그 폴더에 없음(현 구성은 동일 폴더라 문제없음)
- camera.json 은 폴더 공용(분할본 전체 적용). 세그먼트별 별도 카메라가 필요하면 확장 필요