Files
Aislo/mainPlan.md
T
2026-07-05 14:05:22 +09:00

211 lines
11 KiB
Markdown

# 임도 설계 및 견적 자동화 웹앱 개발 계획서
## 권장 개발 환경 및 기술 스택
초기 개발은 비용 없는 오픈소스/무료 도구를 우선한다. DWG 직접 보기, 편집, 저장은 상용 SDK 없이 1차 필수 기능으로 잡지 않고, CAD 호환성은 DXF를 기준으로 먼저 확보한다.
| 영역 | 권장 기술 | 선택 사유 |
|---|---|---|
| Frontend | `TypeScript + React + Vite` | 타입 안정성과 개발 속도를 함께 확보하고, 3D/GIS 라이브러리 연동 사례가 많다. |
| 3D/GIS Viewer | `CesiumJS`, 필요 시 `Three.js` 보조 | 지형, 좌표, 3D Tiles, GeoJSON 표현은 CesiumJS가 적합하고, 커스텀 3D 편집 UI는 Three.js로 보완할 수 있다. |
| Backend | `Python + FastAPI` | GIS, LAS, 래스터, 수치계산 라이브러리와 연동하기 쉽고 API 서버 구성이 단순하다. |
| Background Job | 초기 단순 작업 큐, 장기적으로 `RQ` 또는 `Celery` | LAS 분석, 지형 변환, 문서 생성처럼 오래 걸리는 작업을 비동기로 처리하기 위함이다. |
| Database | `PostgreSQL + PostGIS` | 경로, 폴리곤, 횡단선, 토공 구역 같은 공간 데이터를 저장하고 분석하기 좋다. |
| Geospatial | `GDAL + PROJ + Rasterio + GeoPandas + Shapely` | 좌표계, 래스터, 벡터, 공간 연산 처리에 필요한 표준 도구 조합이다. |
| Point Cloud | `PDAL + laspy`, 필요 시 `Open3D` | PDAL은 대용량 포인트클라우드 처리에, laspy는 Python 기반 LAS 확인과 가벼운 처리에 적합하다. |
| Path Optimization | `NumPy + SciPy + NetworkX + 자체 비용함수` | 임도 설계 제약조건을 반영한 비용 기반 경로 계산을 직접 구성하기 좋다. |
| 3D Output | `3D Tiles + terrain tiles + glTF + GeoJSON` | 브라우저에서 대용량 지형, 구조물, 경로 레이어를 나누어 표시하기 적합하다. |
| CAD | `DXF 우선`, Python `ezdxf` | 무료 도구로 구현 가능성이 높고 CAD 교환 포맷으로 현실적이다. |
| DWG | `LibreDWG` 검토 후보 | 무료/오픈소스만으로는 실무 품질 보장이 어려우므로 직접 지원은 후속 검토로 둔다. |
| Documents | `openpyxl/xlsxwriter`, HTML-to-PDF 또는 `ReportLab` | Excel 견적서와 PDF 문서를 자동 생성하기 위한 조합이다. |
| Deployment | `Docker` | GDAL, PDAL, PostGIS 등 복잡한 의존성을 고정해 개발/배포 환경 차이를 줄인다. |
## DWG/DXF 정책
- [ ] 내부 설계 데이터는 DWG에 종속시키지 않고 DB/JSON/공간 데이터 구조로 관리한다.
- [ ] 브라우저에서는 DWG 원본을 직접 렌더링하기보다 설계 데이터를 `GeoJSON`, `SVG`, `WebGL geometry`, `DXF 변환 결과`로 보여준다.
- [ ] 1차 CAD 출력은 `DXF`로 제공한다.
- [ ] DWG 파일 출력은 무료 도구 기반 실험 후 가능 여부를 판단한다.
- [ ] 실무에서 DWG가 꼭 필요한 경우, 사용자가 외부 CAD 프로그램에서 DXF를 DWG로 변환하는 절차를 허용한다.
## 0. 프로젝트 목표
- [ ] 산속 임도 설계 업무를 웹앱에서 수행할 수 있도록 한다.
- [ ] LAS/PRJ/TFW/TIF 기반 지형 데이터를 백엔드에서 분석하고 브라우저에서 3D로 표현한다.
- [ ] 사용자가 지정한 시작점과 종료점을 기준으로 제약조건을 반영한 최적 임도 경로를 계산한다.
- [ ] 경로를 기준으로 종단도와 20m 간격 횡단도를 자동 생성한다.
- [ ] 횡단도를 기준으로 공사 예정 설계를 자동 작성하고, 구조물 라이브러리로 수정할 수 있게 한다.
- [ ] DWG 내보내기/가져오기를 통해 외부 수정 결과를 다시 계산에 반영한다.
- [ ] 확정된 설계를 기준으로 견적서 및 관련 문서를 자동 작성하고 Excel/PDF로 내보낸다.
## 1. 현재 입력 데이터
- [ ] `step1_scan/cloud_merged.las`: 포인트 클라우드 원본 데이터 확인
- [ ] `step1_scan/result.prj`: 좌표계 정보 확인
- [ ] `step1_scan/result.tfw`: 래스터 위치 정보 확인
- [ ] `step1_scan/result.tif`: 지형 또는 정사영상/래스터 데이터 확인
- [ ] 각 파일의 좌표계, 단위, 해상도, 기준고, 데이터 범위를 문서화
## 2. 전체 작업 흐름
- [ ] 1단계: 지형 데이터 수집 및 전처리
- [ ] 2단계: 브라우저용 3D 지형 모델 생성
- [ ] 3단계: 시작점/종료점 지정 및 제약조건 입력
- [ ] 4단계: 최적 임도 경로 계산
- [ ] 5단계: 종단도 및 20m 횡단도 생성
- [ ] 6단계: 예정 설계 자동 작성
- [ ] 7단계: 구조물 라이브러리 기반 설계 수정
- [ ] 8단계: DWG 내보내기 및 수정본 가져오기
- [ ] 9단계: 수량 산출 및 테이블 재계산
- [ ] 10단계: 설계 확정
- [ ] 11단계: 견적서 및 문서 자동 작성
- [ ] 12단계: Excel/PDF 출력
## 3. 기능 요구사항
### 3.1 지형 데이터 전처리
- [ ] LAS 파일에서 불필요한 포인트를 분류하거나 제거한다.
- [ ] 토지/지표면 데이터만 남기는 필터링 기준을 정의한다.
- [ ] 필터링된 데이터를 DEM, TIN, mesh, contour 중 어떤 형태로 변환할지 결정한다.
- [ ] 폴리곤 또는 서피스 형태로 변환한다.
- [ ] 브라우저 표시용 LOD, 타일링, 압축, 샘플링 전략을 정한다.
- [ ] 원본 데이터와 최적화 데이터의 품질 차이를 검증한다.
### 3.2 3D 브라우저 뷰어
- [ ] 3D 지형 데이터를 브라우저에서 표시한다.
- [ ] 확대, 축소, 회전, 이동, 높이 확인 기능을 제공한다.
- [ ] 시작점과 종료점을 지형 위에서 지정할 수 있게 한다.
- [ ] 경로, 횡단선, 구조물, 공사 구간 레이어를 켜고 끌 수 있게 한다.
- [ ] 대용량 데이터에서도 조작 가능한 성능 기준을 정한다.
### 3.3 최적 경로 계산
- [ ] 시작점과 종료점 입력 방식을 정의한다.
- [ ] 경사도 제한 조건을 정의한다.
- [ ] 최소 곡선반경, 최대 종단경사, 토공량, 거리, 회피구역 등 제약조건 후보를 정리한다.
- [ ] 비용함수 항목과 가중치를 정의한다.
- [ ] 경로 탐색 알고리즘 후보를 검토한다.
- [ ] 계산 결과를 3D 뷰어에 표시한다.
- [ ] 사용자가 경로를 수정할 수 있는지 여부와 수정 방식을 정한다.
### 3.4 종단도 및 횡단도
- [ ] 최적 경로 기준으로 종단도를 생성한다.
- [ ] 20m 간격 횡단도를 생성한다.
- [ ] 측점 체계, 폭, 절토/성토 기준, 표고 계산 방식을 정의한다.
- [ ] 종단도와 횡단도를 브라우저에서 확인할 수 있게 한다.
- [ ] 사용자가 단면을 선택하고 상세 값을 확인할 수 있게 한다.
### 3.5 예정 설계 자동 작성
- [ ] 횡단도를 기준으로 공사 예정 단면을 자동 생성한다.
- [ ] 절토, 성토, 노폭, 배수, 사면 기준을 정의한다.
- [ ] 구조물 라이브러리 범위를 정의한다.
- [ ] 구조물을 추가, 삭제, 이동, 수정할 수 있게 한다.
- [ ] 설계 변경 시 수량 테이블이 갱신되도록 한다.
### 3.6 DWG 연계
- [ ] DWG 내보내기 범위를 정의한다.
- [ ] 내보낸 DWG의 레이어, 블록, 좌표 기준을 정의한다.
- [ ] 사용자가 수정한 DWG를 다시 업로드할 수 있게 한다.
- [ ] DWG 수정 사항을 내부 설계 데이터와 매핑한다.
- [ ] 가져온 수정 결과를 기준으로 수량 테이블을 재계산한다.
### 3.7 설계 확정 및 문서 출력
- [ ] 설계 확정 전 검토 항목을 정의한다.
- [ ] 설계 확정 후에도 수정 가능한 범위를 정의한다.
- [ ] 견적서 자동 작성에 필요한 단가, 품셈, 수량 산출 기준을 정리한다.
- [ ] Excel 출력 양식을 정의한다.
- [ ] PDF 출력 양식을 정의한다.
- [ ] 산출 문서의 버전 관리 방식을 정한다.
## 4. 비기능 요구사항
- [ ] 대용량 LAS 데이터를 처리할 수 있는 백엔드 구조를 설계한다.
- [ ] 긴 분석 작업은 비동기 작업 큐로 처리할지 검토한다.
- [ ] 분석 진행률과 오류 상태를 사용자에게 표시한다.
- [ ] 프로젝트별 데이터 저장 구조를 정의한다.
- [ ] 원본 데이터, 중간 산출물, 최종 산출물을 분리 보관한다.
- [ ] 좌표계와 단위 변환 오류를 방지하는 검증 절차를 둔다.
- [ ] 사용자 수정 이력을 저장한다.
- [ ] 설계 계산 결과의 재현성을 확보한다.
## 5. 기술 검토 항목
- [ ] 백엔드 언어와 프레임워크 결정
- [ ] 포인트 클라우드 처리 라이브러리 검토
- [ ] GIS/좌표계 처리 라이브러리 검토
- [ ] 3D 브라우저 렌더링 기술 검토
- [ ] DWG/DXF 입출력 방식 검토
- [ ] Excel/PDF 문서 생성 방식 검토
- [ ] 데이터베이스와 파일 저장소 구조 검토
- [ ] 작업 큐와 캐시 구조 검토
## 6. 단계별 산출물
### Phase 1. 데이터 분석 프로토타입
- [ ] `step1_scan` 입력 파일 메타데이터 확인
- [ ] 좌표계와 공간 범위 확인
- [ ] LAS 지표면 필터링 실험
- [ ] DEM 또는 mesh 변환 실험
- [ ] 브라우저 표시용 샘플 데이터 생성
### Phase 2. 3D 뷰어 프로토타입
- [ ] 지형 데이터를 브라우저에 표시
- [ ] 기본 카메라 조작 구현
- [ ] 시작점/종료점 선택 UI 구현
- [ ] 경로 레이어 표시 구조 구현
### Phase 3. 경로 계산 프로토타입
- [ ] 경사도 기반 비용맵 생성
- [ ] 시작점/종료점 간 1차 경로 탐색
- [ ] 경로 결과를 3D 뷰어에 표시
- [ ] 제약조건 추가 가능성 검토
### Phase 4. 종횡단 자동 생성
- [ ] 경로 기준 종단 좌표와 표고 계산
- [ ] 20m 간격 횡단선 생성
- [ ] 단면 데이터 테이블 생성
- [ ] 종단도/횡단도 화면 표시
### Phase 5. 설계 및 수량 산출
- [ ] 기본 단면 설계 규칙 정의
- [ ] 절토/성토 수량 계산
- [ ] 구조물 라이브러리 초안 작성
- [ ] 설계 수정 시 수량 재계산
### Phase 6. DWG 및 문서 출력
- [ ] DXF/DWG 내보내기 실험
- [ ] 수정본 가져오기 실험
- [ ] 견적서 Excel 양식 생성
- [ ] PDF 출력 양식 생성
## 7. 미정 사항
- [ ] 법적/실무 설계 기준 자료 확보
- [ ] 임도 설계 기준의 구체 수치 정리
- [ ] 견적 단가 데이터 출처 결정
- [ ] 구조물 라이브러리 범위 결정
- [ ] DWG를 직접 지원할지 DXF 중심으로 지원할지 결정
- [ ] 다중 사용자 협업 기능 필요 여부 결정
- [ ] 웹앱 배포 대상 결정
- [ ] 오프라인 사용 필요 여부 결정
## 8. 다음 작업
- [ ] `step1_scan` 파일의 메타데이터를 확인한다.
- [ ] LAS 파일에서 지표면 추출 가능성을 검토한다.
- [ ] 브라우저 표시용 데이터 포맷 후보를 정한다.
- [ ] 최적 경로 계산에 필요한 제약조건 초안을 작성한다.
- [ ] 임도 설계 기준과 견적 산출 기준 자료를 수집한다.