- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
PLAN ARCHIVE: B04 등고선 — 기본값(CSF+DTM) 외 조합에서 표시 안 됨 (2026-07-17)
활성 작업: B04 등고선 — 기본값(CSF+DTM) 외 조합에서 표시 안 됨 (2026-07-17)
증상
좌측 옵션에서 지면 필터(csf/pmf/grid_min_z) 또는 지표면 표현(tin/dtm/nurbs/implicit/meshfree)을 기본값(csf+dtm)에서 바꾸면 3D 뷰어에 등고선이 나타나지 않음.
원인 분석 (실 저장소 storage/.../B04_wf1_Surface/models/ 캐시 파일 실증 확인)
| # | 원인 | 근거 위치 |
|---|---|---|
| 1 | 간격 기본값 불일치 (핵심): 파이프라인 사전 캐시는 contour_interval_meters=5.0m로만 생성, 프론트 기본 간격은 1.0m → 캐시 파일명(contour_{filter}_{method}_{interval}m.json) 불일치로 항상 캐시 미스 → 모든 조합이 첫 조회 시 온디맨드 재계산 |
B04_wf1_Surface_Engine_Pipeline.py:57, B04_wf1_Surface_UI_TerrainViewer.ts:78, B04_wf1_Surface_Router.py:616-618 |
| 2 | 온디맨드 계산은 실제로 동작하나 13~23초+ 소요, 그동안 UI 무피드백: 오늘(07-17 18:06~18:14) 사용자 조작 시각에 contour_pmf_dtm_smooth_1.0m.json 등이 실제 생성됨 = 계산은 됨. 그러나 자동 로드 경로는 void loadContourLines(...)로 결과·진행을 무시 → 상태표시는 "표시 중"에 머물고, 사용자는 "계산 안 함"으로 인지 |
B04_wf1_Surface_UI_TerrainViewer.ts:344,366 |
| 3 | 실패 침묵 2중: (a) 파이프라인 사전 캐시 실패를 except: pass로 은폐 — 실제로 contour_csf_nurbs_*.json은 어떤 간격으로도 존재하지 않음(manifest는 nurbs csf "completed") (b) 프론트 loadContourLines 실패 시 catch → return false만 하고 사용자에게 알리지 않음 |
B04_wf1_Surface_Engine_Pipeline.py:272-273, B04_wf1_Surface_UI_TerrainViewer.ts:483-486 |
| 4 | 무거운 표현의 1.0m 온디맨드 과부하: nurbs(전 필터)·meshfree(전 필터)·비스무딩 tin 등은 1.0m 격자 온디맨드 산출물이 하나도 없음 — RBF/griddata/Delaunay를 1m 격자로 돌려 수십 초~수 분 소요 또는 실패 추정. Router는 target_grid_m=1.0 고정 |
B04_wf1_Surface_Router.py:648-655 |
| 5 | (부수) 응답 경합 가드 없음: 선택을 빠르게 바꾸면 이전 모델의 등고선 응답이 늦게 도착해 새 화면에 그려질 수 있음 | B04_wf1_Surface_UI_TerrainViewer.ts:379-388 |
| 6 | (부수) 파이프라인 캐시 재사용 분기(continue)는 등고선 사전 캐시 존재를 보증하지 않음 → 재분석 시에도 누락 캐시가 복구되지 않음 |
B04_wf1_Surface_Engine_Pipeline.py:199-218 |
수정 방향 및 구현 체크리스트
- C1. 간격 기본값 정합: 프론트 등고선 간격 기본값을 사전 캐시 간격(5.0m)과 일치시킴 (
intervalInput.value = "5.0"+resetOptions()동일 수정). 사용자가 간격을 바꾸면 그때만 온디맨드 계산. —B04_wf1_Surface_UI_TerrainViewer.ts - C2. 등고선 로딩 피드백: 자동 로드 경로에서도
statusSpan에 "등고선 계산 중..." 표시, 완료/실패 시 결과 반영 (void제거하고 결과 사용). —B04_wf1_Surface_UI_TerrainViewer.ts - C3. 실패 침묵 제거: 파이프라인
except: pass→logger.warning(...)로 교체(빌드 무효화는 여전히 안 함). 프론트 실패 시 상태 문구 표시. —B04_wf1_Surface_Engine_Pipeline.py,..._UI_TerrainViewer.ts - C4. csf+nurbs 등고선 실패 원인 재현·수정:
extract_contours(nurbs_csf.npz, "bspline_surface", ...)를 venv로 직접 실행해 예외 확인 후 수정 (RectBivariateSpline 파라미터 추정). —B04_wf1_Surface_Engine_Contour.py - C5. 온디맨드 격자 해상도 적응화: Router 고정
target_grid_m=1.0→ 모델 범위 기반 적응(예: 격자 셀 수 상한 도입)으로 무거운 표현의 계산 시간 상한 확보. —B04_wf1_Surface_Router.py - C6. 응답 경합 가드:
loadContourLines응답 도착 시currentModelId·간격이 요청 시점과 같을 때만 그리기. —B04_wf1_Surface_UI_TerrainViewer.ts - C7. 캐시 재사용 분기에서 등고선 캐시 보증:
_cache_is_valid통과(continue) 시에도 기본 간격 등고선 파일 부재면_cache_contours호출. —B04_wf1_Surface_Engine_Pipeline.py
검증 기준
- 15개 전 조합(3필터×5표현, 스무딩 on/off 포함)에서 등고선 표시 또는 명시적 실패 메시지 확인
contour_csf_nurbs_5.0m.json생성 확인- 계산 중 상태 문구 노출 확인