summit/PROJECT.md

104 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# SUMMIT - 全球 14 座 8000 米级雪山 3D 可视化平台
## 1. 项目概述 (Project Overview)
本项目旨在构建一个**完全免费、零商业依赖、高性能**的 Web 3D 地球可视化平台,专注于展示全球 14 座 8000 米级雪山。
项目采用 **"硬核极客"** 路线,核心理念是 **Data Autonomy (数据自主)**:直接从 NASA 获取原始地形数据,自行构建数据生产流水线,结合 **PostgreSQL + Redis** 多级缓存架构,提供极致的性能体验。前端使用开源的 **MapLibre GL JS** 结合 **Three.js** 进行高保真渲染。
---
## 2. 系统架构 (System Architecture)
系统采用经典的前后端分离架构,辅以离线数据处理流水线。
### 2.1 顶层设计
* **Frontend (Web):** SPA 单页应用,负责 3D 地图交互、渲染与漫游控制。通过 **Proxy (代理)** 访问后端 API 和静态资源。
* **Backend (API):** 提供 RESTful API负责元数据查询、路线数据分发、用户系统等。同时作为一个静态文件服务器托管地形瓦片。
* **Data Pipeline (Offline):** 负责将 NASA 原始数据 (GeoTIFF) 处理为 Web 可用的地形瓦片 (Terrain-RGB)。
* **Database & Cache:** PostgreSQL 存储核心结构化数据Redis 提供热点数据高速缓存。
---
## 3. 技术栈 (Tech Stack)
### 3.1 前端 (Frontend)
* **Framework:** React 18 + TypeScript + Vite
* **Map Engine:** **MapLibre GL JS** (Mapbox 开源分支,负责地图瓦片调度与底图渲染)
* **3D Engine:** **Three.js** (负责渲染攀登路线、营地、光效、粒子系统)
* **UI Library:** TailwindCSS + Lucide Icons
* **State Management:** Zustand / React Context
### 3.2 后端 (Backend)
* **Framework:** Python 3.11+ (FastAPI)
* **Server:** Uvicorn (ASGI)
* **ORM:** SQLAlchemy (Async) / Tortoise ORM
* **Geo Processing:** GDAL / Rasterio (用于后端动态分析地形)
### 3.3 数据存储与缓存 (Storage & Caching)
* **Primary DB:** **PostgreSQL 15+** (with **PostGIS** extension)
* 存储山峰元数据、GeoJSON 路线、用户数据。
* **Cache:** **Redis 7+**
* Layer 1: API 响应缓存 (Response Cache)。
* Layer 2: 高频地理空间查询缓存 (Spatial Cache)。
* Layer 3: 瓦片元数据缓存 (如果自建瓦片服务)。
### 3.4 数据流水线 (Data Pipeline)
* **Source:** NASA SRTM (30m DEM), Esri World Imagery.
* **Tools:** GDAL (`gdal_translate`, `gdalwarp`), `rio-rgbify`, `gdal2tiles`.
* **Output:** Mapbox Terrain-RGB compatible tiles (`.png` / `.webp`),输出至 `backend/upload`
---
## 4. 核心功能模块 (Core Modules)
### 4.1 数据生产流水线 (The Pipeline)
自动化脚本集,负责从 NASA 下载数据并处理。
1. **Ingest:** 下载 SRTM GeoTIFF。
2. **Process:** 重投影 (EPSG:4326 -> EPSG:3857) -> 拼接 (Merge) -> 编码 (RGBify)。
3. **Tile:** 切片生成 Z10-Z14 瓦片金字塔。
4. **Export:** 将产物存入 `backend/upload/tiles`
### 4.2 3D 可视化引擎 (Visualization Engine)
* **地形渲染:** 加载自定义 Terrain-RGB 瓦片,实现真实地形起伏。
* **混合渲染:** MapLibre 负责底图与地形Three.js 自定义图层负责覆盖物 (Routes, Camps)。
* **光照模拟:** 基于太阳位置算法 (SunCalc) 的实时光照与阴影。
### 4.3 后端服务与缓存 (Backend & Cache)
* **Peaks API:** 提供 14 座山峰的详细信息 (高度、位置、首登记录)。
* *Cache Strategy:* 永久缓存 (除非数据更正)Redis Key: `peak:{id}:info`.
* **Routes API:** 提供 GPX/GeoJSON 格式的攀登路线。
* *Cache Strategy:* LRU 缓存Redis Key: `route:{id}:geojson`.
* **Elevation API:** (可选) 后端直接查询 GeoTIFF 返回特定坐标高度。
---
## 5. 项目目录结构 (Directory Structure)
```text
summit/
├── .github/ # CI/CD workflows
├── backend/ # FastAPI Application
│ ├── app/
│ │ ├── api/ # Routes
│ │ ├── core/ # Config, Database connection
│ │ ├── models/ # SQLAlchemy Models
│ │ └── services/ # Business Logic
│ ├── upload/ # [NEW] Static Resources Root
│ │ ├── tiles/ # Generated Terrain-RGB Tiles ({z}/{x}/{y}.png)
│ │ └── shapes/ # Route GeoJSONs / GPX files
│ └── tests/
├── data/ # Data Processing Workspace (Offline)
│ ├── raw/ # NASA GeoTIFFs (Source)
│ └── scripts/ # Python/Shell processing scripts (GDAL)
├── frontend/ # React Application
│ ├── src/
│ │ ├── components/ # UI Components
│ │ ├── map/ # MapLibre & Three.js logic
│ │ └── store/ # State Management
│ ├── public/ # Static Assets (Favicon, etc.)
│ └── vite.config.ts # Proxy Configuration
├── CONFIG.md # [NEW] Configuration Guide (Env, DB, Redis)
├── DATABASE.md # Database Design
├── PROJECT.md # Project Documentation
└── ROADMAP.md # Roadmap
```