feat: 지도 나침반(OSM/위성) 추가 + 측점 검색·마커 정확도 개선 + POI/영상 수정

- 지도 기반 나침반(노스업, 현재위치, 시야 역삼각형): 호버 확대·휠 줌·클릭 위성전환, OSM/Esri 타일 서버 프록시(/api/tile)
- 스테이션 검색: 실제 측점(chain) 기준 이동, 없으면 '측점 없음' 안내
- 역 마커: 직교 투영 측점 일치 시에만 표시, 미도착 종점은 추가 방식
- POI 팝업 겹침/재등장·라벨 정합 수정
- 영상 fps 데이터 기반 자동 산출
- 기술/발표/쉬운설명 문서 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-02 18:03:30 +09:00
co-authored by Claude Opus 4.8
parent e9052143d7
commit e0ff5dd6d0
58 changed files with 9635 additions and 378 deletions
@@ -0,0 +1,92 @@
# 철도 스테이션(측점) 기반 주행영상 웹플레이어 — 개발 내용 및 핵심기술
<p class="subhead">기술개발센터 · 작성일 2026-06-29 · (작성자/팀 기입)</p>
## □ 개요
- 드론으로 촬영한 철도 주행영상을 **시간이 아닌 측점(체이니지) 위치 기준**으로 색인·탐색하고, 프레임별 카메라 자세를 이용해 **측점·POI·선로중심선을 영상 위에 실시간 정합(AR 오버레이)** 하여 표출하는 **웹 기반 주행영상 분석 플레이어** 개발
- 입력 데이터 : 드론 주행영상 + 프레임별 비행로그(SRT) + 노선 측점/POI/구조물 데이터(폴더 일괄 적재)
| 항목 | 내용 | 포맷 | 비고 |
|------|------|:----:|------|
| 드론 주행영상 | 점검 구간 촬영 영상 | MP4 | 2GB+ 대용량 |
| 비행로그 | 프레임별 위치·자세·초점 | SRT/CSV | lat/lon/고도, yaw/pitch/roll, focal |
| 측점 | 노선 측점 좌표·표고 | CSV(01측점) | **정표고(Z좌표_한국)** 사용 |
| POI/구조물 | 교량·터널·역사·지장물·출입문 | CSV/KMZ | 03교량·04터널·06구교·02지장물 |
| 노선 보정 | 진행방향·종점·이정 보정 | route.json | 폴더별(선택) |
- 처리 알고리즘 흐름도
<figure>
<svg viewBox="0 0 760 150" role="img" aria-label="처리 흐름도">
<defs><marker id="ha" markerWidth="9" markerHeight="9" refX="6" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="#14305e"/></marker></defs>
<rect x="8" y="55" width="120" height="46" rx="5" fill="#eef2f8" stroke="#14305e"/>
<text x="68" y="74" text-anchor="middle" font-size="11" font-weight="bold" fill="#14305e">폴더 입력</text>
<text x="68" y="90" text-anchor="middle" font-size="9" fill="#555">영상·로그·CSV·KMZ</text>
<rect x="160" y="55" width="120" height="46" rx="5" fill="#fff" stroke="#555"/>
<text x="220" y="74" text-anchor="middle" font-size="11" font-weight="bold">파싱</text>
<text x="220" y="90" text-anchor="middle" font-size="9" fill="#555">인코딩 자동감지</text>
<rect x="312" y="55" width="138" height="46" rx="5" fill="#fff7e6" stroke="#b45309"/>
<text x="381" y="74" text-anchor="middle" font-size="11" font-weight="bold" fill="#b45309">좌표·측점 계산</text>
<text x="381" y="90" text-anchor="middle" font-size="9" fill="#7c2d12">투영 · 체이니지</text>
<rect x="496" y="10" width="256" height="36" rx="5" fill="#fff" stroke="#16a34a"/>
<text x="624" y="33" text-anchor="middle" font-size="10.5" font-weight="bold" fill="#14532d">① 영상 AR 오버레이</text>
<rect x="496" y="60" width="256" height="36" rx="5" fill="#fff" stroke="#16a34a"/>
<text x="624" y="83" text-anchor="middle" font-size="10.5" font-weight="bold" fill="#14532d">② 측점 스테이션바(탐색)</text>
<rect x="496" y="110" width="256" height="36" rx="5" fill="#fff" stroke="#16a34a"/>
<text x="624" y="133" text-anchor="middle" font-size="10.5" font-weight="bold" fill="#14532d">③ 대용량 영상 재생</text>
<line x1="128" y1="78" x2="158" y2="78" stroke="#14305e" stroke-width="1.5" marker-end="url(#ha)"/>
<line x1="280" y1="78" x2="310" y2="78" stroke="#14305e" stroke-width="1.5" marker-end="url(#ha)"/>
<line x1="450" y1="78" x2="494" y2="28" stroke="#14305e" stroke-width="1.5" marker-end="url(#ha)"/>
<line x1="450" y1="78" x2="494" y2="78" stroke="#14305e" stroke-width="1.5" marker-end="url(#ha)"/>
<line x1="450" y1="78" x2="494" y2="128" stroke="#14305e" stroke-width="1.5" marker-end="url(#ha)"/>
</svg>
<figcaption>그림 1. 데이터 입력 → 파싱 → 좌표·측점 계산 → (오버레이/스테이션바/재생) 처리 흐름</figcaption>
</figure>
- 출력 / 주요 기능
| 항목 | 내용 | 비고 |
|------|------|------|
| 영상 오버레이 | 측점·교량·터널·역사·POI·중심선·드론궤적을 영상에 정합 표시 | 60fps |
| 측점 스테이션바 | 측점 위치 기반 탐색바(거리/측점축), 구조물 마커, 방향색 | 시간축 대체 |
| 측점 검색 | 측점값 입력 → 해당 위치로 이동(여러 곳이면 순환) | — |
| 위치 보정 | 화면 드래그로 POI 위치/표고 보정·저장 | 데이터셋별 영속 |
| 대용량 재생 | 2GB+ 영상 Range/HLS 스트리밍 | 로컬·서버 |
## □ 핵심 기술
| # | 기술 | 핵심 내용 | 효과 |
|:-:|------|----------|------|
| 1 | 측점(체이니지) 색인·탐색 | 영상 매 시점을 노선 측점값으로 환산, 위치 기준 탐색 | 시간축 대비 점검 적합 |
| 2 | 실시간 영상 정합(투영) | 드론 위치·자세·초점 → 핀홀 투영으로 GIS점을 화면 픽셀에 정렬 | 서버 없이 클라이언트 60fps |
| 3 | **측점 표고 기반 DEM-free 정합** | 측점 실측 정표고를 지면고도로 사용 + 지오이드 datum 정합 | DEM 불필요, 부각오차 42.7°→11° |
| 4 | **단일 드래그 역투영 보정** | 화면 드래그 1회로 가로·세로·거리 동시 복원(깊이맵 불요) | 지오코딩 오차 손쉬운 교정 |
| 5 | 화각(FOV) 1점 보정 | 라벨 1개를 끌면 세로 화각(sensorH) 역산(가로 정합 보존) | 영상별 화각 자동 정합 |
| 6 | 에지보존 적응형 평활 | 직선=강하게/회전=즉시추종, 속도적응 EMA | 떨림 억제 + 무지연 |
| 7 | 위치(거리/측점)축 진행바 | 누적 이동거리·측점 비례 축, 방향은 색으로 분리 | 호버·왕복 정확 표현 |
| 8 | 좌표/측점 이중탐지 + kmExists | 측점·좌표 두 기준 합집합 탐지, 실제 측점 유무 판정 | 재진입 마커 누락 해소 |
| 9 | 대용량 스트리밍(Range/HLS) | 10MB 청크 Range + HLS 분할(backBufferLength 30) | 2GB+ 안정 재생 |
> 세부 알고리즘·수식·소스 위치는 별첨 「기술명세_GhiVideo_종합기술문서」 참조.
## □ 개발 결과 및 이슈사항
- 영상 정합 정확도 : 표고 datum 정합으로 **부각오차 42.7°→11.0°**, 측점 기반 지면고도가 구글 DEM 대비 **약 0.2m(2160p에서 ~6px) 일치**
- 위치 보정 : 역투영 **왕복오차 ≈ 0**(z=42→화면→42.000), 보정값은 데이터셋별 자동 저장·복원
- 렌더 성능 : 사전계산(가시성) + RAF(좌표 재투영) 분리로 4K·대용량에서도 **60fps 유지**
- 측점 탐색 : 좌표/측점 이중탐지 + 합집합 보강으로 **조차장·종점 재진입 마커 누락 해소**, 실제 측점 없는 위치는 측점값 라벨 숨김
- 운영 : 사내망 외부접속 지원(포트 55000), 보고서 자동생성(md→HTML/PDF) 도구 구축
- 이슈 : 지오코딩 **수평오차는 데이터 한계**(드래그 수동보정) · 지오이드고는 **지역상수**(대전 25.8m, 타지역 재튜닝) · VFR/GPS 노이즈 잔존 · **특허 KIPRIS 전문검색 미수행**
▷ 측점 표고 정합 vs 외부 DEM 활용 (비교)
| 항목 | 측점 표고 정합(본 방식) | 외부 DEM 활용 | 비고 |
|------|------------------------|---------------|------|
| 장점 | 1. 별도 DEM 취득 불필요<br>2. 노선 기복 자동 반영<br>3. 측량값이라 정밀(~0.2m) | 1. 측점 데이터 없는 구간도 커버 | 본 방식은 보유 측점 활용 |
| 단점 | 측점 사이 구간은 보간 의존 | 1. 취득비용/해상도 한계(30~90m)<br>2. 다운로드·전처리 시간 | DEM은 선로 인접·절벽서 부정확 |
> ☞ 정합 정확도가 핵심인 점검·분석 용도에서는 **측점 표고 정합 방식이 비용·정밀도 모두 유리**. 측점 미보유 구간 보강이 필요할 때만 외부 DEM 보조 활용 권장.
>
> ☞ 향후 : ① 발명 B(측점 표고 정합) + C(단일 드래그 역투영) 중심 **특허 출원**(KIPRIS 전문검색 선행) ② 렌즈왜곡·자동 캘리브레이션 ③ 측점 미보유 구간 DEM 자동조회.