- 지도 기반 나침반(노스업, 현재위치, 시야 역삼각형): 호버 확대·휠 줌·클릭 위성전환, OSM/Esri 타일 서버 프록시(/api/tile) - 스테이션 검색: 실제 측점(chain) 기준 이동, 없으면 '측점 없음' 안내 - 역 마커: 직교 투영 측점 일치 시에만 표시, 미도착 종점은 추가 방식 - POI 팝업 겹침/재등장·라벨 정합 수정 - 영상 fps 데이터 기반 자동 산출 - 기술/발표/쉬운설명 문서 추가 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
# 측점 검색 — 없는 측점 검색 시 엉뚱한 곳으로 튀는 문제 수정
|
|
|
|
**소요 시간**: 약 10분
|
|
**Context 사용량**: input ~200k / output ~3k tokens
|
|
|
|
## 문제
|
|
스테이션바에서 `162080`(162k080) 검색 → 130m 떨어진 `162k210`으로 이동.
|
|
|
|
## 원인
|
|
[StationBar.tsx `handleJumpToMileage`](../../client/src/stationbar/StationBar.tsx#L845) 검색 3단계:
|
|
1. 마커(structureMarks) 표시측점 일치
|
|
2. 연속 측점(chain)이 허용오차(stationTolerance 20m) 안
|
|
3. **폴백: 둘 다 없으면 '무조건 가장 가까운 측점'으로 이동** ← 문제
|
|
|
|
162080이 이 영상에 (직교 투영으로) 없으니(조차장에서 드론 투영측점=162210) 3번 폴백이
|
|
130m 밖 162210으로 점프. '직교 일치 시에만' 원칙과도 불일치.
|
|
|
|
## 수정
|
|
폴백(882~889) 제거 → `if (!times.length) return;`.
|
|
TOL(기본 20m) 안에 없으면 그 측점은 (직교로) 존재하지 않으므로 **점프하지 않음**.
|
|
프레임이 조밀(30fps)해 실제 지나는 측점은 항상 TOL 안에서 잡히므로 폴백 불필요.
|
|
|
|
## 효과
|
|
- 없는 측점 검색 시 엉뚱한 곳으로 안 튐(아무 동작 안 함).
|
|
- 존재하는 측점(마커/연속측점)은 그대로 검색·순환 이동.
|
|
|
|
## 추가: '측점 없음' 안내 (사용자 선택 = 안내+이동안함)
|
|
'이동 안 함'만으로는 커서가 직전 위치(162210)에 남아 "검색이 거기로 간 것처럼" 보이는 혼동 →
|
|
검색 실패 시 **안내 메시지** 표시.
|
|
- `handleJumpToMileage` 가 boolean 반환(이동 true / 못 찾음 false).
|
|
- [PlaybackControls.tsx](../../client/src/stationbar/components/PlaybackControls/PlaybackControls.tsx):
|
|
Enter 시 못 찾으면 입력창 옆에 **"측점 없음"**(빨강) 1.8초 표시, 재입력/블러 시 숨김.
|
|
|
|
## 추가 2: 검색을 '실제 측점(chain)' 기준으로만 (마커 라벨 기준 제거)
|
|
증상: 162080 검색 시 여러 162080 위치를 순환하다 '맨 끝에' 162210으로 이동.
|
|
원인: 검색 1순위가 structureMarks 를 '표시 측점 라벨(round km)'로 매칭 → 라벨은 162080이지만
|
|
실제 위치가 다른(조차장 좌표근접) 마커가 순환에 끼어듦.
|
|
|
|
수정: 검색 1순위(마커 라벨 매칭) 제거. **드론 실제 투영 측점(arr[].chain)이 입력값과 TOL 이내인
|
|
통과로만** 이동(연속구간=1통과, 순환). 없으면 false → '측점 없음'.
|
|
- deps 에서 structureMarks/timeAtFrac/timeTrackWidth 제거.
|
|
- 진단용 HUD 표시 `· 검색v2`(빌드 확인용, 확인 후 제거 예정).
|
|
|
|
## 검증
|
|
- `tsc --noEmit` 통과, `npm run build` 성공 → 해시 `index-BrZ52ILs.js` :55000 서빙 확인.
|