fix(B04): 유역 경계 단순화 허용오차 2.0m → 1.0m (격자 한 칸)

유역 격자가 1m(DRAINAGE_GRID_SIZE_M)라 경계는 1m 계단이다. 허용오차를 격자 한 칸에
맞추면 형상 손실이 격자 오차 안으로 들어가고, 유역별로 따로 단순화해 생기던 공유 경계
어긋남도 줄어든다.

실측(min_area=0 상태, 용화/S자):
- 좌표점        622·829   → 1,749·1,987
- 면적오차      1.86%·1.42% → 1.01%·0.67%
- 유역끼리 중첩 1,043㎡·1,373㎡ → 243㎡·373㎡
- 틈            1,184㎡·2,579㎡ → 369㎡·668㎡
0.5m 이하는 1m 계단 점을 지우지 못해 좌표점만 6배(10,215)로 튄다.

브라우저 실측도 같은 값(API 좌표점 1,750·1,987, 경계 없는 유역 0개)이고 확대해도 계단이
도드라지지 않는다. 테스트 159 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-03 15:50:12 +09:00
co-authored by Claude Opus 5
parent 754e00de19
commit 090442bb00
+6 -1
View File
@@ -389,7 +389,12 @@ DRAINAGE_PIPE_MIN_SPACING_M = float(os.getenv("DRAINAGE_PIPE_MIN_SPACING_M", "5.
# 측구 흐름(도로 셀 → 담당 관) 판정용 종단 계획선 샘플 간격(m).
DRAINAGE_DITCH_SAMPLE_M = float(os.getenv("DRAINAGE_DITCH_SAMPLE_M", "1.0"))
# 유역 폴리곤 단순화 허용오차(m). 격자 계단 경계를 매끄럽게 줄여 응답 크기를 낮춘다.
DRAINAGE_POLYGON_SIMPLIFY_M = float(os.getenv("DRAINAGE_POLYGON_SIMPLIFY_M", "2.0"))
# 격자가 1m(DRAINAGE_GRID_SIZE_M)라 경계는 1m 계단이다 — 허용오차를 격자 한 칸에 맞추면
# 형상 손실이 격자 오차 안에 들어간다. 2.0m는 유역별로 따로 단순화하는 탓에 공유 경계가
# 크게 어긋났다(2026-09-03 실측, 용화: 중첩 1,043㎡·틈 1,184㎡ → 1.0m에서 243㎡·369㎡,
# 면적오차 1.86%→1.01%, 좌표점 622→1,749). 0.5m 이하는 계단 점을 못 지워 좌표점만 6배로
# 튄다(10,215).
DRAINAGE_POLYGON_SIMPLIFY_M = float(os.getenv("DRAINAGE_POLYGON_SIMPLIFY_M", "1.0"))
# 이 면적(㎡) 미만의 유역 조각은 버린다(격자 노이즈 제거).
DRAINAGE_MIN_BASIN_AREA_M2 = float(os.getenv("DRAINAGE_MIN_BASIN_AREA_M2", "100.0"))
# 격자 해석 결과 캐시 파일명. 프로젝트 저장소의 B04_PreProcess/drainage/ 아래에 놓인다.