# 2026-07-09 오버레이 라벨 표고 앵커 + 측점 거리 제한 **소요 시간**: 10분 **Context 사용량**: input 340k / output 6k tokens ## 문제 (스크린샷 제보) 1. 빨간 측점 라벨(0k000~6k998)이 수평선 부근에 전부 겹쳐서 깨진 글자처럼 보임 2. POI 라벨이 실제 지물보다 높게 떠서, 카메라(드론)가 전진하면 라벨이 계속 뒤로 밀림(시차 불일치) ## 원인 1. **측점 라벨엔 거리 제한이 없음** — POI는 maxPoiRange(기본 1000m) 필터가 있지만 측점은 없어서 7km 앞 측점까지 전부 FOV 안 수평선 근처에 투영·중첩됨 2. **라벨 표고 근사가 틀림** — 직전 작업에서 측점 z를 "드론고도−24m ≈ 124m"로 근사했으나 실제 지면은 ≈60m(경로표고 기본값 58이 도로에 붙는 것으로 확인) → 라벨이 지면보다 약 60m 공중에 떠서 원근 시차가 안 맞아 전진 시 라벨이 뒤로 흐름. 드론고도 모드(pz=드론고도−이격24)도 동일하게 124m 평면이라 같은 증상 ## 수정 내용 ### client/src/utils/geoData.ts - KML 측점의 z 근사(드론고도−24) 제거 → z=0(표고 미상 표식) 유지 ### client/src/components/overlay/StationOverlay.tsx - **표고 미상(z≤0) 라벨을 '경로 표고'(dronePathZ) 평면에 앵커**: - 측점 라벨 sz: 유효 z 없으면 PATH_Z(경로표고) 사용 - POI gz 폴백 체인: 보정값 → 중심선 z(>0만) → POI z(>0만) → PATH_Z - 경로표고 슬라이더 변경 시 라벨 캐시 재계산(500ms 디바운스, 기존 트리거에 dronePathZ 추가) - → **궤적을 도로에 맞추는 슬라이더 하나로 측점/POI 라벨 높이가 함께 보정됨** - **측점 라벨에도 maxPoiRange 거리 제한 적용** — 원거리 측점 수평선 뭉침 해소 - **poiDroneHeight 기본값 true→false(지면고도 기준)**: - 실측 z 데이터셋(회덕)은 지물에 정확히 붙음(원래 이 모드가 정확) - 표고 미상 데이터셋(제주)은 경로표고 앵커로 일괄 보정 가능 - 드론고도 모드는 UI 토글로 여전히 선택 가능 ## 검증 - tsc+vite 빌드 통과, 54000 포트 새 번들(index-Nv1HLuS3.js) 서빙 - 기하 검증(계산): 지면 60m/드론 148m 기준, 124m 라벨은 300m 전방 지물 대비 화면상 약 12% 위쪽에 투영(수평선 방향) → 전진 시 벌어짐. PATH_Z(58) 앵커 시 지물과 동일 평면 → 시차 일치 ## 사용법 (사용자 안내) - 새로고침 후 폴더 재선택 → '경로 표고' 슬라이더로 파란 궤적을 도로 노면에 맞추면 측점·POI 라벨도 같은 평면으로 따라옴 (기본 58m가 대략 맞음) - 측점 라벨 표시 거리는 'POI 표시범위'(maxPoiRange) 슬라이더로 조절 ## 다음 단계 참고 - 지형 기복이 큰 구간은 단일 평면 앵커의 한계 있음 — 필요 시 구간별 z 또는 DEM 도입 검토 - RoutePanel 가시범위(초록 박스) 계산은 여전히 pt.z(0) 사용 — 부정확할 수 있으나 부차적