기존 GhiVideo 저장소 HEAD의 트래킹 소스 362개 파일을 복제. (node_modules·storage·빌드 산출물·대용량 미디어는 .gitignore 규칙대로 제외) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.2 KiB
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.js가express.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)와 별개. - 출발점 부근 '조기 통과' 오탐 우려는 역사 마커에 한해 합집합으로 한정 → 일반 측점-기준 동작에는 영향 없음.