- `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>
7.2 KiB
7.2 KiB
PLAN: B04 상세페이지·옵션 패널 재구성 (2026-07-17)
배경·목표
- B04(WF1 지표면) 프론트엔드에 불명 정보 그룹이 표시되고, 옵션 패널과 상세 영역 간 중복 구현·미작동 기능이 존재.
- 백엔드는 업로드 시 자동 분석(
trigger_wf1_analysis_and_email,B03_FileInput_Router.py:147)으로 지면 필터 3종(grid_min_z/csf/pmf) × 표현 기법 5종(tin/dtm/nurbs/implicit/meshfree) = 15개 지표면 모델을 영구저장소+DB에 저장한다(config_system.py:99-104). RANSAC은 사전계산 대상이 아니며 요청 시 허용 필터로만 존재(B04_wf1_Surface_Schema.py:12). B04는 "선택 → 저장된 결과 표시 → 확정" 화면으로 재구성한다. - 이 작업은 기존 백로그 "B04 자동화 개편"의 프론트엔드 부분을 구체화한 것임.
작업 범위 (대상 파일)
| 파일 | 작업 |
|---|---|
B04_wf1_Surface/B04_wf1_Surface_UI_Page.ts |
그룹 삭제, 옵션 패널 재정의, 버튼 교체, 2열 배치 조립 (중심 파일) |
B04_wf1_Surface/B04_wf1_Surface_UI_Viewer.ts |
배경지도/국가GIS 표시 제거, 카메라 동기화 인터페이스 |
B04_wf1_Surface/B04_wf1_Surface_UI_TerrainViewer.ts |
하단 선택그룹 제거, 카메라 동기화 인터페이스 |
B04_wf1_Surface/B04_wf1_Surface_UI_MapViewer.ts |
기본값 위성/지적도, 탑뷰 정합(대각선 현상 확인·수정) |
B04_wf1_Surface/B04_wf1_Surface_UI_Style.css |
2열 레이아웃, 제목 제거·최대 폭 |
B04_wf1_Surface/B04_wf1_Surface_Api_Fetch.ts |
표시 포인트 수 상한 50만 대응 |
B04_wf1_Surface/B04_wf1_Surface_Router.py |
POINT_CLOUD_SAMPLE_LIMIT 100_000 → 500_000 (51줄, 1줄 수정) |
스펙
1. 삭제 항목 (프론트 표시만 제거, 백엔드 API는 유지)
- "지면 필터 통계" 그룹 삭제 (
fetchSurfaceGroundStats호출·표시 제거) - "생성된 지표면 모델" 그룹(모델 카드 목록) 삭제 — 확정 UX는 아래 버튼으로 이동
2. 좌측 사용자 옵션 패널 재정의
- 입력 포인트 클라우드 그룹
- 드롭다운: 입력 LAS 파일 선택 유지. "#XX 선택" 라벨의 실체 확인 후 의미 있는 라벨로 정리
- 파일명 항목 제거
- 표시 정보: 좌표계 / 크기(LAS 원본 전체 파일 크기) / 포인트 수 / 프론트엔드 표시 포인트 수 / 높이 범위(min~max 값)
- 지면 필터 선택 그룹: 사전계산된 필터 3종(grid_min_z/csf/pmf)만 노출, 선택 시 영구저장된 결과를 즉시 뷰어에 로드, "표시 옵션" 그룹 설정에 따라 렌더
- RANSAC은 드롭다운에서 제거 (
UI_Page.ts:54의SOURCE_FILTERS에서ransac삭제). 업로드 자동 분석에 미포함이라 저장 데이터가 없음. 백엔드 RANSAC 엔진·화이트리스트는 유지 - 표시 포인트 규칙: 지면 필터 후 포인트가 50만 개 초과 시 랜덤 50만 개, 이하면 전체 표시 (
POINT_CLOUD_SAMPLE_LIMIT100_000 → 500_000, 기존 샘플링 로직 재사용Router.py:343-348) - 밀도 100% = 위 규칙으로 로드된 지면 필터 직후 데이터 기준
- RANSAC은 드롭다운에서 제거 (
- 지표면 표현 선택 그룹: 모델(TIN/DTM/NURBS/implicit/meshfree) 선택 시 영구저장된 모델을 즉시 뷰어에 로드
- 서피스 / 스무딩 / 등고선 / 등고선 간격: 모델 비교 영역 하단에서 옵션 패널로 이동 (기존 컨트롤 재사용)
- 뷰어 시점 제어 그룹: 포인트클라우드 미리보기 + 5종 모델 비교 두 뷰어에 공통 적용
- 버튼 교체
- "지표면 분석 실행" → "모델 확정": 현재 선택된 (지면 필터 + 지표면 표현) 조합에 해당하는
surface_models.id를POST .../surface/confirm으로 전송. 확정 성공 시 기존 토스트·WF2 이동 활성화 유지 - "목록 새로고침" → "초기화": 옵션 그룹 기본값 복원 + 목록 재조회
- "지표면 분석 실행" → "모델 확정": 현재 선택된 (지면 필터 + 지표면 표현) 조합에 해당하는
3. 3D 뷰어 영역 (상세 영역)
- 포인트클라우드 미리보기 ↔ 지면 필터별 5종 지표면 모델 비교를 2열 배치
- 제목 제거, 가용 폭 최대 사용
- 카메라 동기화: 어느 쪽을 마우스로 조작해도 두 뷰어 동일 시점 유지
- 미리보기의 배경지도·국가GIS 표시 제거 (백엔드 fetch 함수
getVWorldMapUrl/fetchVWorldMeta/fetchGisGeoJson은 유지 — 하단 2D 지도가 사용) - 5종 모델 비교 하단의 선택 그룹들 삭제 (서피스/스무딩/등고선/간격은 옵션 패널로 이관)
4. 하단 2D 배경지도·GIS 레이어 그룹
- 현행 유지하되 기본값: 배경지도=위성(Satellite), GIS 레이어=지적도
- 완전한 탑뷰(정사) 정합으로 표시 — 사용자가 보고한 "살짝 대각선" 현상의 원인(투영/오프셋/착시)을 코드에서 확인 후 수정. 표시 옵션 그룹과는 별개 항목
5. 공통 원칙
ui_templates(createWorkflowLayout, 폼 그룹 템플릿 등) 최대 재활용, 신규 템플릿 남발 금지- Surgical Edit, 700줄 제한(UI_Page.ts 증가 시 기능별 분리), 완료 후
prettier실행
구현 체크리스트
- 1. UI_Page: "지면 필터 통계" 그룹 및 관련 호출 제거
- 2. UI_Page: "생성된 지표면 모델" 그룹(모델 카드) 제거
- 3. UI_Page: 입력 포인트 클라우드 그룹 재정의 (드롭다운 라벨 정리, 파일명 제거, 좌표계/크기/포인트 수/표시 포인트 수/높이 범위 표시)
- 4. Router:
POINT_CLOUD_SAMPLE_LIMIT500_000으로 변경 (50만 초과 시 랜덤 50만, 이하 전체) - 5. UI_Page: 지면 필터 선택 → 즉시 로드·표시 옵션 연동 렌더,
SOURCE_FILTERS에서ransac제거 - 6. UI_Page: 지표면 표현 선택 → 즉시 모델 로드 렌더
- 7. UI_Page/TerrainViewer: 서피스·스무딩·등고선·등고선 간격 컨트롤을 옵션 패널로 이관, 비교 영역 하단 선택그룹 삭제
- 8. Viewer/TerrainViewer: 뷰어 시점 제어 공통 적용 + 양방향 카메라 동기화
- 9. UI_Page/Style.css: 2열 배치, 제목 제거, 최대 폭
- 10. Viewer: 미리보기 배경지도·국가GIS 표시 제거 (fetch 함수 유지)
- 11. UI_Page: 버튼 교체 — "모델 확정"(confirm 연동), "초기화"(기본값 복원+재조회)
- 12. MapViewer: 기본값 위성/지적도, 대각선 현상 확인·탑뷰 정합
- 13. prettier 적용, 700줄 제한 점검
리스크·확인 사항
- 확정 매핑 확인됨: 영구저장 모델은 3필터 × 5기법 = 15개 조합(
config_system.py:99-104). 확정 버튼 = 선택된 (필터, 기법) 조합의surface_models.id를 confirm API로 전송 - 표시 샘플링과 백엔드 분석 분리 확인됨: 50만 샘플링은 미리보기 응답(
GET .../surface/point-cloud)에만 적용. 경로(B05)·등고선 분석은 영구저장소의 전체 필터링 데이터 기준 — 검증 단계에서 재확인 - RANSAC 처리 확정됨: 업로드 자동 분석(
B03_FileInput_Router.py:164-165)은 3종 필터만 실행 → RANSAC 저장 데이터 없음. 프론트 드롭다운에서 제거(현재 노출 중 = 미작동 항목), 백엔드 기능은 유지 - "#XX 선택" 드롭다운 실체: 코드 확인 후 라벨 정리 (구현 단계)