Comprehensive Geographic Data Analysis System(CGDA)是一套面向地理科研人员与工程开发者的 Web 地理数据分析平台:在浏览器中完成地图可视化、多源数据接入、工作流编排与算法产物展示,支持本地数据、Google Earth Engine(GEE)、Open-Meteo 及商业天气源等。
- 地图浏览与叠加:MapLibre 2D 主舞台,底图切换、行政区边界、栅格/矢量图层叠加
- 天气分析:点查预报、网格场、标准 z/x/y 天气瓦片;风场粒子/风羽/等值线等 Canvas 叠加
- 工作流分析:LiteGraph 可视化编辑器编排下载、预处理、反演、统计等节点(如 ω 反演、NDVI、FY/SMAP 等课题组算法)
- 时空结果展示:时间轴驱动图层、InfoPanel 分析工具、产物预览与导出
- 多源数据:本地磁盘、GEE、Open-Meteo(在线/自托管)、WeatherAPI、OpenWeather 等
- 前后端分离 + 协议先行:
Code/shared/contracts为单一契约来源,OpenAPI 自动生成前端类型 - 工作流主链:
workflow-runsAPI + Celery 多队列异步执行 + SQLite 运行态持久化 - 算法插件化:
Code/algorithmsPython 包经 provider bridge 接入,模块可独立演进 - 默认同域入口:Nginx Gateway
:5175静态前端 + 反代 FastAPI,便于联调与演示
3D 地球(Cesium)依赖已引入,当前默认主链仍为 2D-first,Cesium 为实验性能力。
浏览器 (Vue 3 + MapLibre)
│ HTTP
▼
Nginx Gateway :5175 ──► FastAPI :8000
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Celery Workers weatherengine GEE bridge
(7 队列) (点查/瓦片) (可选)
│
▼
Python 算法包 + 本地/MinIO 产物存储
│
Redis (队列/缓存) · SQLite (运行态) · MinIO (对象) · Open-Meteo API
基础设施分两栈:
| 栈 | 路径 | 内容 |
|---|---|---|
| 运行栈 | Code/backend/docker-compose.yml |
Redis、MinIO、cgda-open-meteo API |
| 数据栈 | Code/infra/data-sync/ |
Open-Meteo 一次性同步(launch.py sync) |
一键启停与组件管理见根目录 launch.py。
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端 | Vue 3、TypeScript、Vite、Pinia | Node 22(见 Code/frontend/package.json) |
| 2D 地图 | MapLibre GL JS + Canvas 叠加 | 当前主路径 |
| 3D | CesiumJS、vue-cesium | 已打包,非默认主链 |
| API | FastAPI | 统一 REST 入口,/docs 交互文档 |
| 任务队列 | Celery + Redis | realtime / standard / heavy / batch / download / gee / weather |
| 算法 | Python 3.12 + provider bridge | Code/algorithms/providers/Python/ |
| 瓦片 | 自研 unified-tiles + weather tiles | 底图 /unified-tiles;天气 /weather/tiles |
| 元数据 | SQLite | 工作流运行态;PostGIS 为后续目标 |
| 对象存储 | MinIO + 本地磁盘 | compose 已提供 |
| 启动 | launch.py + Docker Compose |
Windows 推荐 start.bat |
Comprehensive Geographic Data Analysis system/
├─ Code/
│ ├─ frontend/ # Vue 3 WebGIS 前端
│ ├─ backend/ # FastAPI + Celery + weatherengine + GEE
│ ├─ algorithms/ # Python 算法包与数据接入
│ ├─ shared/ # 前后端共享契约
│ └─ infra/ # gateway(Nginx)+ data-sync(气象同步)
├─ Docs/ # 公开文档(架构、规范、部署、专题研究)
├─ Test/ # 测试集中地(backend / frontend / algorithms)
├─ Tools/ # 辅助脚本(非运行时主体模块)
├─ Env/Python312/ # 本地联调唯一 Python 运行时(勿用系统 python)
├─ launch.py # 跨平台启动器
├─ start.bat / start.sh
├─ README.md # 本文档
├─ AGENTS.md # 开发者/AI 导航(命令、验证、「改 X 则跑 Y」)
└─ CLAUDE.md # Claude Code 入口指针
各子目录详情见 Code/README.md。
| 组件 | 要求 |
|---|---|
| Python | 3.12,使用 Env/Python312(Windows:Env\Python312\python.exe) |
| Node.js | 22.x(npm >= 10) |
| Docker | Desktop(Windows 须管理员身份运行 Docker 与终端) |
| 磁盘 | 配置 BACKEND_DATA_ROOT 指向机构地理数据根目录 |
勿用系统 PATH 中的
python启动后端或 Worker,否则易出现依赖不一致的「环境幽灵问题」。start.bat会强制使用Env/Python312。
# 前端依赖(在 Code/frontend 下)
cd Code/frontend
npm install
npm run buildPython 依赖已随 Env/Python312 预置;若需重建,见 Docs/04-执行部署/本地联调环境说明.md。
copy Code\backend\.env.example Code\backend\.env本地联调至少设置:
BACKEND_ENV=development
BACKEND_DATA_ROOT=<你的地理数据根绝对路径>
BACKEND_OUTPUT_ROOT=<产物输出根绝对路径>首次使用可复制 Code/backend/deployment.config.json.example 为 deployment.config.json,或在登录后访问 部署配置中心 /deployment(仅 admin)维护数据根与 Docker 相关项。
# Windows:以管理员身份打开终端
start.bat
# 或
Env\Python312\python.exe launch.py start浏览器打开 **http://localhost:5175**。默认账号见 .env 中 BACKEND_ADMIN_USERNAME / BACKEND_ADMIN_PASSWORD(development 可在 .env.example 查看说明)。
Env\Python312\python.exe launch.py sync本地天气源依赖此步骤;在线源可在设置中配置 Provider。
| 命令 | 作用 |
|---|---|
start.bat / launch.py start |
Docker + FastAPI + 7 Worker + Beat + Nginx Gateway |
launch.py start --vite |
同上,Gateway 同域 + 背后 Vite HMR(:5174) |
launch.py restart |
全量重启(改前端后可用 --rebuild-frontend) |
launch.py restart backend |
仅重启 FastAPI + Worker + Beat(改数据根后必用) |
launch.py status / logs [组件] |
状态与日志 |
launch.py sync |
Open-Meteo 数据面同步 |
launch.py clean-cache |
清理 __pycache__ 与 Vite 缓存 |
launch.py flush |
清空 Redis + 天气文件缓存(高风险,仅排障) |
stop.bat / launch.py stop |
停止全部服务 |
前端仅改动时:launch.py start frontend(直连 Vite,会停 Gateway)。
完整命令表见 AGENTS.md。
| 服务 | 地址 |
|---|---|
| 前端入口(Gateway) | http://localhost:5175 |
| FastAPI | http://127.0.0.1:8000(文档 /docs) |
| Open-Meteo API | http://127.0.0.1:8080 |
| Redis | 127.0.0.1:6379 |
| MinIO | API :9100,Console :9101 |
- 真源:
Code/backend/deployment.config.json(推荐)与Code/backend/.env中的BACKEND_DATA_ROOT/BACKEND_OUTPUT_ROOT - 修改入口:前端
/deployment(admin)或编辑上述文件;变更后须launch.py restart backend - 就绪检查:
GET /layers返回各图层的run_readiness
production 未配置 BACKEND_DATA_ROOT 将拒绝启动;代码不会静默回退到其他盘符。
| 机制 | 说明 |
|---|---|
| 会话 Cookie | 浏览器默认登录方式(cgda_session) |
| 个人 API Token | 设置 → 账户,继承账户角色 |
| 服务密钥 | X-API-Key: backend_auth,角色由 BACKEND_API_KEY_ROLE 决定(默认 standard) |
RBAC 三角色:admin(全权限)、standard(读写工作流,不可改高危配置)、demo(只读 + 受控数据传输)。
production 写接口默认 fail-closed;development 且未启用 API Key 时,仅 loopback 可旁路鉴权。
BACKEND_GEE_CREDENTIALS_ENCRYPTION_KEY:64 位 hex(32 字节),加密 GEE 凭据、API Key、天气 Provider、远程存储等- 非 development 环境缺此 key 将拒启
- 凭据轮换后建议
launch.py restart使各进程生效
配置治理详见 Docs/03-规范协议/配置文件治理说明.md。
| 读者 | 推荐阅读 |
|---|---|
| 新人 | 本文 → AGENTS.md → Code/README.md |
| 本地联调 | Docs/04-执行部署/本地联调环境说明.md |
| 架构与设计 | Docs/02-架构设计/ |
| 接口与命名 | Docs/03-规范协议/ · Code/shared/contracts/README.md |
| 算法接入 | Code/algorithms/providers/Python/README.md |
| ω 反演等工作流 | Docs/08-HTML报告/omega-algorithm-guide/ |
| 交付与生产 | Docs/04-执行部署/delivery-checklist.md |
| 文档总索引 | Docs/README.md |
带日期的快照文档(如 99-历史归档/)仅作历史参考,以模块 README 与无日期活文档为准。
在仓库根目录执行(需 REDIS_URL 与 ENVIRONMENT=test):
Env\Python312\python.exe -m pytest Test/backend -q
Env\Python312\python.exe -m pytest Test/algorithms -qcd Code/frontend
npm run test
npm run lint
npm run build
npm run check:openapi
npm run check:catalogpre-commit run --all-files「改某模块应跑哪些测试」见 AGENTS.md 中的「改 X 则跑 Y」表。
- 单机构部署:SQLite 元数据 + 多用户 RBAC;Gateway 默认同域入口
- 演示开关:production 勿开启
BACKEND_DEMO_SOURCES_ENABLED/BACKEND_NODE_STUBS_VISIBLE - Open-Meteo 数据卷:使用 Docker named volume,Windows 上勿改为 bind mount
- flush:仅排障时使用;
start/restart永不自动 flush - 联调缓存:见
Docs/07-工程保障/联调缓存与生效边界.md
完整交付核对清单见 Docs/04-执行部署/delivery-checklist.md。
- Gateway 说明:
Code/infra/gateway/README.md - 后端模块:
Code/backend/README.md - 前端模块:
Code/frontend/README.md - AI 辅助开发:根目录
AGENTS.md(面向 coding agent 的完整导航)