diff --git a/B04_wf1_Surface/B04_wf1_Surface_Engine.py b/B04_wf1_Surface/B04_wf1_Surface_Engine.py index 9344bd77..9d97ca5f 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_Engine.py +++ b/B04_wf1_Surface/B04_wf1_Surface_Engine.py @@ -283,6 +283,45 @@ def run_surface_analysis( ) except Exception as exc: logger.warning("B04 국가 GIS 벡터 다운로드 실패: %s", exc) + + # 3-3. 1:5,000 수치지형도 도엽 3x3(9매) 확보 → 프로젝트 영구저장소 + # (실패해도 분석은 계속 — 폴백은 수동 다운로드 + 인제스트) + _report(92, "download_maps", "수치지형도 도엽 확보 중") + try: + from pyproj import Transformer + + from B04_wf1_Surface.B04_wf1_Surface_Engine_MapSheet import ( + latlon_to_sheet5k, + neighbors_3x3, + ) + from B04_wf1_Surface.B04_wf1_Surface_Engine_SheetStore import ( + ensure_sheets, + get_project_map_sheets_dir, + ) + from B04_wf1_Surface.B04_wf1_Surface_Engine_VWorld import get_epsg_from_prj + + src_epsg = "EPSG:5186" + if prj_path.exists(): + src_epsg = get_epsg_from_prj(prj_path.read_text(encoding="utf-8", errors="ignore")) + transformer = Transformer.from_crs(src_epsg, "EPSG:4326", always_xy=True) + center_lon, center_lat = transformer.transform( + (bounds_dict_for_download["x"][0] + bounds_dict_for_download["x"][1]) / 2.0, + (bounds_dict_for_download["y"][0] + bounds_dict_for_download["y"][1]) / 2.0, + ) + step_started = time.monotonic() + sheet_result = ensure_sheets( + get_project_map_sheets_dir(project_root), + neighbors_3x3(latlon_to_sheet5k(center_lat, center_lon)), + ) + if sheet_result["failed"]: + logger.warning("B04 수치지형도 도엽 일부 확보 실패: %s", sheet_result["failed"]) + logger.info( + "B04 수치지형도 도엽 확보 완료: %d매 (%.1fs)", + len(sheet_result["available"]), + time.monotonic() - step_started, + ) + except Exception as exc: + logger.warning("B04 수치지형도 도엽 확보 실패: %s", exc) except Exception as exc: logger.warning("B04 지도·GIS 다운로드 단계 실패: %s", exc)