Files
GhiVideo/docs/history/2026-06-29_1029_역사-통과-좌표근접-보강.md
b23042andClaude Opus 4.8 e9052143d7 feat: 스테이션바 측점 정확도 개선 + 영상 컨트롤 UI 통합 + 종합 기술문서
스테이션바/측점(체이니지)
- 역 재진입 마커 누락 수정: 측점기준 탐지에 좌표근접(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>
2026-06-29 14:56:27 +09:00

3.2 KiB

역사(역) 통과 마커 누락 수정 — 좌표근접 합집합 보강

소요 시간: 약 30분 Context 사용량: input ~150k / output ~9k tokens

결론

대전조차장역처럼 같은 역을 여러 번 지날 때, 일부 통과(예: 162k080 재진입)에 스테이션바 동그라미(역사 원형 마커)가 빠지던 문제를 수정. 측점-기준 탐지에 더해 좌표근접(pxPassesTo) 통과를 합집합으로 보강해 누락된 재진입까지 마커를 찍는다.

원인

  • 파일: client/src/stationbar/StationBar.tsx (structureMarks)
  • 역사(대전조차장역)는 geoData에서 좌표(lat/lon)만 있고 측점값(station)이 없는 RouteStructure 로 들어온다.
  • 통과 탐지가 projectChainage(좌표) 한 값으로 pxPassesAtMileage 만 수행.
  • 탐지 체인이 if (!passes.length) 단락 평가라, 측점-기준이 통과를 하나라도 찾으면 좌표근접 탐지가 안 돌아감.
  • 종점/조차장 구역은 측점선(폴리라인) 투영이 불안정 → 한 통과는 투영 측점이 ±stationTolerance(기본 20m) 안에 들어와 잡히지만, 다른 통과는 20m 밖으로 벗어나 누락. 첫 통과를 이미 찾았으니 좌표근접 보강도 안 돌아 영영 빠짐.

변경 내용

  • cat === '역사' 이고 lat/lon 이 있으면, 측점-기준 탐지 결과에 pxPassesTo(lat, lon, off) 통과를 합집합으로 추가.
  • 같은 통과(거의 동일 px)는 24px 임계로 중복 제거 → 멀리 떨어진 실제 재진입만 추가됨. (TRACK_WIDTH_PX = 1509.5, 24px ≈ 1.6% → 동일 best 프레임 중복만 합쳐지고 떨어진 재진입은 보존)
  • km 라벨 동작(stationKmVal 우선)은 기존 유지 — 이번 수정은 '마커 누락'만 대상.

검증

  • tsc --noEmit + vite build 통과 (node v20.20.2, ~/.nvm/versions/node/v20.20.2/bin).
  • 사용자 화면(포트 55000)에서 폴더 재선택 후 162k080 재진입 동그라미 표출 확인 완료.

★ 진짜 블로커 — 빌드/서빙 구조 (이번 세션 최대 교훈)

  • 증상: 소스를 여러 번 고쳐도 화면이 전혀 안 바뀜("여전히 빠져있어" 반복).
  • 원인: 사용자가 보는 화면은 dev 서버가 아니라 PM2 앱 ghiVideo(포트 55000) 이고, server/dist/.../app.jsexpress.static(client/dist)빌드 결과를 서빙한다(ecosystem.config.js). → client/src 만 고치면 절대 반영 안 됨. client/dist 가 6/26 빌드로 고정돼 있었음.
  • 형제 디렉토리 혼선도 있었음: videoplayer(PM2, 5173), defVideo(PM2) 가 함께 떠 있음. 작업 경로는 GhiVideo.
  • 해결: npm run build -w client (node 20) 로 client/dist 갱신 → 강력 새로고침(Ctrl+Shift+R) → 폴더 재선택.
  • 메모리에 구조 기록: ghivideo-serve-build.

참고 / 후속

  • stationTolerance 타입 주석(geo.ts:139)은 "기본 40"으로 적혀 있으나 실제 코드 기본값은 ?? 20. 불일치 정리 권장.
  • 좌표근접 탐지 임계는 pxPassesTo 내부 Math.max(100, gmin*3)(StationBar.tsx:499) — 측점 tolerance(20m)와 별개.
  • 출발점 부근 '조기 통과' 오탐 우려는 역사 마커에 한해 합집합으로 한정 → 일반 측점-기준 동작에는 영향 없음.