feat(641-1): implicit 굳힌 격자 — 확정 지표면 B05 · B06 화면 일치

- implicit_{필터}_grid.npz = 같은 필터 dtm 축 · 유효 칸 · 유효 칸만 RBF · 밖 = dtm 값 · implicit · dtm 보다 옛것이면 다시 셈(파생 저장본)
- 서버 표본기 implicit = 굳힌 격자 DtmGridSampler(매번 RBF 다시 짓기 없앰) · Node 측점이 source 로 같은 격자
- B05 브라우저 격자 통로 · B06 서버 재계산 격자 = implicit 확정이면 같은 굳힌 격자(새 짝 없음 · 기존 heightAt 짝)
- 짓기 끝(build_implicit)에서 한 번 굳힘 · 못 지으면 처음 읽을 때

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-01 21:21:57 +09:00
co-authored by Claude Opus 5.5
parent 887ca4a035
commit f912efd36a
5 changed files with 91 additions and 33 deletions
@@ -255,12 +255,13 @@ def _enforce_stored_designs(
def design_grid_file(project_root: Path, params: dict[str, Any] | None) -> Path | None:
"""설계 지형이 DTM 이면 격자 이진(`dtm_grid_file` · 표본기 `build_surface_sampler` 와
같은 npz) · DTM 아닌 지표면(tin · nurbs · …) · 못 엶 = None(파이썬 길)."""
from common_util.common_util_surface_sampler import dtm_grid_file
"""설계 지형이 DTM · implicit 면 격자 이진(`dtm_grid_file` · 표본기 `build_surface_sampler` 와
같은 npz · implicit = 굳힌 격자 641-1) · 그 밖 지표면(tin · nurbs · …) · 못 엶 = None
(파이썬 길)."""
from common_util.common_util_surface_sampler import dtm_grid_file, implicit_grid_npz
params = params or {}
if params.get("method") != "dtm" or not params.get("source_filter"):
if params.get("method") not in ("dtm", "implicit") or not params.get("source_filter"):
return None
models = project_root / "B04_PreProcess" / "models"
smooth = models / f"dtm_{params['source_filter']}_smooth.npz"
@@ -270,6 +271,8 @@ def design_grid_file(project_root: Path, params: dict[str, Any] | None) -> Path
else smooth.with_name(f"dtm_{params['source_filter']}.npz")
)
try:
if params["method"] == "implicit":
npz = implicit_grid_npz(models, str(params["source_filter"]))
return dtm_grid_file(npz) if npz.is_file() else None
except (OSError, ValueError, KeyError) as exc:
logger.warning("서버 재계산: DTM 격자 이진을 못 만듦 — 파이썬 길 · %s", exc)