feat: 지도 나침반(OSM/위성) 추가 + 측점 검색·마커 정확도 개선 + POI/영상 수정

- 지도 기반 나침반(노스업, 현재위치, 시야 역삼각형): 호버 확대·휠 줌·클릭 위성전환, OSM/Esri 타일 서버 프록시(/api/tile)
- 스테이션 검색: 실제 측점(chain) 기준 이동, 없으면 '측점 없음' 안내
- 역 마커: 직교 투영 측점 일치 시에만 표시, 미도착 종점은 추가 방식
- POI 팝업 겹침/재등장·라벨 정합 수정
- 영상 fps 데이터 기반 자동 산출
- 기술/발표/쉬운설명 문서 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-02 18:03:30 +09:00
co-authored by Claude Opus 4.8
parent e9052143d7
commit e0ff5dd6d0
58 changed files with 9635 additions and 378 deletions
@@ -0,0 +1,27 @@
# 역 마커 — 실제 측점 일치 기준으로 정정 (162080 누락 수정)
**소요 시간**: 약 15분
**Context 사용량**: input ~230k / output ~4k tokens
## 문제
직전 수정(kmExists 게이트)이 너무 세서, **진짜 162080 위치의 대전조차장 마커까지 사라짐**.
## 원인
kmExists 게이트가 `|p.km stationKmVal|` 비교인데:
- 탐지는 `s.station`(등록 측점 162080) → p.km = 162080
- stationKmVal = `projectChainage(역 좌표)` (좌표 투영) — 등록값과 어긋날 수 있음
→ 둘이 다르면 게이트가 실제 162080 통과까지 제거.
## 수정 ([StationBar.tsx](../../client/src/stationbar/StationBar.tsx))
게이트 방식 폐기, 탐지 소스로 구분:
1. 역사(역)는 **좌표근접(pxPassesTo) 폴백을 배제**`pxPassesAtMileage`(실제 측점 일치)로만 탐지.
- `if (!passes.length && cat !== '역사' && ...) pxPassesTo(...)` (교량/터널만 허용)
2. `if (!kmExists) continue` 게이트 제거(주 경로 + 폴백 경로). kmExists 는 라벨/검색 참고용으로만 유지.
## 효과
- ① 좌표만 가까운(측점 다른) 조차장 재진입(드론 162210인데 162080)은 안 찍힘.
- ② 진짜 162080 통과에는 정상 표시.
- 검색은 이미 chain 기준(별도 수정)이라 마커 변경과 무관하게 정확.
## 검증
- `tsc --noEmit` 통과, `npm run build` 성공 → 해시 `index-Cdsf6M1x.js`(HUD `· 검색v3`) :55000 서빙.