summit/PROJECT.md

5.2 KiB
Raw Blame History

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)

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