fix(B05): 노선 원천을 한 곳으로 모으고 도엽 서피스를 기본 하나만 만든다

용화 자동 체인이 끝까지 돌았는데 종단 계획선이 PVI 3개 직선으로 나왔다. 관 22개
측점이 92.6~2044.9m 로 트림 전 원본(2,136m) 기준인데 확정 노선은 1,070.4m 라
21개가 노선 밖이었다. 좌표계도 갈려 있었다 — 관은 EPSG 5179(노선 파일), 노선은
5176(프로젝트)에 저장돼 누가거리만 우연히 맞물려 있었다.

원인은 계획노선을 읽는 곳이 흩어져 있는 것이다. 트림·조밀화를 체인 한 곳에만
넣었더니 배수유역·유입·도엽은 원본을 그대로 읽었다.

- load_design_route() 신규 — 읽기·좌표계 변환·트림·조밀화를 한 곳에서 끝낸다.
  설계 계통(체인·배수유역)은 전부 이 함수를 지난다.
- Router_Watershed 도 이 함수를 쓴다. 좌표계가 프로젝트 기준으로 통일돼 관과
  노선이 같은 공간에 놓인다.
- 도엽 서피스는 SHEET_SURFACE_AUTO_METHODS(기본 laplace 1종)만 자동 생성한다.
  여섯 방식을 매번 만들면 WF1 891초 중 655초를 여기서 쓴다. 나머지는 관리자가
  화면에서 고를 때 만든다.

Router_Inflow 는 노선을 EPSG 라벨용으로만 쓰고 기하를 안 써서 제외했다.
Engine_Extent(배경 지도 범위)도 제외 — 지도는 트림 전 전 구간을 덮어야 사용자가
측량 범위 밖을 볼 수 있다.

실측(용화 route 120):
  배수유역 노선   2,136m -> 1,070m   격자 889x1435 -> 545x831
  1차 영역        538,574㎡ -> 263,170㎡
  관 좌표계       EPSG 5179 -> 5176
  관              22개(10개가 노선 밖) -> 11개 전부 노선 안
  종단 PVI        3개 -> 13개, 종곡선 1 -> 11, 불균형 97.0% -> 86.2%
  PVI 측점이 관 측점과 일치한다(반올림 오차 제외).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-01 15:53:59 +09:00
co-authored by Claude Opus 5
parent e4b859766b
commit b014c4c1ec
7 changed files with 138 additions and 77 deletions
+9 -2
View File
@@ -23,7 +23,11 @@ from B04_PreProcess.B04_PreProcess_Engine_Pipeline import build_all_terrain_mode
from B04_PreProcess.B04_PreProcess_Engine_Structurize import structurize_las
from common_util.common_util_atomic import atomic_write_npz
from common_util.common_util_json import atomic_write_json
from config.config_system import SURFACE_GROUND_RATIO_WARN, build_surface_model_config
from config.config_system import (
SHEET_SURFACE_AUTO_METHODS,
SURFACE_GROUND_RATIO_WARN,
build_surface_model_config,
)
logger = logging.getLogger(__name__)
@@ -262,7 +266,10 @@ def run_surface_analysis(
build_sheet_surface_from_route,
)
sheet_models = build_sheet_surface_from_route(project_root, processed_dir, models_dir)
# 자동 전처리는 기본 방식 하나만 만든다 — 나머지는 관리자가 화면에서 고를 때.
sheet_models = build_sheet_surface_from_route(
project_root, processed_dir, models_dir, list(SHEET_SURFACE_AUTO_METHODS)
)
except Exception as exc:
logger.warning("도엽등고선 서피스 생성 실패: %s", exc)