- 제주 DJI 시간기반 비행로그(CSV) 파싱 어댑터: 세그먼트 창 정렬, 가상 fps 환산 - 분할 영상(이름 오름차순) 연속재생 + 좌상단 영상목록 콤보(선택 재생), 세그먼트별 드론 로그 재정렬 - KML 다중 파일 병합 파싱: STA 체이니지 측점(71개) + 지장물 신포맷(타입/이름/텍스트박스_색상) - 시설물 라벨: 지정색 배경 박스 + 흰 글자, 팝업 중앙 정렬, 호버 구간 깜빡임 수정 - 카메라 자동감지(djmd: ZenmuseP1, focal 29.9mm) + <영상명>.camera.json PC 저장/폴더 자동 적용 - Yaw 자동추정(GPS 진행방위 기반) + 라벨 드래그 Yaw 역산 모드 - 스테이션바: GPS 이동거리 진행도(호버 시 정지), 노선밖 거리 표기, 원거리 구조물 마크 제외 - 서버: /api/camera 라우트, ecosystem 포트 54000·제주 데이터 경로 - docs/history: 작업 이력 21건 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
2026-07-09 오버레이 라벨 표고 앵커 + 측점 거리 제한
소요 시간: 10분 Context 사용량: input 340k / output 6k tokens
문제 (스크린샷 제보)
- 빨간 측점 라벨(0k000~6k998)이 수평선 부근에 전부 겹쳐서 깨진 글자처럼 보임
- POI 라벨이 실제 지물보다 높게 떠서, 카메라(드론)가 전진하면 라벨이 계속 뒤로 밀림(시차 불일치)
원인
- 측점 라벨엔 거리 제한이 없음 — POI는 maxPoiRange(기본 1000m) 필터가 있지만 측점은 없어서 7km 앞 측점까지 전부 FOV 안 수평선 근처에 투영·중첩됨
- 라벨 표고 근사가 틀림 — 직전 작업에서 측점 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) 사용 — 부정확할 수 있으나 부차적