Commit Graph
3 Commits
Author SHA1 Message Date
eomsangdonandClaude Fable 5 638af3ecc6 feat(B05): 세류망 흐름 새김 + 32방위 화살표 + 확장 루프 분리
1. 세류선 위 셀이 파랑으로 나오던 문제
   원인: 등고선 TIN 보간면은 실제 물골(thalweg)을 재현하지 못해, 세류선 위
   셀인데도 D8이 옆 사면으로 흘려보내 도로에 닿지 못했다.
   조치 (2가지 함께):
   - burn_stream_flow: 확정된 상류 세류망을 따라 격자 흐름 방향을 강제로 새긴다.
     세류망은 이미 도로를 건너 하류로 빠지는 물길로 확정된 자료다.
   - 사슬 추적의 종결 조건에 세류망 셀을 추가. 물이 세류에 합류한 시점에
     도로 도달이 결정된다(사슬 끝이 도로 셀에 정확히 닿지 않아도 된다).
   - StreamSplit.upstream 을 물 흐름 방향(상류->하류)으로 정렬. 방향은
     _spread_network 확산 시 진입 끝점을 기록해 한 번에 정한다.

2. 화살표 8방위 -> 32방위
   descent_azimuth: 지표면 기울기에서 연속 최급강하 방위를 뽑아 32단계로 양자화.
   D8은 연결(도로 도달 판정)에만 쓰고 표시는 실제 지형 방위를 따른다.
   세류망 새김 셀은 확정된 물길 방향을 그대로 쓴다.
   응답 바이트: 하위 6비트=32방위(32=제자리, 33=표고없음), 0x80=도로 도달.

3. 확장 루프 분리
   Basin._solve_grid 안에 있던 루프를 Flow.expand_until_closed 로 분리.
   단계 검증 미리보기는 이 경로를 타지 않는다.

4. 도로 미도달 셀 화살표를 백색으로 변경(파랑 채움 + 백색 화살표).

합성 검증: 세류 새김 389셀 전부 도로 도달, 32방위 전부 등장,
지류가 본류 중간에 합류하는 갈래를 미연결로 오탐하던 경고 제거.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:50:21 +09:00
eomsangdonandClaude Fable 5 683a5c9198 feat(B05): 격자를 1차 영역 안에만 생성, 원점을 도로 시작점에 고정
bbox 사각형만 그리던 것을 실제 셀 생성으로 바꾼다.

- 격자 원점을 도로 시작점에 맞춘다(grid_spec_from_bounds anchor_xy).
  bbox 좌상단 기준이면 1차 영역이 조금만 달라져도 격자가 통째로 밀려
  이전 결과와 셀이 대응되지 않는다.
- build_cell_mask: 1차 영역에 조금이라도 걸치는 셀만 생성(all_touched).
  합성 검증에서 bbox 360,000셀 중 197,623셀(55%)만 생성.
- mask_row_spans: 셀을 행별 연속 구간으로 압축해 응답에 싣는다.
  낱개 대비 0.23% 크기(451구간 vs 197,623셀).
- expand_grid_spec 을 셀 정수배 확장으로 바꿔 확장해도 격자점이 유지된다.
- grid_transform 을 Flow -> Grid 로 옮겨 중복 제거.
- 프론트: bbox 전체 눈금 대신 생성된 셀만 흐린 선으로. 셀이 2px 미만이면
  구간을 통짜로 흐리게 칠하고 확대하면 셀 하나하나가 보인다.
- 저장: 01_primary_region_cells.npz 에 격자 규격 + 셀 마스크 기록
  (셀 수십만 개라 GeoJSON 폴리곤으로는 못 남긴다)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:05:58 +09:00
eomsangdonandClaude Fable 5 a77ee317a5 refactor(B05): 세류망·1차영역을 Watershed_Stream 모듈로 분리 (700줄 제한)
Grid.py 가 708줄로 제한을 넘어 관심사 단위로 갈랐다.

- Watershed_Stream.py (292줄): 세류망 노딩·도로 절단·연결망 확산,
  ElevationSampler, PrimaryRegion, build_primary_region
- Watershed_Grid.py (427줄): 등고선 구름, 격자 규격, TIN 보간,
  웅덩이 채움, 평탄면 해소, D8
- _iter_linestrings -> iter_linestrings, _spec_from_bounds ->
  grid_spec_from_bounds 로 공개(모듈 간 재사용). 의존 방향은 Stream -> Grid 단방향.
- 죽은 코드 제거: select_upstream_streams, _point_elevation

회귀 확인: 합성 유역 179,919㎡ 동일, 연결망 판정 동일.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 17:57:13 +09:00