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:
@@ -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]],
|
||||
|
||||
Reference in New Issue
Block a user