fix(공용 지형): 전국 0차곡 이웃 도엽 받기 실패 36 가름 · 면 도곽 · zip 없는 도엽 · 어긋난 도곽 = 빈 지형 (PLAN 628-3)
- 도곽 겹 N3A_H0010000(면) 도 읽음 — 섬 · 해안 작은 zip 은 선 도곽 · 도로 면 없이 면 도곽뿐 - Ver2.0 이 NGI · NDA 뿐인 도엽 = LookupError(zip 없음) — 옛 길은 NGI 글을 zip 으로 받다 로그인 실패로 오판 - 공용 지형 받기: ValueError(도곽이 번호 자리와 어긋남 = 제주 · 울릉 번호 체계) 도 빈 지형 · 로그인 · 망 실패는 그대로 실패 - 시험 test_628_3_sheet_fetch_fallback 새로 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -39,8 +39,10 @@ from .B04_PreProcess_Engine_MapSheet import latlon_to_sheet5k, sheet5k_to_bounds
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# 도곽선 레이어 코드 (수치지형도 v2.0 도엽본) — 도곽선 N3L_H0010000 이 없는 zip 은 옛 A0010000(도로 면)로 대신
|
||||
# 도곽선 레이어 코드 (수치지형도 v2.0 도엽본) — 선 N3L_H0010000 · 면 N3A_H0010000(섬 · 해안 작은 도엽)
|
||||
# · 둘 다 없는 zip 은 옛 A0010000(도로 면)로 대신
|
||||
_SHEET_FRAME_CODE = "N3L_H0010000"
|
||||
_SHEET_FRAME_AREA_CODE = "N3A_H0010000"
|
||||
_SHEET_FRAME_FALLBACK_CODE = "A0010000"
|
||||
_SHEET_NO_RE = re.compile(r"(\d{8})")
|
||||
_SHARED_DIRNAME = "_shared" # storage/_shared 아래 = 여러 프로젝트가 같이 쓰는 창고
|
||||
@@ -153,7 +155,11 @@ def download_sheet(store_dir: str | Path, sheet_no: str, version: int = 2) -> di
|
||||
rows = search_sheet_files(sheet_no, version=version)
|
||||
if not rows:
|
||||
raise LookupError(f"도엽 {sheet_no}: 브이월드 검색 결과 없음")
|
||||
row = rows[0]
|
||||
# Ver2.0 이 zip 아닌 NGI · NDA 뿐인 도엽(작은 섬) — 받을 zip 없음
|
||||
row = next((r for r in rows if str(r.get("file_nm", "")).lower().endswith(".zip")), None)
|
||||
if row is None:
|
||||
kinds = ", ".join(sorted({str(r.get("file_extsn", "")) for r in rows}))
|
||||
raise LookupError(f"도엽 {sheet_no}: Ver2.0 zip 없음({kinds})")
|
||||
|
||||
cookie = _session_cookie_cache or VWORLD_SESSION_COOKIE
|
||||
payload = None
|
||||
@@ -318,7 +324,7 @@ def ingest_zip(store_dir: str | Path, src_path: str | Path, sheet_no: str | None
|
||||
|
||||
|
||||
def _read_frame_bounds_wgs84(zip_path: Path) -> tuple[tuple[float, float, float, float], str]:
|
||||
"""zip 내 도곽선(N3L_H0010000 · 없으면 A0010000) SHP bounds를 WGS84로 반환. (bounds, 사용된 CRS).
|
||||
"""zip 내 도곽선(N3L_H0010000 · N3A_H0010000 · 없으면 A0010000) SHP bounds를 WGS84로 반환. (bounds, 사용된 CRS).
|
||||
|
||||
선언된 PRJ가 오라벨(중부/동부원점 뒤바뀜)인 실측 사례가 있어, 파일명 도엽번호
|
||||
기준 예측 도곽과 대조해 정합한 CRS를 자동 판별한다.
|
||||
@@ -328,7 +334,7 @@ def _read_frame_bounds_wgs84(zip_path: Path) -> tuple[tuple[float, float, float,
|
||||
with zipfile.ZipFile(zip_path) as zf:
|
||||
names = zf.namelist()
|
||||
shp: list[str] = []
|
||||
for code in (_SHEET_FRAME_CODE, _SHEET_FRAME_FALLBACK_CODE):
|
||||
for code in (_SHEET_FRAME_CODE, _SHEET_FRAME_AREA_CODE, _SHEET_FRAME_FALLBACK_CODE):
|
||||
shp = [n for n in names if n.upper().endswith(f"{code}.SHP")]
|
||||
if shp:
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user