--- type: concept status: stable related_pages: ["[[B03_FileInput/B03_backend]]", "[[B04_PreProcess/B04_backend]]", "[[dependencies]]", "[[architecture/shared_resources]]"] last_updated: 2026-08-16 source: ["docs/raw/plans/2026-07-18_plan_crs_normalization.md", "docs/raw/verification/2026-07-18_verify_crs_and_polling_log.md"] --- # CRS 메타데이터 정상화 ## 검증된 판정 | 항목 | 위치 | 역할·판정 | |---|---|---| | `normalize_crs_metadata()` | `B03_FileInput/B03_FileInput_Engine_Analyze.py` | 복합 CRS를 수평·수직 요소로 분리하고 JSON 직렬화 가능한 공통 구조로 정규화 | | `epsg` | B03 분석 메타데이터 | 복합 CRS 전체가 아니라 지도 변환에 쓰는 수평 EPSG를 유지; 실제 자료에서 `5187` 확인 | | `horizontal_crs` | B03 분석 메타데이터 | 수평 CRS 식별 결과와 authority 보존 | | `vertical_crs` | B03 분석 메타데이터 | KNGeoid24 같은 수직 기준을 수평 CRS와 분리 보존 | | `crs_status` | B03 분석 메타데이터 | `identified`, `custom_vertical_crs`, `unknown_horizontal_crs`, `missing_crs` 구분 | | `custom_authority_codes` | B03 분석 메타데이터 | KNGeoid24 WKT의 사설 코드 표식을 파싱용 WKT와 분리해 원문 정보 보존 | ## 데이터 흐름 | 생산자 | 처리 | 소비자 | |---|---|---| | GeoTIFF·PRJ·LAS 업로드 | `normalize_crs_metadata()` | `input_files` 메타데이터 및 B04/B05 좌표 변환 | | 복합 CRS | 수평 EPSG와 수직 기준 분리 | `epsg=5187`, `vertical_crs=KNGeoid24` 형태 | | 알 수 없는 수평 CRS | 추측하지 않고 `epsg=None` | 사용자 확인이 필요한 `unknown_horizontal_crs` 상태 | ## 검증 범위와 모순 이력 - 실제 `result.tif`, `result.prj`, `cloud_merged.las`로 수평 EPSG 5187과 KNGeoid24 분리 처리가 검증됐다. - 같은 검증보고서에서 B04 status 폴링 로그 제거 방식은 전체 access log를 꺼 부작용이 있어 FAIL이었다. - 해당 B04 실패는 후속 B04 검증에서 `access_log=False` 롤백과 일반 사용자 진입 가드 방식으로 대체됐다. CRS 정상화 PASS와 B04 폴링 FAIL을 하나의 상태로 합치지 않는다. ## 사용처 - [[B03_FileInput/B03_backend]] — 업로드 파일 메타데이터 분석과 DB 저장 - [[B04_PreProcess/B04_backend]] — 지표면·GIS 처리 좌표 기준 - [[dependencies]] — Rasterio/Pyproj PROJ 런타임 차이 모니터링