스테이션바/측점(체이니지) - 역 재진입 마커 누락 수정: 측점기준 탐지에 좌표근접(pxPassesTo) 합집합 보강(중복 24px 제거) - kmExists 판정: 좌표 반경만으로 잡힌 통과는 측점값 라벨/검색에서 제외(마커 동그라미는 유지) - 측점값 라벨 겹침 숨김(좌측 우선), 동일항목 브래킷 클러스터 - 측점 검색 순환(통과방향 다음→끝에서 처음), 마커 기준 후보 산출, 입력값 유지/blur 삭제 - 연속 체이니지 수직투영 유틸 분리(client/src/utils/chainage.ts), Minimap 컴포넌트 추가 영상 컨트롤 UI - 선형/드론궤적/좌측패널 토글을 재생바로 통합(settingsStore 공유·persist) - 드론 GPS·고도 HUD 상시 표시, 경로표고·투명도 항상 노출, 겹침제외 버튼 숨김 - 재생바 요소 재배치(좌측패널→선형→드론궤적→드론위치정보→시설등급), 활성색 amber 통일 문서/도구 - 종합 기술명세서(인계+특허 기초) md/html/pdf 3종, UI개선 보고서 3종 - md→html→pdf 변환 스크립트(scripts/md2docs.sh) + 스타일(docs/assets/report.css) - 작업 히스토리 다수 추가(docs/history/) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.3 KiB
3.3 KiB
스테이션바 측점거리(체이니지) 비례 축 전환 (B안)
소요 시간: 약 30분 Context 사용량: input ~150k / output ~14k tokens
결론
스테이션바 x축을 직전 A안(누적 이동거리) → 측점값(체이니지) 비례 축으로 전환. 바 가로위치가 실제 측점거리에 비례하고, 커서는 드론의 현재 측점 위치를 표시한다(멈추면 정지, 후진하면 좌로 이동). 측점 10m 차이 구조물이 바에서도 가깝게 표시된다. 색: '진행색 + 커서색' 안 선택.
배경
- A안(누적 이동거리)은 두 구조물이 측점상 10m여도 그 사이 드론이 앞뒤로 많이 이동하면 누적거리가 커져 바에서 멀게 표시됨 → 사용자 지적.
- 요구: 바는 측점거리에 비례, 재생 중 실제 드론 위치를 바에 표시.
변경 내용 (client/src/stationbar/StationBar.tsx)
chainRef = {time, chain(평활), minC, maxC}생성(ready useEffect). chain 은 ±8프레임 이동평균(지터 제거).- 매핑:
pxAtChain(측점) = START + clamp((c-minC)/(maxC-minC)) * timeTrackWidth,chainAtTime(t)(이진탐색+보간),pxAtTime(t) = pxAtChain(chainAtTime(t)). 커서·구조물 공유. - 커서:
progressPx = pxAtTime(currentTime), RAF 도pxAtTime(liveTime). - 색(측점축은 방향 리본 표현 불가):
trackGradient=주황 음영 단일,trackGradientIdle=회색 단일,dividers=[]. 방향은currentReverse(측점값 0.4s 전 대비 감소=후진)로 커서 색만 구분. - 구조물 중복 제거:
dedupeMarksByTitle(title 당 1개) — 측점축에선 동명 다중통과가 한 자리에 겹침. → Timeline 다중통과 묶음 점선(브래킷)은 자연 소멸. - seek: 클릭 px → 목표 측점 → 허용오차 내 프레임 중 현재 시간에 가장 가까운 통과로 onSeek.
barSegments는 렌더 미사용(쿼리 useMemo 는 kmLabels 위해 유지),cumFracAtTime/timeAtFrac/progRef제거.
후속 수정 — 축 범위 '노선 고정' (데이터 무관 절대 측점)
- 문제: 축 범위를 드론 커버 구간 [minC,maxC] 로 잡아 영상마다 양끝 측점이 바뀜 → 같은 구조물이 다른 위치/측점으로 표시됨(사용자 지적: "어떤 데이터로 재생하느냐에 따라 측점이 바뀌면 안돼").
- 수정:
- 축 범위 minC/maxC = stationLine(역 POI, km 오름차순) 첫/끝 측점값 → 노선 고정. 드론 chain 은 projectChainage 로 이 범위 안에 들어옴.
- 구조물 px = pxAtChain(구조물 측점값) → 통과 시각이 아닌 '절대 측점'으로 배치(마일리지 라벨과 일치, 영상 달라도 동일 위치). dedupeMarksByTitle 로 동명 1개.
- 효과: 좌(낮은 측점)→우(높은 측점) 고정 자. 구조물 위치 불변, 커서만 드론 현재 측점을 가리킴.
검증
tsc --noEmit통과 + client 빌드 완료.
알려진 한계 / 다음 단계
- 진짜 비례라 측점이 매우 가까운 라벨끼리 겹쳐 보일 수 있음(법동가도교/대전조차장역). 필요시 라벨 충돌회피 후처리.
- 방향 전진/후진 색 리본 제거됨(커서 색으로만 방향). endGapPx(미도착 종점역) 우측 밴드/표식은 유지.
- 이상 시 A안(누적거리 축) 또는 그 이전 시간선형으로 되돌릴 수 있음. 핵심 매핑은 pxAtChain/chainAtTime/pxAtTime 3개에 집중.