--- type: page-backend status: stable page_id: B04_PreProcess related_pages: ["[[B04_PreProcess/B04_backend]]", "[[B04_PreProcess/B04_frontend]]", "[[drainage_watershed]]", "[[crs_metadata]]", "[[completed_2026-09-03]]"] last_updated: 2026-09-03 source: ["docs/raw/plans/2026-09-03_plan_completed_items.md"] --- # B04 세부유역·방위·좌표계 ## 세부유역 형상 보존 | 항목 | 위치 | 역할 | |---|---|---| | `polygon_parts()` | `B04_PreProcess/B04_PreProcess_Engine_Watershed_Flow.py` | 유역의 분리 조각과 각 외곽·구멍 링을 보존 | | `WatershedBasin.boundary_parts` | `common_util/common_util_drainage_detail.py` | 다중 조각 정본; `boundary_xy`·`boundary_rings`는 호환 파생값 | | `polygon_rings_lonlat` | `B04_PreProcess/B04_PreProcess_Router_Basins.py` | API에 다중 링 좌표 제공 | | `pointInRings()` | B04·B05 유역 캔버스 | even-odd 채움과 구멍을 고려한 선택 판정 | | `assemble_basins()` | `common_util/common_util_drainage_detail.py` | 세부유역만 최소면적 0㎡, 단순화 허용오차 1m 적용 | S자 실사례와 용화 자료에서 구멍·분리 조각을 유지하고 경계 없는 유역을 제거했다. 1차 전체 배수유역의 단일 외곽 규칙은 유지한다. ## 종단 높낮이 기반 배정 | 항목 | 위치 | 역할 | |---|---|---| | `assign_road_cells_to_pipes()` | `common_util/common_util_drainage_detail.py` | 관 사이 최고점을 분수령으로 삼아 좌우 관에 도로 셀 배정 | 미세 요철의 국소 저점 추적 대신 구간 마루를 사용한다. 관 없는 저점은 별도 시설로 만들지 않는다. ## 3D 방위와 좌표계 | 항목 | 위치 | 역할 | |---|---|---| | `B04_PreProcess_UI_Compass.ts` | `B04_PreProcess/` | 카메라 오프셋과 `x, 높이, -y` 규약으로 도북 회전각 산출 | | `resolve_project_crs()` | `common_util/common_util_crs.py` | 노선 CRS·파일 라벨·지형 PRJ·DB EPSG·5186 순 폴백 창구 | | 트림 실패 진단 | `common_util/common_util_route_geometry.py` | 노선과 지표면 bbox를 기록해 좌표계·측량범위 문제 구분 | 이 페이지 작성 당시 작업 좌표계는 지형 PRJ였으나, 이후 완료된 라이다 우선·입력 차단 결정은 [[B04_PreProcess/B04_compass_crs_2026_09]]을 따른다.