fix(B04): 배경 지도 재다운로드 판정을 파일 존재에서 범위 포함 여부로 변경

기존에는 vworld_*_meta.json이 있으면 무조건 건너뛰었다. B03 업로드가 부르는 전처리
경로는 rebuild=False라, 계획노선이 바뀌거나 여유 셀 설정을 바꿔도 옛 사진을 계속 썼다
(2026-08-01 사용자 지적: 트리거 시점 문제).

map_meta_covers()로 저장된 사진이 필요한 범위(라이다 U 계획노선)를 실제로 덮는지
확인하고, 못 덮으면 다시 받는다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-01 12:18:47 +09:00
co-authored by Claude Opus 5
parent d3b443e077
commit 6af50811b6
2 changed files with 28 additions and 2 deletions
+7 -2
View File
@@ -232,7 +232,10 @@ def run_surface_analysis(
)
prj_path = prj_candidates[0] if prj_candidates else project_root / "result.prj"
from B04_wf1_Surface.B04_wf1_Surface_Engine_Extent import download_extent
from B04_wf1_Surface.B04_wf1_Surface_Engine_Extent import (
download_extent,
map_meta_covers,
)
from B04_wf1_Surface.B04_wf1_Surface_Engine_GisVector import download_all_gis_vectors
from B04_wf1_Surface.B04_wf1_Surface_Engine_VWorld import (
download_vworld_satellite_map,
@@ -259,7 +262,9 @@ def run_surface_analysis(
]
for item in layers:
meta_path = processed_dir / f"vworld_{item['layer'].lower()}_meta.json"
if not rebuild and meta_path.is_file():
# 파일이 있어도 계획노선·여유 셀이 바뀌어 범위를 못 덮으면 다시 받는다.
# (B03 업로드가 부르는 경로는 rebuild=False라, 존재 여부만 보면 영영 갱신되지 않는다.)
if not rebuild and map_meta_covers(meta_path, bounds_dict_for_download):
continue
try:
step_started = time.monotonic()
@@ -7,6 +7,7 @@
from __future__ import annotations
import json
import logging
from pathlib import Path
from typing import Any
@@ -81,6 +82,26 @@ def download_extent(
}
def map_meta_covers(meta_path: Path, extent: dict[str, list[float]]) -> bool:
"""저장된 배경 지도가 필요한 범위를 이미 덮고 있는가.
파일 존재 여부만 보면 계획노선이 바뀌거나 여유 셀 설정을 바꿔도 옛 사진을 계속 쓴다
(B03 업로드 → 전처리 경로는 `rebuild=False`라 더더욱 다시 받지 않는다, 2026-08-01).
"""
if not meta_path.is_file():
return False
try:
meta = json.loads(meta_path.read_text(encoding="utf-8"))
return (
float(meta["x_min"]) <= extent["x"][0]
and float(meta["x_max"]) >= extent["x"][1]
and float(meta["y_min"]) <= extent["y"][0]
and float(meta["y_max"]) >= extent["y"][1]
)
except (OSError, ValueError, KeyError, TypeError):
return False
def sheet_reference_points_wgs84(
project_root: Path,
las_bounds: dict[str, list[float]],