knowledge(요구): 요구서 486 전국 등고선 공용 지형 · 분석 셋 · 요구 490 원문 — PLAN 607~611 승인 대기 · 606 원천 바꿈
- 등고선 원천 = 전국 등고선 파일 · 도엽 zip = 빠진 곳 · 보조 겹만 · 정션 · 갱신 = 사용자 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015uTVHHDv583hbLQAFeBmd9
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
# 대조 483 — 전국 gpkg 등고선 vs 도엽 zip 등고선 (요구 483)
|
||||
|
||||
읽기 전용 · 코드 · storage · DB 안 고침 · 계산 = 메모리 안 · 외부 받기 없음.
|
||||
표본 도엽 3 장 = 용화 `6067750f` 의 `36901073` · `36901084`(EPSG:5187 · 산지) + 다른 지역 `4250c7bc` 의 `36712079`(EPSG:5186 · 평지 230~360 m).
|
||||
gpkg 쪽 = 도곽(도엽번호 → 위경도 → 도엽 좌표계)을 5179 bbox 로 읽고 도엽 좌표계로 바꿔 도곽으로 자름(`crop_national_contours` 와 같은 꼴).
|
||||
|
||||
## 0. 결론
|
||||
|
||||
1. **해상도 문제 없음.** 두 원천은 같은 1:5,000 원도임. 꼭짓점 수 · 간격 · 총 길이 · 높이 단이 같음. 꼭짓점 99.7 % 이상이 1 mm 안에서 겹치고, 높이 짝은 100 % 맞음.
|
||||
2. 차이는 셋뿐임. ① 도곽 가장자리 자르기(0.3~1.2 m · 도곽선 위만) ② gpkg 는 도엽을 넘는 이음매 없는 긴 선이라 가닥 수가 다름 ③ 다른 판의 국소 수정(36712079 에서 6 단 · 0.44 km / 132 km · 최대 22 m).
|
||||
3. 지형면(2 m 라플라스) 차는 평균 0.005~0.05 m · 95 % 0.01~0.27 m. 같은 도엽 선을 **방향만 뒤집어도** 생기는 굽기 흔들림(평균 0.10 · 95 % 0.50 · 최대 9 m)보다 작음. 원천 탓이 아니고 굽기 코드 탓임.
|
||||
4. 「해상도」 인상의 출처 후보는 화면임. B04 하단 지도의 「등고선」 겹(gpkg)만 서버가 0.00003° 로 단순화해 보냄. 꼭짓점이 12~18 % 만 남고 최대 3.3 m 어긋남(`B04_PreProcess_Router_GIS.py:190-209`). 도엽 겹은 원형 그대로 보냄(`:177-187`).
|
||||
5. 도엽 zip 을 고른 까닭은 기록에 없음. 후보는 다른 겹과 한 벌 · 배포 서버의 gpkg 유무 모름 · 자동 받기가 이미 돎(5-2).
|
||||
|
||||
## 1. 도엽별 수치
|
||||
|
||||
| 항목 | 073 도엽 | 073 gpkg | 084 도엽 | 084 gpkg | 079 도엽 | 079 gpkg |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| 가닥 수 | 495 | 196(자르면 502) | 470 | 223(540) | 142 | 88(150) |
|
||||
| 꼭짓점 수(도곽 안) | 184,021 | 183,503 | 128,627 | 128,758 | 24,927 | 25,184 |
|
||||
| 총 길이 km | 786.546 | 786.548 | 844.586 | 844.587 | 132.150 | 132.155 |
|
||||
| 꼭짓점 간격 평균 · 중앙 · 95 % (m) | 4.29 · 2.91 · 12.7 | 4.28 · 2.91 · 12.7 | 6.59 · 5.25 · 16.3 | 6.55 · 5.22 · 16.2 | 5.33 · 3.85 · 14.6 | 5.24 · 3.77 · 14.5 |
|
||||
| 높이 단 수 · 범위 (m) | 108 · 515~1050 | 같음 | 145 · 390~1110 | 같음 | 27 · 230~360 | 같음 |
|
||||
| 5 m 배수 | 100 % | 100 % | 100 % | 100 % | 100 % | 100 % |
|
||||
| 계곡선(25 m 배수) 몫 | 20.2 % | 20.3 % | 20.6 % | 20.9 % | 22.5 % | 21.3 % |
|
||||
| 구분 | 주곡 395 · 계곡 100 | CTC002 153 · CTC001 43 | 주곡 373 · 계곡 97 | 176 · 47 | 주곡 110 · 계곡 32 | 69 · 19 |
|
||||
| 간곡선 · 조곡선 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 읽기 시간 | — | 0.29 s | — | 0.35 s | — | 0.04 s |
|
||||
|
||||
| 기하 대조 | 073 | 084 | 079 |
|
||||
| --- | --- | --- | --- |
|
||||
| 도엽 꼭짓점 → gpkg 선 거리 평균 · 95 % · 최대 (m) | 0.0002 · 0.0002 · 0.33 | 0.0002 · 0.0002 · 1.15 | 0.015 · 0.0003 · 14.0 |
|
||||
| 1 cm 넘는 도엽 꼭짓점 | 235(0.13 %) | 179(0.14 %) | 173(0.69 %) |
|
||||
| gpkg 꼭짓점 → 도엽 선 평균 · 95 % · 최대 (m) | 0.0001 · 0.0002 · 0.12 | 0.0001 · 0.0002 · 0.03 | 0.089 · 0.0004 · 21.8 |
|
||||
| 1 mm 안 같은 꼭짓점(도엽→gpkg · gpkg→도엽) | 99.71 % · 99.996 % | 99.73 % · 99.63 % | 98.79 % · 97.81 % |
|
||||
| 높이 짝 일치(가장 가까운 선) | 100 % | 100 % | 99.99 %(1 cm 안 100 %) |
|
||||
| 1 cm 넘는 자리 | 235 점 모두 도곽선 5 m 안 | 179 점 모두 도곽선 5 m 안 | 도곽 54 · 안쪽 119(국소 수정) |
|
||||
|
||||
## 2. 어디가 다른지
|
||||
|
||||
| 갈래 | 판정 | 근거 |
|
||||
| --- | --- | --- |
|
||||
| 단순화 | 없음 | 간격 · 꼭짓점 수가 같고 99.7 % 가 1 mm 안에서 겹침 · `build_contour_gpkg.py` `write_source` 는 SHP 를 그대로 옮김 |
|
||||
| 잘림 | 있음(해 없음) | 도엽 = 도곽에서 끊긴 선 · gpkg = 도엽을 넘는 긴 선(073 에 걸린 196 가닥의 꼭짓점 527만 → 도엽 안 18만) · 끝점 차 0.3~1.2 m 는 도곽선 위만 |
|
||||
| 좌표계 변환 오차 | 없음 | 5179 → 5186 · 5187(같은 GRS80 TM) · 평균 0.2 mm |
|
||||
| 누락 가닥 | 없음 | 길이 차 < 0.01 %(073: 1.5 m / 786.5 km) |
|
||||
| 갱신 시점(판) | 079 에 국소 수정 | 높이 245~270 의 6 단 · 도엽에만 441 m · gpkg 에만 448 m · 자리 X 285,397~287,564 · Y 413,068~414,520(EPSG:5186) · 최대 어긋남 22 m · 073 · 084 는 수정 0 · 어느 쪽이 새것인지 날짜로 못 가림(4장) |
|
||||
| 높이 값 | 같음 | 단 수 · 범위 · 5 m 배수 · 짝 일치 모두 같음 |
|
||||
|
||||
## 3. 지형면 영향 (2 m · 라플라스)
|
||||
|
||||
지금 코드 함수 그대로 씀: `_rasterize_contour_levels` → `build_laplace` → `_resolve_enclosed_interiors`(`SheetSurface.py:219` · `SheetMethods.py:124` · `SheetSurface.py:279`). 도곽 안 선만 넣고, 가장자리 100 m 를 뺀 칸끼리 비교함.
|
||||
|
||||
| 항목 | 073 | 084 | 079 |
|
||||
| --- | --- | --- | --- |
|
||||
| 격자 · 비교 칸 | 1388×1117 · 130.7만 | 1389×1118 · 130.8만 | 1399×1137 · 131.6만 |
|
||||
| 높이 차 평균 · 95 % · 최대 (m) | 0.023 · 0.11 · 5.0 | 0.046 · 0.27 · 5.0 | 0.005 · 0.009 · 2.54 |
|
||||
| 0.1 m 넘는 칸 | 5.5 % | 11.0 % | 1.2 % |
|
||||
| 평균 경사(도엽) | 30.9° | 33.1° | 4.2° |
|
||||
| 경사 차 평균 · 95 % · 최대 | 0.24° · 1.57° · 38.1° | 0.49° · 2.86° · 51.3° | 0.03° · 0.04° · 20.1° |
|
||||
| 셈 시간(두 원천 합) | 97 s | 87 s | 129 s |
|
||||
|
||||
대조군(073 · 같은 도엽 선):
|
||||
|
||||
| 바꾼 것 | 굽힌 칸 차(도곽 안) | 높이 차 평균 · 95 % · 최대 (m) |
|
||||
| --- | --- | --- |
|
||||
| 1 mm 옮김 | 26 칸 | 0.000 · 0.000 · 1.84 |
|
||||
| 선 방향만 뒤집음 | 61,474 / 307,905 칸(20 %) | 0.10 · 0.50 · 9.0 |
|
||||
| 도엽 → gpkg | 12,928 칸 · 선 방향 반대 112 / 495 가닥 | 0.023 · 0.11 · 5.0 |
|
||||
|
||||
- 지형면 차는 원천 차가 아님. 굽기(`all_touched=False` · `SheetSurface.py:268`)가 선 방향과 조각에 따라 다른 칸을 칠하는 탓임.
|
||||
- 곁 발견 — 같은 자료라도 선 방향에 따라 칸 높이가 최대 9 m 흔들림(지금 B · D 지형면 공통).
|
||||
|
||||
## 4. 그 밖 차이
|
||||
|
||||
| 항목 | gpkg | 도엽 zip |
|
||||
| --- | --- | --- |
|
||||
| 날짜 | `OBCHG_DT` · `RSREG_DT` · `DBREG_DT` 가 1,884,844 행 모두 2024-04-08 → 일괄 적재일이라 판 판정 근거가 못 됨 | index 에 갱신일 칸 없음(목록 API 응답 `last_upt_dat` 는 받지만 안 적음 · `SheetStore.py:114` · `:303-310`) · zip 안 SHP 날짜 = 2022-12-13(073 · 084) · 2023-01-26(079) |
|
||||
| 관리 업체 칸 | `MNENT_NM` = 지오투정보기술(용화) · (주)우리강산시스템(079) | 없음 |
|
||||
| 표고점 | 없음 | 172 · 94 · 614 점 · 지금 지형면 코드는 안 씀(등고선 파일만 · `SheetSurface.py:55`) |
|
||||
| 섬 | 있음 = 울릉 · 독도 · 제주(한라산 · 성산 · 우도 · 마라 · 추자) · 가거 · 흑산 · 강화 / **없음 = 백령 · 대청 · 소청 · 연평(±1.5 km 안 0 가닥)** | 받아 볼 수 없어 확인 못 함 |
|
||||
| 해안 도엽 | — | 보유 37 장 가운데 해안 도엽 없음 → 대조 못 함 |
|
||||
| 범위 | X 776,490~1,387,948 · Y 1,458,676~2,044,838(EPSG:5179) | 도엽 단위 |
|
||||
| 화면 전송 | 0.00003° 단순화 → 꼭짓점 11.7 % · 18.0 % · 17.5 % 남음 · 어긋남 평균 2.6~2.9 · 최대 3.3 m(`Router_GIS.py:202`) | 원형 그대로 · 자릿수만 줄임(`Router_GIS.py:177-187`) |
|
||||
|
||||
곁 발견 — 도곽 코드 `_SHEET_FRAME_CODE = "A0010000"`(`SheetStore.py:43`)는 도로 면 겹(칸 = UFID 뿐 · 도엽마다 여러 면)임. 진짜 도곽은 `N3L_H0010000`(도엽명 · 도엽코드 칸 · 3 장 모두 계산 도곽과 0.1 m 안에서 같음). 그래서 index `bounds_wgs84` = 도로 면 범위임(073 은 도곽의 77 % · 084 는 40 %). 도로 없는 도엽은 받기에서 실패하는 길이 있음(`SheetStore.py:325-327`). 보유 37 장은 모두 A001 이 있고, 그 가운데 4 장(36716007~010)에는 H001 이 없음.
|
||||
|
||||
## 5. 정리
|
||||
|
||||
### 5-1. 「해상도 문제」
|
||||
|
||||
- 수치로는 없음 — 1 · 2 장.
|
||||
- 화면에서 gpkg 등고선만 단순화돼 거칠게 보임 → 해상도 문제로 오해할 수 있음(4 장 화면 전송 줄).
|
||||
|
||||
### 5-2. 도엽 zip 을 쓰게 된 흐름 (기록)
|
||||
|
||||
| 시점 | 기록 | 근거 |
|
||||
| --- | --- | --- |
|
||||
| 07-26 | 등고선 = 전국 gpkg · 그 밖 겹 = 도엽 zip(사용자 확정) · 국가 자료는 참고용 · 설계 계산은 LAS 만 | `docs/raw/plans/2026-07-26_plan_도엽_오버레이.md:21-23` |
|
||||
| 07-28 | 배수유역 배경 = 도엽 등고선 · 하천중심선 · 표고점 세 겹 | `docs/raw/plans/2026-07-28_plan_B04_B05_Drainage_Watershed.md:23` |
|
||||
| 08-01 | 분석용 원본 = `도엽_등고선.geojson` 유지 · 화면 공유 | `docs/raw/plans/2026-08-01_plan_S8_B05_data_saving.md:39` |
|
||||
| 08-30 | LAS 없는 지형면 = 배수유역 엔진 재사용 → 도엽 등고선을 그대로 이음 · 까닭 기록 없음 | commit `3572694f7` · `SheetSurface.py:55` |
|
||||
| 10-2x | 분석 477: 「도엽 zip 그대로」 권함 · 까닭 = 데스크탑 · 배포 서버에 gpkg 가 있는지 모름 | `docs/raw/요구_1025/_분석_477_수치지형도_화면맞춤.md:225` |
|
||||
| 지금 | D 예정노선 DEM 도 같은 함수 · 같은 도엽 등고선 | `D03_PlanAnalysis_Terrain.py:315` |
|
||||
|
||||
까닭 후보:
|
||||
|
||||
1. **다른 겹과 한 벌** — 하천 · 표고점 · 도로 · 건물과 같은 도엽 · 같은 범위 · 같은 판이라, 079 같은 국소 수정이 있어도 등고선과 하천이 서로 어긋나지 않음.
|
||||
2. **배포 자리** — gpkg 는 git 밖(`.gitignore:44`)의 23.2 GB 파일이라 서버마다 손으로 둬야 함. 도엽 zip 은 자동 받기가 이미 돎(`ensure_sheets`).
|
||||
3. **최신성** — 도엽 zip 은 받는 날의 브이월드 판이고, gpkg 는 07-26 에 만든 한 벌(연 1 회 손 갱신)임.
|
||||
4. 해상도 — 까닭이 아님(같은 자료).
|
||||
|
||||
### 5-3. 전국 gpkg 로 도엽별 DEM 을 만들 때 걸림
|
||||
|
||||
| # | 걸림 | 크기 |
|
||||
| --- | --- | --- |
|
||||
| 1 | 서버마다 23.2 GB · 연 1 회 손 갱신(`build_contour_gpkg.py`) · 데스크탑 · 배포 서버에 있는지 확인 못 함 | 운영 |
|
||||
| 2 | 도엽 zip 받기는 그대로 남음 — 하천 · 도로 · 건물 · 표고점 · 지명은 gpkg 에 없음 | 받기 줄지 않음 |
|
||||
| 3 | 서해 5 도(백령 · 대청 · 소청 · 연평) 없음 → 도엽 zip 폴백 필요 | 갈래 하나 |
|
||||
| 4 | 판 섞임 — 등고선(gpkg) 과 하천 · 도로(도엽) 판이 다르면 국소 어긋남(079 최대 22 m) | 드묾 |
|
||||
| 5 | 선 방향 · 조각이 달라 지형면이 칸 단위로 바뀜(평균 2~5 cm · 최대 5 m) → 옛 저장본 열쇠가 바뀌어 한 번 다시 셈 · 노선 계산값이 조금 움직임 | 한 번 |
|
||||
| 6 | 긴 선이 통째로 읽힘(073: 527만 꼭짓점 → 도엽 안 18만) → 자르기 필수(이미 함 · `GisVector.py:118`) · 읽기 0.04~0.35 s | 걸림 아님 |
|
||||
| 이점 | 이웃 여유(250 m)를 이웃 zip 받기 없이 한 번 읽기로 채움 · 변환 오차 < 1 mm · 높이 칸 `CTRLN_HG` 는 굽기 코드가 이미 읽음(`Watershed_Grid.py:48`) | — |
|
||||
@@ -0,0 +1,202 @@
|
||||
# 분석 478 · 479 — 도엽 병합 까닭 · 도엽별 DEM · 전국 도엽 창고 · 갱신 확인 · 전국 크기 (요구 478 · 479)
|
||||
|
||||
읽기 전용 · 줄 = main_laptop_1 `aa0e7e1b4` · 코드 · DB · storage 안 고침 · 서버 POST 없음 · 외부 받기 없음.
|
||||
실측 = 검증_랩탑메인(B `dad81824` 9 장 병합 등고선) · 가이드_예정노선(`87d47800`) · 가이드_예정노선_용화(`6067750f`) — 메모리 안에서만 셈(파일 안 씀) · 전국 등고선 gpkg 읽기만(sqlite `mode=ro`) · storage 는 파일 이름 · 크기 · 시각만.
|
||||
겹친 앞 분석 = `_분석_477_수치지형도_화면맞춤.md`(도엽 조각 · 화면 맞춤 · D DEM 조각 · 창고 안) — 여기선 그 위에 「전국 · 갱신 · B」만 더함.
|
||||
|
||||
## 0. 결론
|
||||
|
||||
1. **병합 = 「사업 상자 통째 DEM」의 입력 한 파일**일 뿐 — 등고선을 상자 전체로 한 번에 보간하려고 합침. **도엽별 DEM + 이웃 여유면 병합 없이 됨**(사용자 말 맞음). 병합 자체는 작음(9 장 9.2 s) · 느린 몫은 통째 DEM(54~384 s).
|
||||
2. **도엽별 DEM 실측 — 여유 50 m 부터 경계 차 0**(가장자리 20 m 띠 0.5 m 넘는 칸: 여유 0 = 6.5 % → 50 m = 0 %). 보간(거리 + 라플라스)은 여유 200 m 에서 **통째와 칸마다 똑같음(차 0.00 m)**.
|
||||
3. **남는 차(칸 0.01~0.05 % · 최대 9.00 m)는 경계 탓 아님 — 지금 코드의 봉우리 · 웅덩이 메움이 「같은 높이 선 전체 평균」으로 방향을 정함**(`SheetSurface.py:311-316`). 9.00 m = 2 × 4.5 m = 봉우리가 웅덩이로 뒤집힌 값 · 지금도 D 범위가 늘 때마다 같은 봉우리가 뒤집힐 수 있음. 메움을 그 고리 둘레로만 고치면(판 올림) 조각 = 통째.
|
||||
4. **전국 = 등고선 있는 도엽 약 1.75 만 장**(gpkg 색인 셈 17,457~17,903 · 제주 · 울릉 · 독도 포함) · zip 약 20 GB · DEM 2 m 약 75 GB · 1 m 약 300 GB.
|
||||
5. **「전국을 미리 받으면 DEM 이 빨라짐」은 반만 맞음** — 받기는 지금도 작은 몫(장당 0.5~1.4 s). 빨라지는 건 **도엽 DEM 을 한 번 셈 + 영구 저장해 다시 씀** 덕. 그리고 **등고선은 이미 전국 gpkg(23 GB)로 노트북에 있고 도엽 등고선과 같음**(2 장 실측) → DEM 은 받기 없이 됨.
|
||||
6. **권함 = 「처음 쓸 때 도엽마다 한 번 셈 + 영구 저장」(지연 채움)** · 전국 미리 셈은 비권함(2 m 단일 약 280 h · 판 올림 · 격자 바꿈(5 m 안 남음)마다 전국 다시).
|
||||
7. **갱신 확인 됨** — 같은 도엽을 13 일 사이 두 번 받은 zip 6 장 해시 모두 같음(받을 때마다 바이트 같음) → 해시로 「같음 · 다름」 판정 가능. 검색 API 에 크기 · 갱신일 칸 있음(코드 주석) · 지금 색인은 안 남김 → 칸 더하면 받기 없이 먼저 거름.
|
||||
8. **이용 조건 확인 못 함** — 지금 받기 길 = 지도서비스 안쪽 주소 + 로그인(공식 API 아님). 1 만 장 일괄 받기 한도 · 약관 문서 없음 → 일괄 받기 전 사용자 확인.
|
||||
9. **B 는 받기 · 창고만 함께 쓰고 DEM 은 지금대로 권함** — B DEM 은 1 m · 노선 상자(0.4~2 km²)라 지금 7.5~35 s · 1 m 도엽 조각은 장당 175 s(실측 · 725만 칸)라 처음엔 더 느림 · B05 · B06 · 3D 는 저장본만 읽어 속도 이득 0.
|
||||
|
||||
---
|
||||
|
||||
## 1. 병합하는 까닭(코드 근거)
|
||||
|
||||
| 까닭 | 근거 | 도엽별 DEM 이면 |
|
||||
| --- | --- | --- |
|
||||
| DEM 한 판 = **사업 상자 통째**(B = 노선 상자 + 300 m · D = 받은 범위) → 입력 등고선 한 파일이 필요 | `SheetSurface.py:55`(`도엽_등고선.geojson` 한 파일) · `:522-530`(상자 = 노선 ± 여유) · D `Terrain.py:307-323` | 도엽 + 여유 안 등고선만 읽음 → 병합 불필요 |
|
||||
| 보간 이음 — 거리 보간 = 「가장 가까운 다른 높이 두 선」 · 라플라스 400 회 | `SheetMethods.py:55-96 · 99-132` | 도곽 끝에서 이웃 선이 없으면 값이 바뀜 → **여유 50 m 이상**(2 장) |
|
||||
| 도곽 걸친 지물 = 두 도엽에 중복 수록 → UFID 로 거름 | `SheetParser.py:89 · 128-132` | 화면에서 UFID 로 거름(477 2-1) |
|
||||
| 화면 · 배수유역 · D 겹이 **겹마다 파일 하나**를 읽음 | `Router_GIS.py:31` · `Router_Watershed.py:64-65` · `D03 Layers.py:84-95` | 겹 = 도엽별 파일 여럿(477 2-1) |
|
||||
| 처음 B 설계 = 노선 끝 3×3 9 장 → 「하나의 오버레이」 · 프로젝트 한 벌 | `docs/raw/plans/2026-07-26_plan_도엽_오버레이.md` 처리 순서 · `MapSheet.py:109-123` | — |
|
||||
| 비용 | 병합 9 장 9.2 s · 9.3 s(`tmp/server.log`) · 통째 DEM 2 m 54.5 s(153만 칸) → 383.7 s(533만 칸)(`_분석_463-C` 18-2) | 느린 몫 = DEM |
|
||||
|
||||
- 판 — 병합 자체가 무의미하진 않음(통째 보간의 전제). 다만 **통째 보간을 도엽별 + 여유로 바꾸면 병합은 DEM 에서 빠짐** · 화면 겹은 도엽 파일 여러 개로 대신(477 단계 1).
|
||||
|
||||
## 2. 도엽별 DEM 경계 처리(실측)
|
||||
|
||||
방법 = 참값 = 9 장 병합 등고선으로 도엽 `36901074` + 600 m 를 통째 셈(342만 칸 · 117.8 s) → 074 도곽 상자 안쪽만. 조각 = 074 + 여유 M 상자 안 등고선만으로 같은 셈 → 같은 칸 차. 격자 2 m · 라플라스 · 좌표 2 m 배수에 맞춤(칸 대 칸).
|
||||
|
||||
| 여유 M | 칸 | 시간 | 0.5 m 넘는 칸(도엽 안 전체) | 최대 | 가장자리 0~20 m 띠(최대 · 0.5 m 넘는 %) | 20~50 m 띠 최대 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| 0 | 155만 | 38.7 s | 0.26 % | 9.00 m | **5.00 m · 6.49 %** | 0.67 m |
|
||||
| 50 m | 168만 | 47.7 s | 0.04 % | 9.00 m | 0.02 m · 0 % | 0.18 m |
|
||||
| 100 m | 181만 | 58.1 s | 0.04 % | 9.00 m | 0.00 m · 0 % | 0.17 m |
|
||||
| 200 m | 209만 | 56.5 s | 0.03 % | 9.00 m | 0.00 m · 0 % | 0.14 m |
|
||||
| 400 m | 272만 | 82.5 s | 0.01 % | 9.00 m | 0.00 m · 0 % | 0.06 m |
|
||||
|
||||
남는 차 진단(여유 200 m 다시 셈):
|
||||
|
||||
| 단계 | 조각 대 참값 |
|
||||
| --- | --- |
|
||||
| ① 굽기 + 거리 보간 + 라플라스(메움 앞) | **최대 0.00 m · 0.5 m 넘는 칸 0** |
|
||||
| ② 폐합 등고선 안쪽 메움 뒤 | 0.5 m 넘는 칸 518 개 — **100 % 메움 자리**(봉우리 · 웅덩이) |
|
||||
| ③ 그 518 칸의 고리 | **518 칸 모두 참값 · 조각 둘 다 「닫힌 고리」로 메움**(한쪽만 닫힘 0 칸) · 8.5 m 넘는 칸 46 개 |
|
||||
|
||||
- 까닭 = 메움이 봉우리인지 웅덩이인지를 **그 고리 둘레가 아니라 같은 높이 선 전체 둘레 평균**으로 정함 — `ring = binary_dilation(binary_fill_holes(mask) | mask) & ~component & ~mask`(`SheetSurface.py:311`) · `mask` = 그 높이의 **모든** 선 · 기울기 띠도 같은 꼴(`:319-327`). 범위가 바뀌면 평균이 바뀌어 방향이 뒤집힘 → 최대 차 = 2 × (간격 5 − 0.5) = **9.00 m**.
|
||||
- 지금도 같은 흠 — D 받은 범위가 늘면 같은 봉우리 높이가 ± 4.5 m 바뀔 수 있음(통째 셈끼리도). 477 4-3 의 「링 안 닫힘」 풀이와 다름 — 두 셈 모두 같은 고리를 닫힌 것으로 보고도 값이 갈림(③) · 닫힘 차이만이면 최대 4.5 m 를 못 넘음.
|
||||
- 고칠 길 = 고리 둘레 · 기울기 띠를 그 칸 묶음(`component`) 둘레로만 → 조각 = 통째 · 방향도 바름(어림 · 미실측) · `SHEET_SURFACE_ALGO` 1 → 2(`SheetSurface.py:61`) = 저장된 DEM 모두 한 번 다시 셈.
|
||||
- 여유 권함 = **100 m**(경계 띠 차 0 · 시간 +50 %) · 477 은 250 m 권함(두 장 이음 시험 · 메움 흠 탓으로 큰 값) — 메움을 고치면 100 m 로 충분.
|
||||
- 저장 = 도엽 도곽 안쪽 칸만(이웃 조각과 안 겹침) · 이어 붙임 = 같은 격자면 배열 복사(477 4-1).
|
||||
|
||||
## 3. 전국 도엽 창고 설계
|
||||
|
||||
| 칸 | 권함 | 까닭 · 근거 |
|
||||
| --- | --- | --- |
|
||||
| 자리 | **`storage/_shared/sheets/`(477 안)** — 지연 채움일 때 · 전국 미리 받기 · 셈이면 storage 밖 PC 별 폴더(설정 값) | storage = 워크트리끼리 정션 하나 · Synology 로 데스크탑과 동기화(쓰는 만큼이면 수십 MB/사업 → 번져도 됨 · 데스크탑은 셈 안 해도 됨) · 전국 수십~백 GB 를 Synology 로 번지게 하면 안 됨 |
|
||||
| 도엽 번호 | 8 자리(`MapSheet.py:24-68`) · 폴더 = `<앞 5 자리 1:5만>/<8 자리>/` | 1.75 만 폴더를 한 층에 안 둠 · 1:5만 칸 = 판 묶음 단위(4-1 zip 날짜) |
|
||||
| 원자료 | `<도엽>/<도엽>.zip` + 그 도엽 색인 json(477 — 색인 한 파일을 서버 여럿이 고치는 다툼 없음) | 지금 프로젝트 `map_sheets/` 212 개 265 MB = 서로 다른 37 장 48.5 MB(82 % 겹침) |
|
||||
| 색인 칸 | 지금 칸(`file` · `original_name` · `crs` · `bounds_wgs84` · `acquired` · `source` · `SheetStore.py:303-310`) + **`sha256` · `file_size` · `last_upt_dat` · `ds_sq` · `file_no` · `checked`** | 갱신 확인용(4장) |
|
||||
| 파싱 결과 | **미리 안 함** · 쓸 때 zip 에서 바로(장당 0.8~1.2 s · 477 2-5) · 쓴 도엽 겹만 `layers/` 에 둠 | 전국 GeoJSON = 장당 5.3~8.4 MB(표본 3 프로젝트) → 90~150 GB |
|
||||
| DEM | `<도엽>/dem_<epsg>_<격자>m_laplace.npz` + `.key.json` · 도곽 안쪽 칸만 · 라플라스 하나만(나머지 다섯 방식은 프로젝트에서 지금대로) | 좌표계마다 따로(같은 지역 프로젝트는 거의 같은 TM 띠 → 다시 투영 코드 없음) |
|
||||
| DEM 열쇠 | 등고선 지문(zip sha256 + 쓴 이웃 sha256 · 또는 gpkg 자른 선 해시) · 여유 · 격자 · 판(`SHEET_SURFACE_ALGO`) | **수정시각 쓰지 않음**(지금 `file_stamp` = mtime:크기 · `common_util_derived_store.py:27-33` · Synology · 복사가 시각을 바꿈) |
|
||||
| 프로젝트 | 창고는 읽기만 · 받기 · 셈은 창고 함수가 · 프로젝트엔 이어 붙인 npz · 겹 파일만(지금 이름 · 자리 그대로 → 뒤 소비자 그대로) | `common_util_surface_sampler.py:40 · 170` · `surface_confirmation.py:20` |
|
||||
| 동시 쓰기 | 도엽 폴더 `.lock` + 원자 쓰기(`atomic_npz` · `common_util_atomic.py:34`) | 서버 8000~8010 이 storage 하나 공유 |
|
||||
| DB | 창고 목록을 DB 에 두지 않음 · 파일 색인만 | MariaDB 하나를 모든 환경이 씀 · 파일은 PC 마다 다를 수 있음 |
|
||||
| ⛔ 정리 | **B `prune_sheets` 를 창고에 부르면 다른 프로젝트 도엽을 지움** → 창고 전환 때 B 에서 뺌 | `Engine.py:527` · `SheetStore.py:233-263`(목록 밖 zip 삭제) |
|
||||
|
||||
## 4. 갱신 확인
|
||||
|
||||
### 4-1. 지금 알 수 있는 것
|
||||
|
||||
| 칸 | 실측 · 근거 |
|
||||
| --- | --- |
|
||||
| 검색 API 응답 칸 | `ds_sq` · `file_no` · `file_nm` · `file_extsn` · `file_size` · `dtm_id` · `scale_nm` · `open_isscntm`(좌표계) · **`last_upt_dat`** (`SheetStore.py:110-128` 주석) · 무로그인 · 94 ms(`_분석_463-C` 18-1) · 실제 값 · 판이 바뀔 때 이 칸이 바뀌는지 = **확인 못 함**(저장된 응답 없음 · 외부 호출 안 함) |
|
||||
| 지금 색인 | 갱신일 · 크기 · 해시 **안 남김**(`SheetStore.py:303-310`) · 검색 결과 첫 행만 받음(`:154` — 판 여럿일 때 차례 확인 못 함) |
|
||||
| zip 해시 | `36901073 · 074 · 075 · 083 · 084 · 085` — 10-17 받은 것(`dad81824`) = 10-30 받은 것(`6067750f`) **sha256 6/6 같음** → 같은 판이면 바이트까지 같음 |
|
||||
| zip 안 파일 시각 = 제작 묶음 | `36901xxx` 9 장 모두 2022-12-13 · `36712xxx` 6 장 모두 2023-01-26 → 판은 1:5만 칸(100 장) 묶음으로 바뀜(어림) |
|
||||
| gpkg 속성 날짜 | `OBCHG_DT` · `RSREG_DT` · `DBREG_DT` 표본 4,000 가닥 모두 2024 → DB 등록 날짜로 보임 · 도엽별 판 구분엔 못 씀 |
|
||||
|
||||
### 4-2. 흐름(권함)
|
||||
|
||||
| 차례 | 하는 일 | 시간(어림) |
|
||||
| --- | --- | --- |
|
||||
| 1 | 대시보드 › 시스템 관리(`B01_Dashboard_UI_Nav.ts:17`) 카드 「도엽 창고」 [갱신 확인] — 「계산 자리」 카드 꼴(`B01_Dashboard_UI_CalcSites.ts`) | — |
|
||||
| 2 | 창고에 있는 도엽마다 검색 API 한 번 → `file_size` · `last_upt_dat` · `ds_sq`/`file_no` 를 색인과 비교 | 있는 것만(수백 장) 수십 초 · 1.75 만 장 = 약 30 분 |
|
||||
| 3 | 다른 것만 받기 → sha256 같으면 색인 칸만 고침 · 다르면 새 판 넣고 옛 판 `_old/` | 장당 0.5~1.4 s |
|
||||
| 4 | 바뀐 도엽 + **이웃 8 장** DEM 열쇠 무효(여유가 이웃 선을 씀) · 그 도엽 겹 파일 무효 | 다음에 쓸 때 다시 셈 |
|
||||
| 5 | 영향 프로젝트 = 프로젝트마다 `processed/sheet_merge.key.json` 도엽 목록(B `Engine.py:532-555` · D `Terrain.py:213-219`)에 바뀐 번호가 든 것 → 표로만 보여 줌 | storage 훑기 수 초 |
|
||||
| 6 | **자동 다시 셈 안 함** — 작업본은 [저장] · [확정] 때만(CLAUDE.md 5장) · D = 다음 [지형 받기] 때 새 판 · B = 확정 지표면 그대로 + 「새 판 있음」 알림 | — |
|
||||
| 갈래 | 등고선 원천 = gpkg 면: gpkg 갱신(연 1 회 수동 · 07-26 사용자 확정) 뒤 DEM 열쇠 = 자른 선 해시 → 쓸 때 0.2~0.4 s 자르기로 판별 · 바뀐 조각만 다시 | — |
|
||||
|
||||
- 사용자 말 「같은지 다른지만 확인」 = 2~3(크기 · 갱신일로 먼저 거름 · 해시로 확정). 받기 없이 판정하려면 2 의 칸이 판마다 바뀌어야 함 — 첫 구현 때 몇 장 실측으로 확인할 일.
|
||||
|
||||
## 5. 전국 크기 · 시간 어림
|
||||
|
||||
| 항목 | 장당 | 전국(약 1.75 만 장) | 근거 |
|
||||
| --- | --- | --- | --- |
|
||||
| 도엽 수 | — | **17,457~17,903 장**(등고선 있는 칸) | gpkg R-tree 188만 가닥 → 0.025° 칸(작은 가닥만 · 귀퉁이까지) · 범위 경도 125.1~131.9 · 위도 33.1~38.3 · 등고선 없는 바닷가 · 도시 칸은 빠짐 |
|
||||
| 원자료 zip | 1.0~1.3 MB(37 장 평균 1.25 · 가운데 1.12 · 0.67~2.91) | **약 20 GB**(15~30) | storage 파일 크기 · 산지 위주 표본 |
|
||||
| 푼 SHP | 3.6 MB(074) | 약 60 GB | zip 안 크기 |
|
||||
| 파싱 GeoJSON(13 겹) | 5.3~8.4 MB | 90~150 GB | 표본 3 프로젝트 `도엽_*.geojson` 합 ÷ 장 수 → 미리 안 함 |
|
||||
| DEM 2 m(도곽 안 155만 칸 · 압축 npz) | 약 4.3 MB(실측 2.6~3.0 B/칸) | **약 75 GB**(평활본 같이 두면 약 150 GB) | `models_plan/dtm_sheet_laplace.npz` 2.65 MB/100만 칸 · 4.56 MB/153만 칸 |
|
||||
| DEM 1 m(620만 칸) | 약 17 MB | **약 300 GB** | 같은 비율 |
|
||||
| 받기 | 0.45~1.4 s(검색 + 받기 + 검증 · zip 시각 차) | 차례로 2.2~6.8 h · 쉬엄 2 s/장이면 약 10 h | `6067750f` · `87d47800` · `dad81824` zip 수정 시각 간격 |
|
||||
| DEM 2 m(여유 100 m) | 48~58 s(이 노트북) | 단일 약 280 h · 8 배 병렬 약 35 h | 2장 표 · 477 2-5 |
|
||||
| DEM 1 m(여유 100 m) | **175 s**(725만 칸) | 단일 약 850 h · 8 배 병렬 약 4.4 일 | 실측 1 장(074) |
|
||||
| 노트북 | 논리 20 · 메모리 64 GB · C: 남은 358 GB | — | `nproc` · psutil · `df` |
|
||||
|
||||
판 — **처음 쓸 때 셈 + 영구 저장(권함)**:
|
||||
|
||||
| 길 | 좋은 점 | 나쁜 점 |
|
||||
| --- | --- | --- |
|
||||
| 전국 미리 셈(2 m) | 어느 사업이든 첫 진입부터 몇 초 | 35~280 h · 75 GB · **판 올림 · 격자 바꿈(463-C 5 m 안) · 메움 고침(2장)마다 전국 다시** · 임도는 산지 일부만 씀 |
|
||||
| **처음 쓸 때 도엽마다** | 쓰는 만큼(사업 하나 2 m 4~9 장 = 20~40 MB · 4~9 분 → 병렬 2~4 로 1~4 분) · 판이 바뀌어도 쓰는 것만 다시 | 새 지역 첫 진입은 그 도엽 셈 시간 |
|
||||
| 갈래 — 고른 시군만 미리 | 회사 주 사업 지역은 첫 진입도 빠름 | 관리 단추 하나 더 |
|
||||
|
||||
## 6. 이용 조건
|
||||
|
||||
| 칸 | 내용 | 근거 |
|
||||
| --- | --- | --- |
|
||||
| 지금 받기 길 | 지도서비스 안쪽 주소 `map.vworld.kr/dtkmap/digitalDownload.do` + 로그인 세션(id/pw 자동 재로그인) · 검색 `ws3dmap/getDisitalMapList.do` 무로그인 — **공식 오픈 API 아님** | `SheetStore.py:6-13 · 49-52` · 07-26 계획 「공식 API 없음 → URL 패턴」 |
|
||||
| 1 만 장 넘게 한꺼번에 | 한도 · 막힘 · 약관 조항 = **확인 못 함**(코드 · 문서에 없음) · 계정 막힘 위험은 남음 | — |
|
||||
| 브이월드 약관 | 「영리 목적 동의 필요」(브이월드 전부) | `docs/raw/plans/2026-10-29_plan_581.md:15` |
|
||||
| 도엽 이용허락 | 공공누리 1 유형(원문 확인 못 함) | `_분석_445-B_지도성능_타일.md:82` |
|
||||
| 다른 길 — 국가기본도 등고선 | `TN_CTRLN` 전국 → **이미 gpkg**(`resources/data_global_contours/national_contours.gpkg` · git 밖 · 23.2 GB · 188만 가닥 · EPSG:5179 · 만든 날 2026-07-26 · 사용자 확정 = 연 1 회 수동 갱신) · 받은 곳 · 신청 절차 기록 없음 | `build_contour_gpkg.py:1` · `.gitignore:43-44` · 07-26 계획 아키텍처 1 |
|
||||
| gpkg = 도엽 등고선? | 074: 길이 707.49 = 707.49 km · 단 126 = 126 · 정점 거리 0 m / 099(`36712099`): 597.12 대 595.09 km(0.3 %) · 단 94 = 94 · 정점 거리 최대 0.001 m | 실측 · 477 3 |
|
||||
| 국토정보플랫폼 일괄 신청 | 확인 못 함 · `.env` 에 국토정보플랫폼 키 칸 있음(값 안 적음) · NGII 검색 API = 권한 없음(1002) | 07-26 계획 표 |
|
||||
| 하천 · 도로 · 건물 · 지명 겹 | gpkg 에 없음 → 도엽 zip 필요 | 477 0-3 |
|
||||
|
||||
- 권함 — 일괄 받기 전 사용자가 브이월드에 조건 확인 · 그 전까지는 쓰는 도엽만(지연) · 미리 채우기는 쉬엄(장당 ≥ 2 s).
|
||||
- 곁 메모(요구 481 · 482 · 이 분석 뒤 기록) — 개발 초기 「30 GB 자료」 = 이 전국 등고선 gpkg(23.2 GB · `TN_CTRLN*.shp` 묶음을 합침 · `convert_to_gpkg.py:27` · git 밖 `.gitignore:43-44`)로 보임(어림) · 지금 받는 축척 = 1:5,000(`search_sheet_files(scale=5000)` · `SheetStore.py:110` · 1:1,000 · 1:2,500 은 코드에 없음).
|
||||
|
||||
## 7. B 임도 설계 영향
|
||||
|
||||
| B 단계 | 지금 | 창고를 같이 쓰면 | 값 바뀜 | 속도 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 도엽 받기 | 프로젝트마다 노선 끝 3×3(9~12 장) · 없는 것만 · 목록 밖 지움(`Engine.py:497-527`) | 창고에서 읽음 · **`prune_sheets` 뺌**(창고 지움 막음) | 없음(같은 zip · 해시 같음) | 9 장 5.6 s → 0 s(창고에 있을 때) |
|
||||
| 병합 | 9 장 13 겹 → `processed/도엽_*.geojson`(`Engine.py:529-555`) | 그대로(입력 자리만 창고) | 없음 | 9.2 s 그대로 |
|
||||
| 도엽 DEM 1 m | 노선 상자 + 300 m 통째 · 실측 7.5~35 s(767×840 ~ 1030×1836 칸 · `tmp/server.log`) | **지금대로 권함** · 조각으로 바꾸면 1 m 장당 175 s × 상자에 닿는 1~4 장(3~12 분) | 조각으로 바꾸면 메움 자리 · 격자 원점(2 m 배수 맞춤) 만큼 | 처음엔 느려짐 · 같은 자리 두 번째부터만 이득 |
|
||||
| B05 · B06 · 3D | 저장된 `dtm_sheet_laplace(_smooth).npz` · `_grid.bin` · glb 읽기만(`common_util_surface_sampler.py:40 · 170`) | 그대로 | 없음 | 이득 0 |
|
||||
|
||||
- 감싸는 길 — B04 `SheetStore` 에 「창고 자리」 하나만 넣고 `get_project_map_sheets_dir`(`SheetStore.py:58-64`) 가 창고를 돌려주게 → 부르는 곳 넷(B `Engine.py:517` · D `Terrain.py:165 · 295` · `Layers.py:95`)이 같이 옮겨감 · 프로젝트 `map_sheets/` 는 옛 것 읽기 폴백 · B DEM 함수(`build_sheet_surface_model` · `SheetSurface.py:490`)는 안 건드림(690 줄 · 상한 700).
|
||||
- 색인을 도엽 폴더마다로 바꾸면(서버 여럿 다툼 막음) 색인 읽는 곳도 같이 — `SheetStore.py:209-230` · `SheetParser.py:96 · 109-110` · 시험 `test_530_1_plan_terrain.py:62`.
|
||||
- 메움 고침(2장)은 B · D 같이 바뀜 → B 는 열쇠 판이 바뀌어도 **전처리 · 관리자 요청 때만 다시 셈**(`SheetSurface.py:510-521`) → 옛 확정 지반고는 그 전까지 그대로 · 다시 돌리면 봉우리 자리 높이가 바뀔 수 있음.
|
||||
|
||||
## 8. 단계 · 파일 경계 · 위험 · 결정 거리
|
||||
|
||||
### 8-1. 단계
|
||||
|
||||
| 단계 | 내용 | 크기 |
|
||||
| --- | --- | --- |
|
||||
| 1 | 창고(도엽 폴더 · 색인 칸 더함 · 해시) + B · D 받기를 창고로 · B `prune` 뺌 · 옛 프로젝트 zip 한 번 모음(같은 번호 해시 대조) | 작음~중간 |
|
||||
| 2 | D DEM 조각(여유 100 m · 도곽 안쪽 저장 · 이어 붙임) = 477 단계 2 | 큼 |
|
||||
| 2-1 | 메움 고리를 칸 묶음 둘레로(판 1 → 2) — 2 와 같이 | 작음 |
|
||||
| 3 | [갱신 확인] 카드 + 영향 프로젝트 표 | 중간 |
|
||||
| 4(선택) | 고른 시군 미리 채우기 · B DEM 조각 | 사용자 결정 뒤 |
|
||||
|
||||
### 8-2. 파일 경계(창 셋)
|
||||
|
||||
| 창 | 파일(이 창만) |
|
||||
| --- | --- |
|
||||
| A 창고 · 갱신 엔진 | `B04_PreProcess_Engine_SheetStore.py`(357 줄 · 자리 · 색인 칸 · 해시) · `B04_PreProcess_Engine.py:497-560`(prune 뺌) · 새 `B04_PreProcess_Engine_SheetLibrary.py`(갱신 확인 · 영향 프로젝트) · `config/config_system.py:115-116` 곁 자리 값 · 시험 새 |
|
||||
| B D DEM 조각 | 477 7-2 창 A 그대로(새 `D03_PlanAnalysis_Sheets.py` · `Terrain.py` · `Layers.py` · `ZeroOrder.py` · `Router.py`) + `SheetSurface.py:279-338` 메움 고리(B04 공용 · B 시험 `test_sheet_surface.py` 같이) |
|
||||
| C 관리 화면 | 새 `B01_Dashboard_UI_SheetLibrary.ts` · `B01_Dashboard_UI_Nav.ts`(메뉴 한 줄) · 새 `B01_Dashboard_Router_SheetLibrary.py` 길 둘(확인 · 받기 · `B01_Dashboard_Router.py` 617 줄이라 따로) · 권한 = 시스템 관리자(`calc_sites` 길 꼴 · `Router.py:585-591`) |
|
||||
|
||||
- A ↔ B 겹침 = 창고 함수 이름 · 색인 꼴 → A 가 먼저 PLAN 에 적고 B 가 그 이름으로.
|
||||
|
||||
### 8-3. 위험
|
||||
|
||||
| 위험 | 크기 | 막는 길 |
|
||||
| --- | --- | --- |
|
||||
| B `prune_sheets` 가 창고를 지움 | **큼** | 1 단계에서 B 에서 뺌 · 창고 함수엔 지움 없음 |
|
||||
| Synology 번짐 | 전국 미리면 수십~백 GB 데스크탑으로 · 랩탑 지움이 데스크탑에 번짐 · 같은 도엽 동시 만들기 = 충돌 사본 | 지연 채움 · 전국이면 storage 밖 |
|
||||
| 용량 | 랩탑 C: 남은 358 GB · storage 지금 54 GB | 2 m 지연 · 1 m 전국 안 함 |
|
||||
| 판 올림 · 격자 바꿈 | 미리 셌다면 전국 다시 | 지연 채움 |
|
||||
| 공유 DB | 창고 목록을 DB 에 두면 PC 파일과 어긋남 | 파일 색인만 |
|
||||
| 일괄 받기 계정 막힘 | 확인 못 함 | 사용자 조건 확인 · 쉬엄 |
|
||||
| 데스크탑 gpkg | 데스크탑(임시 배포)에 있는지 확인 못 함(git 밖 · Synology 밖 코드 폴더) | gpkg 원천은 없으면 zip 폴백 |
|
||||
| 메움 고침 = 값 바뀜 | 봉우리 · 웅덩이 칸(0.01~0.05 %) ± 4.5 m | 판 올림 · B 는 다시 돌릴 때만 |
|
||||
| 검색 결과 판 여럿 | 첫 행만 받음 · 차례 모름 | 1 단계에서 몇 장 실측 |
|
||||
|
||||
### 8-4. 사용자 결정 거리
|
||||
|
||||
| 거리 | 갈래 | 권함 |
|
||||
| --- | --- | --- |
|
||||
| 도엽 원본 자리 | 프로젝트(07-26 결정 「도엽 원본 = 프로젝트 영구저장소 · resources 금지」) → 공용 창고 | **공용 창고**(옛 결정 바꿈 · 확인 필요) |
|
||||
| 받기 범위 | 전국 일괄 / 쓰는 도엽만 / 고른 시군 미리 | **쓰는 도엽만** + 갈래로 시군 미리 |
|
||||
| DEM 셈 | 전국 미리 / 처음 쓸 때 + 영구 | **처음 쓸 때 + 영구** |
|
||||
| DEM 등고선 원천 | 도엽 zip(지금 · 이웃 zip 도 받아야 여유 채움) / 전국 gpkg(받기 0 · 같은 선 실측 · 연 1 회 갱신) | **gpkg**(이웃 받기 없음) · 없으면 zip 폴백 |
|
||||
| 창고 자리 | `storage/_shared`(Synology 번짐 · 데스크탑 이득) / storage 밖 PC 별 | 지연이면 **`storage/_shared`** |
|
||||
| 메움 고침 | 지금대로 / 고리 둘레로(판 올림) | **고침**(조각 = 통째 · 봉우리 뒤집힘 없앰) |
|
||||
| 여유 | 100 m / 250 m(477) | 메움 고치면 **100 m** · 안 고치면 250 m |
|
||||
| B DEM | 지금대로 / 조각 | **지금대로**(받기 · 창고만 함께) |
|
||||
| 갱신 뒤 다시 셈 | 자동 / 알림만 | **알림만**(작업본은 [저장] · [확정] 때) |
|
||||
@@ -0,0 +1,217 @@
|
||||
# 분석 486 — 오래 걸리는 지형 분석 미리 해 두기 대상 (요구 486)
|
||||
|
||||
읽기 전용 · 줄 = main_laptop_1 `7244050a0` · 코드 · DB · storage 안 고침 · 서버 POST 없음.
|
||||
실측 = `tmp/server.log`(랩탑 메인 · 160만 줄 · 시각 없음 · [계측] 줄) · 메모리 안 셈(파일 안 씀) — B `dad81824` 등고선(도엽 `36901074` · EPSG 5187) · D `87d47800` DEM(939×1627 · 2 m) · 전국 gpkg 읽기만(sqlite `mode=ro`).
|
||||
앞 분석 = `tmp/brain_475/_분석_478_전국도엽_도엽별DEM.md`(도엽별 DEM · 여유 · 전국 크기) · `docs/raw/요구_1025/_분석_463-C_자료_성능_임도망.md` 18 — 겹치는 수치는 그쪽 인용.
|
||||
|
||||
## 0. 결론
|
||||
|
||||
1. **지형만으로 정해지고 오래 걸리는 것 = 넷** — D 지형면(DEM 2 m · 18.6~383.7 s) · D 0차곡(흐름누적 · 장당 12.6 s) · B 배수 하강 방향장(1 m · 4.8~10.9 s · 장당 20.3 s) · E07 집수면적(시간 작음 · 상류 잘림이 흠). 나머지 긴 계산(E04 3D 25~70 분 · E03 45 s~3 분 · B04 LAS 239 s · B05 추천 최대 115 s · B03 체인 · B06 · E05)은 **설계 · 사용자 LAS 가 들어가 미리 못 함**.
|
||||
2. **급경사 · 음영은 미리 둘 것 없음** — DEM 에서 0.08~0.44 s · DEM 만 공용이면 됨.
|
||||
3. **큰 강 유역 계층 필요 없음(실측)** — 도엽 + 여유로 셈 = 통째 셈: 하강 방향장 **여유 100 m 에서 차 0** · 0차곡(≤ 1 ha) **여유 200 m 에서 차 0** · E07 a(포화 근처 3,000 m 로 자름) 여유 400 m 에서 0.1 %. 이 프로그램은 「끝없는 흐름누적」을 쓰는 곳이 없음(배수 = 방향 + 도로 도달 추적 · 0차곡 = 1 ha 까지 · SINMAP = 포화에서 멈춤).
|
||||
4. **권함 = 도엽(1:5,000) 단위 · 처음 쓸 때 셈 + 공용 영구 저장(지연 채움)** · 전국 미리 셈 비권함(D 묶음 350 h 단일 · 판 올림마다 다시) · 갈래로 고른 시군만 밤에 미리.
|
||||
5. **1 단계 = D 도엽별 DEM + 0차곡 누적(급경사 · 음영은 그 DEM 에서 바로)** → 2 단계 B 하강 방향장 도엽별 공용 → 3 단계 E07 집수면적을 도엽 DEM(여유 400 m)에서 → 나중 등고선 표시 전국 조각.
|
||||
6. 지금도 같은 지형 결과를 프로젝트마다 다시 셈 · 다시 둠 — 같은 방향장 28 벌(1.2 GB) · 같은 D DEM 14 벌 · 같은 E07 결과 10 벌.
|
||||
|
||||
---
|
||||
|
||||
## 1. 오래 걸리는 계산 전수 목록(> 약 1 s)
|
||||
|
||||
시간 = 서버 로그 실측(가운데 · 최대) · 「문서」= 계획서 · 분석 인용 · 「잼」= 이번 메모리 안 실측.
|
||||
|
||||
### 1-1. B 임도 설계
|
||||
|
||||
| # | 계산 | 파일:줄 | 시간 | 칸 · 범위 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| B1 | LAS 구조화 · CSF · 지표면 5종 · glb(WF1) | `B04_PreProcess_Engine.py:241-321` · `B04_PreProcess_Engine_Pipeline.py:351` | WF1 239.2 s · LAS 구조화 79.3 s · 지표면 52.0 s · CSF 4.1 s(로그 1 회) | 사용자 LAS · DTM 1 m |
|
||||
| B2 | 도엽 지형면(라플라스 · 6 방식 중 기본 1) + 미리보기 glb | `B04_PreProcess_Engine_SheetSurface.py:490-574`(격자 `:530`) · 방법 `SheetMethods.py:99-132` | B 1 m 17.4~39.9 s(0.6~1.9 M 칸) · LAS 없는 WF1 은 6 방식 전부(설정 주석 891 s · `config_system_terrain.py:157-165`) | 노선 상자 + 300 m(`config_system_terrain.py:139-141`) |
|
||||
| B3 | 도엽 받기 · 병합(13 겹) | `SheetStore.py:185` · `B04_PreProcess_Engine.py:529-555` | 받기 9 매 5.6 s · 병합 9.3 s | 노선 끝 3×3 |
|
||||
| B4 | 배수 하강 방향장(등고선 굽기 → 밴드 EDT → 위치에너지 → 받는 칸) | `B04_PreProcess_Engine_Watershed_Descent.py:253-353` · 저장 `:361-445` · 호출 `Watershed_Expand.py:175-189` | 새로 짓기 4.8 s(가운데) · 10.9 s(1547×1848) · 저장본 있으면 0 s(n=208) | 1 m · 1차 영역 + 100 m + 400 m(`Expand.py:64 · 164`) · 원점 정수 m |
|
||||
| B5 | 배수 1차 영역(세류 상 · 하류 나눔 · 등고선 점 구름) | `Watershed_Analyze.py:86-107` · `Watershed_Stream.py:336` | 0.7~3.9 s(최근) · 최대 16.2 s | 노선 ± 200 m |
|
||||
| B6 | 도로 도달 판정 · 흐름 강도(큰 방향장 위 한 번) | `Watershed_Expand.py:287-353` · `Watershed_Flow.py:300` | 0.6~0.7 s(최근) · 옛 회차 방식 4.4~5.8 s × 9 회 | 큰 방향장 전체 |
|
||||
| B7 | 배수 분석 전체(B4~B6 + 도엽 읽기 · 저장) | `B04_PreProcess_Router_Watershed.py:382-426` | **최근 3~7 s** · 옛 최대 118.8 s(방향장 회차마다 다시 짓던 때 · 520-6 앞) | — |
|
||||
| B8 | 도엽 재투영(등고선 → 프로젝트 좌표) | `Router_Watershed.py:144-180`(`00_sheet_metric.pkl`) | 7.4 s · 피클 있으면 0.3 s | 병합 도엽 전체 |
|
||||
| B9 | B05 추천 미리 셈(비용면 · 탐색 격자 · Dijkstra · 균형 종단) | `B05_Profile_Engine_Solver.py:178-211` · `RouteInitial_Search.py:102-135` · `Router_RouteInitial.py:264-319` | 가운데 1.6 s · 상위 10 % 15.7 s · 최대 115.1 s(n=502) · 초기 노선 한 갈래 최대 87.5 s | 2 m 비용면 · 4 m 탐색 · **LAS DTM 기준**(`cost_surface_classification_*` 24 벌) |
|
||||
| B10 | B03 재확정 체인 · 노선 [확인] | `B03_FileInput_Service_Chain.py:497-670` | 최근 10.1~18.3 s · 옛 최대 167.2 s(배수 탓) | 설계 |
|
||||
| B11 | B06 서버 재계산 · 3D 길 모형 | `B06_Section_Server_Calc_Prebuild.py:392-565` · `B05_Profile_Corridor_Prebuild.py:47-80` | B06 확정 4.0 s(가운데) · 최대 37.7 s · 3D 길 2.6~3.3 s | 설계 |
|
||||
| B12 | 3D 모달 5 m 등고선(온디맨드) | `B04_PreProcess_Router_Contour.py:52-182` | 3.9 · 7.9 · 18.7 s | DEM 전체 |
|
||||
| B13 | B07 평면도 지형 첫 열기 | `B07_DesignDetail_Router_Support_Fingerprint.py:306-327` | 1.3~4.4 s → 저장본 0.2~0.4 s(문서 `plan_335-518.md:1405`) | 지형 + 노선 |
|
||||
| B14 | 바탕 지도 받기(white · 위성 · 하이브리드) | `B04_PreProcess_Engine.py` | 6.5 · 8.1 · 12.8 s | 노선 상자 |
|
||||
|
||||
### 1-2. D 예정노선
|
||||
|
||||
| # | 계산 | 파일:줄 | 시간 | 칸 · 범위 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| D1 | **지형면 DEM(라플라스)** + glb 2 · 평활 npz | `D03_PlanAnalysis_Terrain.py:315-323` → `SheetSurface.py:490-574` | 18.6 · 27.6 · 54.5 · 117.9 · 277.0 · **383.7 s**(0.77~5.33 M 칸) · 2×2 km 받기 전체 49.2 s 중 33 s(문서 `plan_594-603.md:22`) | 2 m(`config_system_terrain.py:143`) · 받은 범위 통째(줄지 않음) · 범위 1 m 만 늘어도 통째 다시 |
|
||||
| D2 | 도엽 받기 · 병합 | `Terrain.py:209-220 · 298-302` | 받기 4 s · 병합 약 11 s(2×2 km) | 범위 도엽 |
|
||||
| D3 | **0차곡**(웅덩이 메움 · D8 · 파이썬 위상 누적 · 세선화) | `D03_PlanAnalysis_ZeroOrder.py:47-95 · 127-183` | 3.0~4.05 s(2.1 km² · 문서) · **잼 12.6 s(1.53 M 칸 = 도엽 한 장 크기)** · 저장본 0.19 s | 2 m · 받은 범위 · 0.1~1 ha |
|
||||
| D4 | 급경사 | `D03_PlanAnalysis_Layers.py:215-281` → E07 `slope_rad` | 0.41 s(2.1 km²) · 잼 0.08 s(1.53 M 칸) | 4,096 px 상한 |
|
||||
| D5 | 음영 | `Layers.py:240-252` → `B07_DesignDetail_Engine_Cad_Lidar.py:59-103` | 0.44 s | 1,600 px 상한 · 솎음 간격이 범위 따라 바뀜(`:74`) |
|
||||
| D6 | 지적도 WFS · 보호구역 · 산림입지 | `Layers.py:178-209 · 368-532` | 2~8 s(조각 16~32) | 범위 · 지형 아님 |
|
||||
| D7 | 등고선 표시본 사본 + 화면 준비(LOD 6 단) | `B04_PreProcess_Router_GIS.py:392-422` · `B04_PreProcess_UI_MapRender_Prepare.ts:23-52` | 사본 약 3 s(66 MB) · 화면 169만 꼭짓점 1.3 s · 힙 약 300 MB | 받은 범위 + 600 m |
|
||||
| D8 | 위성 조각 대리 | `D03_PlanAnalysis_Router.py:505-545` | 장당 43~93 ms · 프로젝트별 저장(150 MB 상한) | XYZ 조각 · 지형 아님 |
|
||||
|
||||
### 1-3. E 안정성평가
|
||||
|
||||
| # | 계산 | 파일:줄 | 시간 | 칸 · 범위 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| E1 | E04 3D 활동면 탐색 | `E04_Stab3D_Run.py:206-293` · `Engine_Search.py:382-` | 구간 하나 42~222 s · 1.14 km 22 조각 4,251 s(문서 `plan_560-567.md:57`) | 측점 상자 · 1 m |
|
||||
| E2 | E03 2D 임계 활동면 탐색 | `E03_StabSection_Engine_Search.py:402-565` | 59 측점 44.9 s · 63 측점 182.6 s · 측점 하나 10.6~65.8 s | 횡단 ± 40 m |
|
||||
| E3 | E03 보강 가정 · 확률 | `E03_StabSection_Router_WhatIf.py:196-311` · `Router_Prob.py:237-292` | 매회 탐색 1,000 회 39.6 s | 측점 하나 |
|
||||
| E4 | E05 보고서(Node · Playwright) | `E05_StabReport_Store.py:124-164` | 11.8~13 s | — |
|
||||
| E5 | E07 광역(경사 · 채움 · D∞ · 집수면적 a · SINMAP) | `E07_StabArea_Engine.py:86-174 · 283-294` · `Router.py:179-267` | 1.0~2.0 s(417×220) · **잼 a 2.5 s · 경사 0.08 s(1.53 M 칸)** | LAS DTM 복사본 → 2 m · 노선 ± 100 m |
|
||||
|
||||
## 2. 입력 갈래 — 지형만 / 설계
|
||||
|
||||
| # | 지형만 몫(미리 가능) | 설계 · 사용자 몫(미리 불가) | 판 |
|
||||
| --- | --- | --- | --- |
|
||||
| D1 DEM | 등고선 → 보간 전부 | 범위 상자만(지점 · 선 · 기준점) | **미리 가능** — 범위를 도엽으로 바꾸면 |
|
||||
| D3 0차곡 | 누적 칸 수 | 임계(0.1 · 1 ha 쿼리 인자) | **미리 가능** — 누적을 두고 임계는 쓸 때 |
|
||||
| D4 · D5 급경사 · 음영 | 전부 | 색 범위(화면) | 가능하나 **둘 필요 없음**(DEM 에서 1 s 안) |
|
||||
| B4 하강 방향장 | 전부(등고선 · 단 · 셀 · 상수 · `Descent.py:365-394` 「노선과 무관 520-6」) | 범위만(노선 따라 상자) | **미리 가능** |
|
||||
| B5 · B6 1차 영역 · 도로 도달 | 등고선 점 구름 · 재투영(B8) | 노선 · 세류 교차 | 설계 — 단 B8 재투영은 도엽별 공용 가능 |
|
||||
| B2 B 도엽 DEM 1 m | 보간 전부 | 노선 상자 · 열쇠에 노선 해시(`SheetSurface.py:447`) | 가능하나 **지금대로 권함**(478 9 · 1 m 장당 175 s → 처음엔 더 느림) |
|
||||
| B9 B05 추천 | 비용면 · 고른 지면 · 계류 EDT | 시작 · 끝 · 예상노선 · 제약 | **LAS DTM 기준 = 사업마다 다른 원자료** → 전국 공용 아님 · 프로젝트 안 캐시 몫(아래 4-4) |
|
||||
| B1 LAS | 전부 지형이나 사용자 올린 LAS | — | 전국 공용 아님 |
|
||||
| E5 E07 | β · 채운 DEM · D∞ · a | T/R · c · φ · 깊이(E02 물성) · 노선 띠 | **a 만 미리 가치**(시간 아닌 상류 잘림 고침) |
|
||||
| E1~E4 · B10 · B11 | DTM 다시 뜨기 정도(가벼움) | 설계 단면 · 물성 · 구간 | 미리 불가 |
|
||||
| D6 · D8 · B14 | — | — | 지형 아님 · 위치만 → 공용 조각 저장 갈래(작은 이득 · 5장) |
|
||||
| B12 등고선 온디맨드 | 전부 | — | 도엽 DEM 이면 원 등고선과 거의 같음 → 원 등고선 갈음 갈래(결정 거리) |
|
||||
|
||||
## 3. 미리 해 둘 때 — 단위 · 여유 · 해상도 · 크기 · 시간
|
||||
|
||||
### 3-1. 도엽 + 여유 실측(이웃 경계)
|
||||
|
||||
| 대상 | 참값 | 여유 0 | 50 m | 100 m | 200 m | 300 m | 400 m |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| B 하강 방향장(1 m · 도엽 `36901074` 안쪽 620만 칸 · 받는 칸 다름) | 여유 600 m 셈(44.8 s) | 0.683 % | — | **0 %** | 0 % | — | 0 % |
|
||||
| 같은 셈 시간 | — | 17.0 s | — | **20.3 s** | 24.8 s | — | 30.6 s |
|
||||
| D 0차곡 칸(0.1~1 ha · 가운데 1 km² · 참 6,538 칸) | 939×1627 통째 | 35.4 % 다름 | 17.5 % | 7.6 % | **0 %** | 0 % | 0 % |
|
||||
| 1 ha 로 자른 누적 면적 차 > 1 % 칸(25만 칸 중) | 〃 | 8,654 | 3,754 | 1,960 | 98 | **0** | 0 |
|
||||
| E07 a(3,000 m 로 자름) 차 > 1 % | 〃 | 10.1 % | 6.6 % | 3.7 % | 1.1 % | 0.19 % | **0.10 %** |
|
||||
| D DEM 2 m(478 2 장) | 9 장 통째 | 가장자리 20 m 띠 6.5 % | 0 % | **0 %** | 0 % | — | 0 %(남는 차 = 메움 흠) |
|
||||
|
||||
- 근거 — 방향장 = 「한 단 낮은 등고 라인까지 거리」 국소 셈(`Descent.py:174-243` · 창 32 칸 · 모자라면 4 배) · 0차곡은 1 ha 까지만 셈 · SINMAP 습윤 `W = min(R·a / (T·sinβ), 1)` = T/R 2,000~3,000 m 에서 a ≈ 2,000~3,000·sinβ m 면 포화(`E07_StabArea_Engine.py:182-198`) → 더 큰 상류는 값이 안 바뀜.
|
||||
- **큰 강 유역 계층(표준유역 · 중권역) 필요 없음** — 끝없는 누적이 필요한 곳 없음 · 표준유역 경계 자료도 저장소에 없음(검색 0 건). 도로 도달 추적(B6)은 **도엽별 방향 조각을 이어 붙인 판** 위에서 지금처럼 돎 — 가장자리에 닿으면 이웃 도엽을 더 붙임(지금 「넓혀 다시 짓기」 `Expand.py:232-234` 자리).
|
||||
|
||||
### 3-2. 단위 · 저장 · 시간(도엽 한 장 = 약 2.24 × 2.77 km = 6.2 km²)
|
||||
|
||||
| 대상 | 단위 · 해상도 | 여유(권함) | 저장 꼴 | 장당 크기 | 장당 시간 | 근거 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| D DEM | 도엽 · 2 m · 원점 2 m 눈금 · EPSG 별 | 100 m(메움 고침 시) · 250 m(안 고침) | 도곽 안 칸 npz | 약 4.3 MB | 48~58 s | 478 2 · 5 장 |
|
||||
| D 0차곡 | 도엽 · 2 m | 200 m(0 %) · 권함 300 m | 누적 칸 수(1 ha 로 자름 · uint16) | 약 1~3 MB(어림) | 12.6 s(잼 · 1.53 M 칸) | 3-1 |
|
||||
| 급경사 · 음영 | 저장 안 함 | 1 칸 | — | — | 0.08~0.44 s | 1-2 |
|
||||
| B 하강 방향장 | 도엽 · 1 m · 원점 정수 m · EPSG 별 | **100 m**(0 %) | 방향 코드 int8 + 단 번호 + 유효 비트(지금 받는 칸 int32 · 15 B/칸) | 지금 꼴 93 MB · 압축 꼴 약 8~12 MB(어림) | **20.3 s**(잼) | 3-1 · npz 실측 dtype |
|
||||
| B 재투영 등고선 | 도엽 · EPSG 별 | 100 m | 미터 좌표 선 | 수 MB | 0.2~0.4 s(gpkg 자르기 · 478) | B8 |
|
||||
| E07 a | 도엽 · 2 m | 400 m(0.1 %) · 더 정확은 「분수령까지」 | float32 · 자름 | 약 3 MB(어림) | 2.5 s(잼) | 3-1 |
|
||||
|
||||
### 3-3. 전국 크기 · 시간
|
||||
|
||||
도엽 수 = 등고선 있는 칸 **17,472 장**(잼 · gpkg R-tree 188만 가닥 · 0.025° 칸) · 높낮이차 ≥ 100 m 14,171 장 · ≥ 150 m **12,348 장**(산지 어림) · ≥ 200 m 10,503 장.
|
||||
|
||||
| 대상 | 전국 저장 | 산지(1.23 만) | 단일 | 8 병렬 | 산지 8 병렬 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| D 묶음(DEM 58 + 0차곡 13 + 여유 몫 s) ≈ 72 s/장 | 약 75 + 17~50 GB | 약 53 + 12~35 GB | 약 350 h | 약 44 h | 약 31 h |
|
||||
| B 하강 방향장 1 m(20.3 s/장) | 지금 꼴 약 1.6 TB(불가) · 압축 꼴 140~210 GB(어림) | 100~150 GB | 약 99 h | 약 12 h | 약 9 h |
|
||||
| B DEM 1 m(175 s/장) | 약 300 GB | 약 210 GB | 약 850 h | 약 106 h | 약 75 h |
|
||||
| E07 a 2 m(2.5 s + 여유) | 약 50 GB(어림) | 약 35 GB | 약 15 h | 약 2 h | — |
|
||||
| 노트북 | 논리 20 · 메모리 64 GB · C: 남은 358 GB · storage 지금 54 GB | | | | |
|
||||
|
||||
### 3-4. 처음 쓸 때 셈 대 전국 미리 셈
|
||||
|
||||
| 길 | 좋은 점 | 나쁜 점 |
|
||||
| --- | --- | --- |
|
||||
| **처음 쓸 때 도엽마다 셈 + 공용 영구(권함)** | 쓰는 만큼(D 사업 하나 4~9 장 = 20~60 MB · 첫 진입 장당 약 72 s → 병렬 2~4 로 2~5 분) · 두 번째 사업부터 같은 자리 0 s(이어 붙임) · 판 올림 때 쓰는 것만 다시 | 새 지역 첫 진입은 그 도엽 셈 시간 |
|
||||
| 전국 미리 셈 | 어느 사업이든 첫 진입 수 초 | 31~350 h · 70~250 GB · **판 올림(메움 고침 · 원점 맞춤 · 0차곡 판) · 격자 바꿈(5 m 안 · 463-C)마다 전국 다시** · 임도는 산지 일부만 씀 |
|
||||
| 갈래 — 고른 시군만 밤에 미리 | 회사 주 사업 지역 첫 진입도 빠름 | 관리 단추 하나 · 밤 작업 |
|
||||
|
||||
## 4. 공용 결과로 바꿀 때 — 걷을 코드 · 바뀔 결과 · 시험
|
||||
|
||||
### 4-1. D(1 단계)
|
||||
|
||||
| 고칠 곳 | 지금 | 바뀜 |
|
||||
| --- | --- | --- |
|
||||
| `D03_PlanAnalysis_Terrain.py:302 · 315-323` | 병합 등고선 → 범위 통째 DEM | 도엽 목록 → 공용 저장 읽기 · 없는 도엽만 셈 → 이어 붙여 `models_plan/dtm_sheet_laplace.npz`(뒤 소비자 그대로) |
|
||||
| `SheetSurface.py:530` 격자 원점 | 상자 최소(어긋남) | 2 m 눈금(`grid_spec_from_bounds` anchor) |
|
||||
| `SheetSurface.py:311-327` 메움 | 같은 높이 선 전체 평균 | 고리 둘레(478 2 장 · `SHEET_SURFACE_ALGO` 1 → 2 · `:61`) |
|
||||
| `ZeroOrder.py:127-183` | 받은 범위 통째 누적 · 끝 = 출구 | 도엽별 누적(여유 300 m) 이어 붙여 임계만 쓸 때 |
|
||||
| `B07_..._Cad_Lidar.py:74` 음영 솎음 | 범위 따라 간격 바뀜 | 고정 간격 |
|
||||
| `Layers.py:268` 급경사 열쇠 | npz mtime:size | 그대로(이어 붙인 npz) |
|
||||
|
||||
- 바뀔 값 — 원점 맞춤으로 칸 자리 최대 1 m 이동(보간 값 cm~dm · 어림) · 메움 고침으로 봉우리 · 웅덩이 칸 0.01~0.05 % ± 4.5 m(478) · **범위 끝 효과 사라짐**(DEM 가장자리 20 m 띠 6.5 % → 0 · 0차곡 끝 200 m 띠 안 35 % → 0) · 범위가 늘어도 옛 칸 값이 안 바뀜.
|
||||
- D 확정값 영향 — D04 확정 = 노선 선만(`D04_PlanConfirm_Export.py:219`) · DEM 값은 확정 안 됨 → 다음 [지형 받기] 때 새 값. 3D 코리도 토공 어림만 조금 바뀜.
|
||||
- 시험 — `test_530_1_plan_terrain.py` · `test_569_1_plan_layers.py` · `test_584_1_plan_geo_lines.py`(0차곡) · `test_578_2_plan_slope_end.py` · `test_603_plan_slope_bands.py` · `test_sheet_surface.py`(B 공용).
|
||||
|
||||
### 4-2. B(2 단계)
|
||||
|
||||
| 고칠 곳 | 지금 | 바뀜 |
|
||||
| --- | --- | --- |
|
||||
| `Watershed_Expand.py:175-189` `source_for` · `:232-234` | 프로젝트 저장본 덮으면 잘라 씀 · 아니면 큰 격자 새로 | 도엽별 공용 방향 조각 이어 붙임 · 가장자리면 이웃 도엽 더 붙임 |
|
||||
| `Watershed_Descent.py:361-445` 저장 | 프로젝트 `drainage/descent_*.npz` · 받는 칸 int32 | 공용 자리 · 방향 코드 int8(이어 붙임 쉬움) |
|
||||
| `Descent.py:365-394` 열쇠 | 도엽 지문 = geojson mtime:size(`Router_Watershed.py:144-156`) · 하천 파일 바뀌어도 무효 | 등고선 내용 해시 + EPSG + 셀 + 판 |
|
||||
| `Router_Watershed.py:144-180` 재투영 피클 | 프로젝트마다 7.4 s → 피클 | 도엽 · EPSG 별 공용 |
|
||||
|
||||
- 바뀔 값 — **같은 등고선이면 0**(여유 100 m 실측 차 0). 원천을 도엽 zip → gpkg 로 바꾸면 갱신 도엽만(478 6 · 상주 099 길이 0.3 %).
|
||||
- B 확정값 영향 — 저장 응답 재사용(`Router_Watershed.py:397-401`) · 재확정 체인만 다시 셈(`B03_FileInput_Service_Chain.py:590` refresh=True) → 관 · 유역 확정값은 그 전까지 그대로 · 다시 셈해도 같은 등고선이면 같은 값.
|
||||
- 이득 — 첫 배수 분석 4.8~10.9 s → 이어 붙임(어림 1 s 안) · 같은 지역 · 복제 프로젝트 중복 저장 없앰(지금 같은 방향장 28 벌 · 1.2 GB · 같은 피클 14 벌 0.47 GB).
|
||||
- 시험 — `test_347_1_descent_store.py` · `test_520_6_watershed_once.py`.
|
||||
|
||||
### 4-3. E07(3 단계)
|
||||
|
||||
| 고칠 곳 | 지금 | 바뀜 |
|
||||
| --- | --- | --- |
|
||||
| `E07_StabArea_Engine.py:148-174` `catchment_area` | LAS 복사 DTM(유효 40 %) 안만 · 끝 = 출구(주석 `:151-152`) | 도엽 DEM 2 m + 여유 400 m 에서 a · β 는 LAS 그대로 |
|
||||
| `E07_StabArea_Router.py:145-155` 지문 | 물성 · 띠만 바꿔도 β · a 다시 | a 는 공용 · SI 만 다시 |
|
||||
|
||||
- 바뀔 값 — 띠 위쪽 끝 a 커짐 → SI 낮아짐(위험 쪽) · 실측 여유 0 대비 칸 10 % 에서 a 차 > 1 %.
|
||||
- 시험 — `test_536_2_e07_area.py`.
|
||||
|
||||
### 4-4. 미리 셈 아닌 곁(프로젝트 안 캐시)
|
||||
|
||||
- B05 추천 — `route_metrics` 가 후보마다 지형 전체 가우시안 · 기울기 다시(`B05_Profile_Engine_RouteInitial_Metrics.py:141 · 225 · 243`) · `SearchGrid` 의 고른 지면 · 계류 EDT 도 묶음마다(`B05_Profile_Engine_RouteInitial_Search.py:121-130`) → 지형 서명별 한 번 저장 갈래(LAS 기준이라 전국 공용 아님).
|
||||
- 0차곡 · E07 누적의 파이썬 반복(`ZeroOrder.py:83-94` · `E07_StabArea_Engine.py:164-172`) → 설치된 whitebox(2.3.0) 흐름누적으로 바꾸면 미리 셈 없이도 짧아짐(미실측).
|
||||
- LAS 없는 B WF1 이 6 방식 전부 짓는 것(`SheetSurface.py:663` → `:509`) = 설정 의도(laplace 하나)와 다름.
|
||||
|
||||
## 5. 우선순위
|
||||
|
||||
| 순위 | 대상 | 시간 이득(첫 진입) | 쓰임 빈도 | 일 크기 | 판 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| **1** | D 도엽별 DEM 2 m + 0차곡 누적(급경사 · 음영 = 그 DEM 에서) | 54~384 s → 새 도엽만 장당 약 72 s · 있는 도엽 0 s · 범위 늘 때 통째 다시 없앰 | D 지형 받기마다 · 범위 늘 때마다 | 큼(477 단계 2 + 메움 고침 + 원점 맞춤) | **1 단계** |
|
||||
| 2 | B 하강 방향장 도엽별 공용(1 m · 여유 100 m) + 재투영 등고선 | 4.8~10.9 s + 7.4 s → 약 1 s | B 프로젝트 첫 배수 · 복제마다 | 중간 | 2 단계 |
|
||||
| 3 | E07 a 를 도엽 DEM(여유 400 m)에서 | 시간 이득 작음(1~2 s) · 정확도 이득(상류 잘림) | E [해석 시작]마다 | 중간 | 3 단계 · β 섞음 결정 뒤 |
|
||||
| 4 | 등고선 표시 전국 벡터 조각(gpkg → 조각) | 사본 3 s + 화면 1.3 s · 힙 300 MB | D · B 화면 열 때마다 | 큼(조각 도구 없음 · tippecanoe 없음) | 나중 |
|
||||
| 5 | 위성 · 바탕 · 지적 조각 공용 저장 | 장당 43~314 ms · 바탕 6.5~12.8 s | 새 프로젝트마다 | 작음 | 선택(지형 아님) |
|
||||
| — | B DEM 1 m 조각 | 처음엔 느려짐(장당 175 s) | — | — | 지금대로(478 9) |
|
||||
| — | B1 LAS · B9 추천 · B10 · B11 · E1~E4 | 미리 불가(설계 · 사용자 LAS) | — | — | 제외 |
|
||||
|
||||
- 1 단계 안 차례 — 공용 저장 자리 · 열쇠(478 3 장 창고) → D DEM 조각(메움 고침 · 원점 맞춤 같이) → 0차곡 누적 조각 → 음영 솎음 고정.
|
||||
|
||||
## 6. 위험 · 사용자 결정 거리
|
||||
|
||||
### 6-1. 위험
|
||||
|
||||
| 위험 | 크기 | 막는 길 |
|
||||
| --- | --- | --- |
|
||||
| 방향장 · DEM 은 격자 방향이라 다시 투영 불가 | 중간 | EPSG 별 저장(TM 띠 경계 도엽은 두 벌) |
|
||||
| 두 PC 가 같은 도엽을 같이 셈 → Synology 충돌 사본 · 잠금 파일은 PC 사이 안 통함 | 중간 | 셈이 결정적(내용 같음) · 원자 쓰기 · 충돌 사본 청소 규칙 · 또는 쓰는 PC 하나 |
|
||||
| 랩탑 지움이 데스크탑(임시 배포)에 번짐 | 큼 | 공용 저장 지움 함수 없음 · B `prune_sheets`(`B04_PreProcess_Engine.py:527`)를 창고에 안 부름(478) |
|
||||
| 배포 서버(데스크탑 메인)에 gpkg 있는지 확인 못 함 | 중간 | 없으면 도엽 zip 폴백 · 또는 23 GB 복사 |
|
||||
| 판 올림(메움 · 원점 · 0차곡 · 방향장 판) | 지연이면 작음 · 전국이면 큼 | 열쇠에 판 · 쓸 때 다시 |
|
||||
| 열쇠가 mtime 기반(`common_util_derived_store.py:27-33`) | 공용엔 틀림(복사 · Synology 가 시각 바꿈) | 등고선 내용 해시(도엽 + 여유 안 선 · 0.2~0.4 s) |
|
||||
| 용량 | 전국 B 방향장 지금 꼴 1.6 TB | 압축 꼴 · 지연 채움 |
|
||||
| 메움 고침 · 원점 맞춤 = D 값 바뀜 | 작음(봉우리 칸 · 칸 자리) | 판 올림 · 다음 [지형 받기] 때 |
|
||||
|
||||
### 6-2. 결정 거리
|
||||
|
||||
| 거리 | 갈래 | 권함 |
|
||||
| --- | --- | --- |
|
||||
| 미리 셈 방식 | 처음 쓸 때 + 공용 영구 / 전국 미리 / 고른 시군 밤에 미리 | **처음 쓸 때 + 공용 영구** · 갈래로 시군 미리 |
|
||||
| 1 단계 대상 | D DEM + 0차곡(급경사 · 음영은 DEM 에서) / 더 넓게 | **D DEM + 0차곡** |
|
||||
| 등고선 원천 | 전국 gpkg / 도엽 zip | **gpkg**(받기 없음 · 같은 선 실측 478) · 없으면 zip |
|
||||
| 공용 저장 자리 | `storage/_shared/terrain/<EPSG>/<1:5만>/<도엽>/`(Synology 로 데스크탑도 씀) / storage 밖 PC 별 | 지연이면 **`storage/_shared`** · 전국 미리면 storage 밖 |
|
||||
| 0차곡 저장 꼴 | 누적 칸 수(임계 바꿔도 다시 안 셈) / 기본 임계 선만 | **누적 칸 수** |
|
||||
| B 방향장 공용 | 2 단계 / 지금대로(프로젝트) | **2 단계** |
|
||||
| E07 a 원천 | 도엽 DEM 여유 400 m / LAS 그대로 | **도엽 DEM a + LAS β**(3 단계) |
|
||||
| 큰 강 유역 계층 | 함 / 안 함 | **안 함**(3-1 실측) |
|
||||
| 데스크탑 gpkg | 23 GB 복사 / zip 폴백 | 사용자 결정 |
|
||||
| 갱신 | gpkg 연 1 회(07-26 확정) 뒤 쓸 때 해시 판별 / 일괄 다시 | **쓸 때 해시 판별** · 작업본은 [저장] · [확정] 때만(자동 다시 셈 없음) |
|
||||
@@ -917,3 +917,11 @@ resource폴더에 미리 계산해서 저장한고 필요한 시점에 사용한
|
||||
## 요구 489 (10-30 · 사용자)
|
||||
|
||||
미리계산했을때 전국 등고선과 도엽 등고선을 사용했을때의 효과를 알려줘.
|
||||
|
||||
## 요구 490 (10-30 · 사용자)
|
||||
|
||||
1. 빠진곳에서만 필요한 경우 도엽등고선을 받게 반영(다시말하면 없는 영역만 필요한 경우에만 받게 반영)
|
||||
2. 23gb에 대한 정보공유는 워크트리에서 정션을 걸어서 취급하면 문제 없어보임.
|
||||
3. 전국 등고선에 없는 데이터는 도엽등고선을 다운받아 정보를 가져오지만 데이터가 많지 않고 느려도 되니 사용자에게 브라우져를 보여주는 순서가 늦엊도 됨.
|
||||
4. 전국 등고선의 파일 업데이트는 내가 알아서 하겠음.주기 포함.
|
||||
일단 계획서와 요구서 업데이트
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
1. 도엽 조각 2 단계(DEM 조각 · 급경사 · 음영 · 0차곡 · 노선 DEM)를 이번에 1 단계와 함께 할지 — **1 단계 먼저 · 2 단계는 1 단계 화면 보고 결정(권함)** / 한 번에.
|
||||
|
||||
- 요구 486~490 으로 바뀜 — 2 단계(DEM 조각)는 `요구서_486_전국등고선_공용지형.md`(PLAN 607~611)로 옮김 · 등고선 원천 = 전국 등고선 파일 · 도엽 zip 은 빠진 곳 · 보조 겹만.
|
||||
|
||||
## 4. 배정안 (승인 뒤)
|
||||
|
||||
| 절 | 창 | 모델 | 맡는 것 |
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
# 요구서 486 — 전국 등고선으로 지형 분석 미리 계산(공용 지형 창고)
|
||||
|
||||
원문 = `사용자요구_1025.md` 요구 478~490 · 근거 = `_분석_478_전국도엽_도엽별DEM.md` · `_대조_483_전국gpkg_도엽.md` · `_분석_486_미리계산_지형분석.md` · 그림 대조 아티팩트 https://claude.ai/artifact/3kgRFSB3edxwYEWpqwLg6G · 앞 요구서 = `요구서_475_영역루틴_도엽조각_임도망목록.md`(PLAN 604~606).
|
||||
|
||||
## 1. 사실(실측)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| --- | --- |
|
||||
| 전국 등고선 파일 | `resources/data_global_contours/national_contours.gpkg` · 23.2 GB · 국가기본도 등고선 TN_CTRLN · 188만 가닥 · 5 m · 2026-07-26 만듦 · 랩탑 메인 폴더에만 있음(작업 폴더 · 데스크탑 없음) |
|
||||
| 도엽 등고선과 같은지 | 같은 1:5,000 원도 — 꼭짓점 99.7 % 1 mm 안 · 높이 짝 100 % · 지형면 차 평균 0.005~0.05 m · 한 곳 국소 수정(0.44 km · 최대 22 m · 어느 쪽 새것인지 모름) · 해상도 차 없음 |
|
||||
| 전국 파일에 없는 곳 | 섬 넷(백령 · 대청 · 소청 · 연평) |
|
||||
| 「해상도」 인상 | B04 하단 지도 「등고선」 겹(전국 파일)만 서버가 화면용으로 줄여 보냄(꼭짓점 12~18 % · 최대 3.3 m · `B04_PreProcess_Router_GIS.py:190-209`) |
|
||||
| 도엽별 지형 | 이웃 여유 50 m 넘으면 경계 차 0 · 200 m 면 통째 계산과 칸마다 같음 |
|
||||
| 미리 할 수 있는 오래 걸리는 계산(지형만 · LAS 안 씀) | D 지형 2 m(18.6~383.7 s) · D 0차곡(장 12.6 s) · B 배수 하강 방향장(1 m · 장 20.3 s · 배수유역 B04 · B05 바탕) · E07 광역 집수 면적 · 안정 지수 |
|
||||
| 미리 못 하는 계산 | B04 LAS 처리 · B05 노선 추천(LAS 지표면) · E03 · E04 · B03 체인 · B06 · E05(설계 · 사용자 LAS) |
|
||||
| 낭비 | 같은 하강 방향장 28 벌(1.2 GB) · 같은 D 지형 14 벌 · 같은 E07 결과 10 벌 |
|
||||
| 지형 계산 흠 둘(B · D 공용 코드) | ① 등고선 방향에 따라 굽는 칸이 달라짐(같은 선 뒤집어도 평균 0.10 · 최대 9 m · `B04_PreProcess_Engine_SheetSurface.py:268`) ② 봉우리 · 웅덩이 채움 방향을 같은 높이 선 전체 평균으로 정함 → 봉우리가 웅덩이로 뒤집힘(최대 9.00 m · `:311 · 319-327`) |
|
||||
| 곁 흠 | 도곽 코드 `A0010000` = 도로 면(진짜 도곽 `N3L_H0010000` · `B04_PreProcess_Engine_SheetStore.py:43`) · B `prune_sheets`(`B04_PreProcess_Engine.py:527`)가 공용 창고를 가리키면 남 도엽 지움 |
|
||||
|
||||
## 2. 사용자 확정
|
||||
|
||||
1. 등고선 원천 = 전국 등고선 파일(요구 486 · 489).
|
||||
2. 도엽 등고선은 전국 파일에 없는 영역이 필요할 때만 받음(요구 490-1).
|
||||
3. 23 GB 파일 = 작업 폴더에서 정션으로 함께 씀(요구 490-2).
|
||||
4. 전국 파일에 없는 곳은 도엽을 받아 채우되 느려도 됨 — 화면에 늦게 보여도 됨(요구 490-3).
|
||||
5. 전국 파일 갱신 · 주기 = 사용자 몫(요구 490-4).
|
||||
6. 오래 걸리는 지형 분석은 프로그램 단위로 미리(처음 쓸 때 도엽마다 한 번 · 공용 저장 · 요구 486) · E07 도 전국 지형으로(LAS 안 씀 · 요구 487 · 488).
|
||||
|
||||
## 3. 정함(브레인) — 사용자가 바꿀 수 있음
|
||||
|
||||
1. 공용 지형 창고 = `storage/_shared/terrain/<도엽 번호>/`(모든 작업 폴더가 보는 정션 · 시놀로지로 데스크탑에도) · 원천 23 GB 파일은 `resources/data_global_contours/` 그대로 + 작업 폴더 · 데스크탑 폴더에 정션.
|
||||
2. 단위 = 도엽(0.025°) · 이웃 여유 = 지형 200 m · 0차곡 200 m · 배수 하강장 100 m · E07 400 m(실측 차 0 · 0.1 %).
|
||||
3. 해상도 = D 2 m(요구 466) · B 하강장 1 m(지금 그대로) · E07 2 m.
|
||||
4. 계산 시점 = 도엽이 처음 쓰일 때 한 번 · 영구 저장 · 전국을 한꺼번에 미리 돌리지 않음(산지만 31 h · 방식 고치면 전국 다시).
|
||||
5. 열쇠(지문) = 원천 파일 지문(전국 파일 크기 · 수정 시각 또는 도엽 zip 해시) + 계산 방식 판 · 사용자가 전국 파일을 바꾸면 다음 쓸 때 그 도엽만 다시 셈.
|
||||
6. 급경사 · 음영 = 저장 안 함(지형에서 0.1~0.4 s).
|
||||
7. 섬 등 빠진 곳 = 도엽 zip 받아 같은 창고에 · 받는 동안 서클 · 화면은 다 받은 뒤 보임.
|
||||
8. 지형 계산 흠 둘 = 공용 창고 만들기 전에 먼저 고침(B 결과도 바뀜 — 확정값은 다시 [확정] 때만 · 전후 대조 수치).
|
||||
9. 하천 · 도로 · 건물 · 지명 등 보조 겹 = 지금처럼 도엽 zip(PLAN 606 화면 조각 길) · 늦게 받아도 됨.
|
||||
10. B04 하단 「등고선」 겹 화면 단순화 = 그대로(화면용) · 지형 계산은 단순화 안 한 원본만 씀.
|
||||
|
||||
## 4. 사용자 결정
|
||||
|
||||
없음(요구 490 으로 정해짐).
|
||||
|
||||
## 5. 배정안 (승인 뒤)
|
||||
|
||||
| 절 | 일 | 모델 |
|
||||
| --- | --- | --- |
|
||||
| 607 | 지형 계산 흠 둘 · 공용 지형 창고(전국 등고선 → 도엽 지형 2 m) · 빠진 곳 도엽 받기 · 정션 | Opus high |
|
||||
| 608 | 예정노선 지형 받기 = 공용 창고 읽기 · 0차곡 공용 · 급경사 · 음영 | Opus high |
|
||||
| 609 | 임도 설계 배수 하강 방향장 도엽별 공용 | Opus high |
|
||||
| 610 | E07 광역 = 공용 지형 · 집수 면적 · 기본 물성 안정 지수 미리 | Opus high |
|
||||
| 611 | 곁 흠(도곽 코드 · prune 공용 금지) | Sonnet high |
|
||||
|
||||
- 차례 — 607 먼저(창고 · 읽기 함수 꼴) → 608 · 609 · 610 · 611 동시 · PLAN 604 · 605 는 따로 바로 가능 · 606(화면 조각)은 604 · 607 뒤 · 606 의 등고 · 계곡 조각 원천 = 전국 파일.
|
||||
Reference in New Issue
Block a user