# AcidMap 项目开发规范 (PROJECT RULES) ## 0. 规则文件维护指导 (RULES MAINTENANCE GUIDE) ### 0.1 规则更新原则 **重要提示**: 当项目发生以下变化时,开发人员和AI助手必须同步更新本规则文件: #### 0.1.1 必须更新的情况 1. **新功能模块集成** - 添加新的业务功能、API端点或服务组件 2. **架构变更** - 修改目录结构、分层架构或技术栈 3. **开发规范变更** - 修改编码规范、注释风格或命名约定 4. **部署环境变更** - 更新依赖包、数据库版本或服务器配置 5. **API接口变更** - 新增、修改或删除API路由和响应格式 #### 0.1.2 更新流程 1. **识别变更影响** - 确定变更影响的规范章节 2. **更新相关章节** - 修改对应的规范内容和示例 3. **验证一致性** - 确保规范与实际代码实现一致 4. **文档同步** - 同时更新相关的集成文档和使用指南 #### 0.1.3 AI助手责任 - 在进行功能开发或架构调整时,主动识别需要更新的规范内容 - 确保新增功能的开发遵循现有规范,或合理扩展规范 - 提醒维护相关文档的同步更新 ## 1. 项目概述 ### 1.1 项目基本信息 - **项目名称**: AcidMap (地图数据处理与预测分析系统) - **技术栈**: FastAPI + PostgreSQL + PostGIS + PyTorch - **主要功能**: 栅格和矢量地理数据的处理、存储、管理和Cd预测分析 - **开发语言**: Python 3.8+ - **架构模式**: 分层架构 (API层 -> Service层 -> Model层) ### 1.2 核心业务域 - 栅格数据处理 (Raster Data Processing) - 矢量数据处理 (Vector Data Processing) - 空间数据查询和分析 - GIS数据导入导出 - **Cd预测模型分析 (Cd Prediction Analysis)** ✨新增 - 作物Cd含量预测 - 有效态Cd含量预测 - 预测结果可视化 ## 2. 项目架构 ### 2.1 目录结构规范 ``` AcidMap/ ├── app/ # 应用核心代码 │ ├── api/ # API路由层 │ │ ├── raster.py # 栅格数据接口 │ │ ├── vector.py # 矢量数据接口 │ │ └── cd_prediction.py # Cd预测模型接口 ✨新增 │ ├── services/ # 业务逻辑层 │ │ ├── raster_service.py │ │ ├── vector_service.py │ │ └── cd_prediction_service.py # Cd预测业务服务 ✨新增 │ ├── models/ # 数据模型层 │ │ ├── base.py # 基础模型 │ │ ├── orm_models.py # ORM模型 │ │ ├── raster.py # 栅格数据模型 │ │ ├── vector.py # 矢量数据模型 │ │ └── county.py # 县域数据模型 │ ├── utils/ # 工具函数 │ │ ├── file_validators.py │ │ └── cd_prediction_wrapper.py # Cd预测系统包装器 ✨新增 │ ├── config/ # 配置管理 ✨新增 │ │ ├── __init__.py │ │ └── cd_prediction_config.py # Cd预测配置管理 │ ├── static/ # 静态文件 ✨新增 │ │ └── cd_predictions/ # Cd预测输出文件 │ │ ├── figures/ # 地图和直方图 │ │ ├── raster/ # 栅格文件 │ │ ├── reports/ # 报告文件 │ │ └── data/ # 数据文件 │ ├── logs/ # 日志文件 │ ├── scripts/ # 脚本文件 │ ├── database.py # 数据库配置 │ └── main.py # FastAPI应用入口 ├── Cd_Prediction_Integrated_System/ # Cd预测系统 ✨新增 │ ├── models/ # 预测模型 │ │ ├── crop_cd_model/ │ │ └── effective_cd_model/ │ ├── analysis/ # 数据分析模块 │ ├── utils/ # 工具函数 │ ├── data/ # 数据文件 │ ├── output/ # 输出文件 │ ├── main.py # 主执行脚本 │ └── config.py # 配置文件 ├── data/ # 数据文件 │ └── counties.geojson # 县域地理数据 ├── migrations/ # 数据库迁移文件 ├── scripts/ # 项目脚本 ├── ssl/ # SSL证书文件 ├── config.env # 环境配置 ├── environment.yml # Conda环境依赖 ├── soilgd.sql # 数据库备份文件 ├── db_migrate.py # 数据库迁移脚本 ├── reset_db.py # 数据库重置脚本 ├── test_cd_integration.py # Cd集成测试脚本 ✨新增 ├── INTEGRATION_GUIDE.md # 集成使用指南 ✨新增 ├── CD_INTEGRATION_SUMMARY.md # 集成总结文档 ✨新增 └── main.py # 应用启动入口 ``` ### 2.2 分层架构说明 1. **API层 (app/api/)**: 处理HTTP请求,参数验证,调用Service层 2. **Service层 (app/services/)**: 业务逻辑处理,数据转换,调用Model层 3. **Model层 (app/models/)**: 数据模型定义,数据库操作 4. **Utils层 (app/utils/)**: 通用工具函数,验证器等 5. **Config层 (app/config/)**: 配置管理,环境设置 ✨新增 ## 3. 开发规范 ### 3.1 代码规范 #### 3.1.1 注释规范 **必须使用JSDoc风格注释**: ```python def process_raster_data(file_path: str, options: dict) -> dict: """ 处理栅格数据文件 @param {str} file_path - 栅格文件路径 @param {dict} options - 处理选项配置 @returns {dict} 处理结果,包含状态和数据信息 @throws {ValueError} 当文件路径无效时抛出 @example >>> result = process_raster_data('/path/to/file.tif', {'format': 'GeoTIFF'}) >>> print(result['status']) """ pass ``` #### 3.1.2 命名规范 - **文件名**: 使用下划线分隔 (snake_case) - **类名**: 使用帕斯卡命名 (PascalCase) - **函数名**: 使用下划线分隔 (snake_case) - **变量名**: 使用下划线分隔 (snake_case) - **常量名**: 全大写下划线分隔 (UPPER_SNAKE_CASE) #### 3.1.3 导入规范 ```python # 标准库导入 import os import logging from typing import List, Dict, Optional # 第三方库导入 from fastapi import FastAPI, HTTPException from sqlalchemy import create_engine from geoalchemy2 import Geometry # 本地模块导入 from .models import Base from .services import RasterService ``` ### 3.2 API设计规范 #### 3.2.1 路由组织 - 栅格数据: `/api/raster/*` - 矢量数据: `/api/vector/*` - **Cd预测分析: `/api/cd-prediction/*`** ✨新增 - 使用RESTful设计原则 #### 3.2.2 HTTP状态码 - 200: 成功 - 201: 创建成功 - 400: 客户端错误 - 404: 资源未找到 - 500: 服务器错误 #### 3.2.3 响应格式 ```python { "success": true, "message": "操作成功", "data": {...}, "error": null } ``` ### 3.3 数据库规范 #### 3.3.1 数据库配置 - 数据库: PostgreSQL 12+ - 空间扩展: PostGIS 3.0+ - 连接池: SQLAlchemy连接池管理 - 环境配置: config.env文件 #### 3.3.2 模型定义 - 继承Base类 - 使用GeoAlchemy2处理空间数据 - 添加适当的索引和约束 #### 3.3.3 迁移管理 - 使用Alembic进行数据库迁移 - 保持迁移文件版本控制 - 提供数据库重置脚本 ## 4. 核心组件说明 ### 4.1 数据库层 (database.py) ```python # 核心配置项 - SQLALCHEMY_DATABASE_URL: 数据库连接字符串 - SessionLocal: 会话工厂 - get_db(): 依赖注入函数 - execute_sql(): 原生SQL执行 ``` ### 4.2 API路由层 - **栅格API (api/raster.py)**: 处理栅格数据的CRUD操作 - **矢量API (api/vector.py)**: 处理矢量数据的CRUD操作 - **Cd预测API (api/cd_prediction.py)**: 处理Cd预测模型的调用和结果获取 ✨新增 ### 4.3 业务服务层 - **RasterService**: 栅格数据业务逻辑 - **VectorService**: 矢量数据业务逻辑 - **CdPredictionService**: Cd预测分析业务逻辑 ✨新增 ### 4.4 数据模型层 - **ORM模型**: 数据库表映射 - **Pydantic模型**: API输入输出验证 ### 4.5 Cd预测系统组件 ✨新增 - **CdPredictionWrapper**: Cd预测系统包装器 - **CdPredictionConfig**: Cd预测配置管理 - **作物Cd预测模型**: 基于神经网络的作物Cd含量预测 - **有效态Cd预测模型**: 基于神经网络的有效态Cd含量预测 ## 5. 开发流程 ### 5.1 新功能开发流程 1. **需求分析**: 确定功能边界和技术方案 2. **数据模型设计**: 设计相关的数据库表和ORM模型 3. **Service层开发**: 实现业务逻辑 4. **API层开发**: 实现HTTP接口 5. **测试**: 单元测试和集成测试 6. **文档更新**: 更新API文档和代码注释 7. **规则文件更新**: 更新PROJECT_RULES.md中的相关规范 ✨新增 ### 5.2 数据库变更流程 1. 修改ORM模型 2. 生成迁移文件: `alembic revision --autogenerate -m "描述"` 3. 执行迁移: `alembic upgrade head` 4. 更新数据库备份文件 ### 5.3 代码提交规范 - feat: 新功能 - fix: 修复bug - docs: 文档更新 - refactor: 代码重构 - test: 测试相关 - **integrate: 系统集成** ✨新增 ### 5.4 Cd预测功能开发流程 ✨新增 1. **模型验证**: 确保Cd预测系统完整性 2. **包装器开发**: 创建系统调用包装器 3. **服务层集成**: 实现异步预测服务 4. **API接口开发**: 创建预测和下载接口 5. **文件管理**: 实现输出文件的管理和清理 6. **集成测试**: 运行完整的集成测试脚本 ## 6. 环境配置 ### 6.1 开发环境要求 - Python 3.8+ - PostgreSQL 12+ (with PostGIS) - **Cd预测系统依赖**: ✨新增 - PyTorch >= 1.9.0 - scikit-learn >= 1.0.0 - geopandas >= 0.10.0 - rasterio >= 1.2.0 - matplotlib >= 3.4.0 - seaborn >= 0.11.0 - fiona (地理数据I/O) - pyogrio (高性能地理数据I/O) ### 6.2 环境配置文件 - `config.env`: 数据库连接配置 - `environment.yml`: Conda环境依赖 ### 6.3 启动命令 ```bash # 开发环境 uvicorn app.main:app --reload # 生产环境 uvicorn app.main:app --host 0.0.0.0 --port 8000 # Cd集成测试 python test_cd_integration.py ``` ## 7. 安全规范 ### 7.1 CORS配置 - 限制允许的源域名 - 配置适当的HTTP方法和头部 ### 7.2 数据库安全 - 使用环境变量管理敏感信息 - 实施连接池管理 - SQL注入防护 ### 7.3 文件上传安全 - 文件类型验证 - 文件大小限制 - 恶意文件检测 ### 7.4 Cd预测系统安全 ✨新增 - 预测任务超时控制 (5分钟) - 输出文件访问权限管理 - 敏感路径信息隐藏 - 异常信息安全过滤 ## 8. 性能优化 ### 8.1 数据库优化 - 适当的索引设计 - 查询优化 - 连接池配置 ### 8.2 API优化 - 响应压缩 - 缓存策略 - 分页处理 ### 8.3 Cd预测性能优化 ✨新增 - 异步任务处理 (asyncio) - CPU密集型任务线程池执行 - 预测结果文件缓存 - 自动文件清理 (最多保留10个) ## 9. 错误处理 ### 9.1 异常分类 - 业务异常: 4xx HTTP状态码 - 系统异常: 5xx HTTP状态码 - 数据库异常: 专门的错误处理 ### 9.2 日志记录 - 使用Python logging模块 - 分级别记录日志 - 敏感信息脱敏 ### 9.3 Cd预测错误处理 ✨新增 - 预测系统完整性检查 - 依赖包缺失检测 - 预测超时异常处理 - 文件生成失败回退机制 ## 10. 测试规范 ### 10.1 测试覆盖 - 单元测试: Service层和Utils层 - 集成测试: API端点测试 - 数据库测试: 模型和查询测试 ### 10.2 测试数据 - 使用测试数据库 - 测试数据隔离 - 数据清理策略 ### 10.3 Cd预测测试规范 ✨新增 - 集成测试脚本: `test_cd_integration.py` - 配置模块测试 - 包装器功能测试 - API端点注册验证 - 文件系统完整性检查 ## 11. 部署规范 ### 11.1 部署环境 - 支持Docker容器化部署 - SSL证书配置 - 环境变量管理 ### 11.2 监控和维护 - 应用性能监控 - 错误日志监控 - 数据库性能监控 ### 11.3 Cd预测部署特殊要求 ✨新增 - 确保Cd_Prediction_Integrated_System目录完整 - 验证地理空间库安装 (fiona, pyogrio) - 配置预测输出目录权限 - 监控预测任务执行时间 ## 12. API文档规范 ✨新增 ### 12.1 Cd预测API端点 #### 一键接口 (生成并直接返回图片) ``` POST /api/cd-prediction/crop-cd/generate-and-get-map POST /api/cd-prediction/effective-cd/generate-and-get-map POST /api/cd-prediction/crop-cd/generate-and-get-histogram POST /api/cd-prediction/effective-cd/generate-and-get-histogram ``` #### 分步式接口 (先生成后下载) ``` POST /api/cd-prediction/crop-cd/generate-map POST /api/cd-prediction/effective-cd/generate-map GET /api/cd-prediction/crop-cd/download-map GET /api/cd-prediction/effective-cd/download-map GET /api/cd-prediction/crop-cd/download-histogram GET /api/cd-prediction/effective-cd/download-histogram ``` ### 12.2 一键接口特点 ✨新增 - **即时响应**: 生成完成后直接返回图片文件 - **简化操作**: 无需分两步操作,一次调用完成 - **适用场景**: 前端直接显示、浏览器预览、快速下载 - **返回格式**: 直接返回`FileResponse`图片文件 ### 12.3 分步式接口特点 - **灵活控制**: 可以先生成后选择性下载 - **状态查询**: 生成接口返回详细的统计信息 - **批量操作**: 生成一次可多次下载不同格式 - **返回格式**: JSON响应包含文件路径和统计信息 ### 12.4 响应格式规范 #### 一键接口响应 ``` Content-Type: image/jpeg Content-Disposition: attachment; filename="crop_cd_prediction_map.jpg" [图片文件二进制数据] ``` #### 分步式接口响应 ```json { "success": true, "message": "作物Cd预测地图生成成功", "data": { "map_path": "string", "histogram_path": "string", "raster_path": "string", "prediction_stats": {} }, "error": null } ``` ### 12.5 文档维护 - 使用FastAPI自动生成文档 (`/docs`) - 维护详细的集成指南 (`INTEGRATION_GUIDE.md`) - 更新API变更日志 --- ## 总结 本规范文档旨在为AcidMap项目的开发提供统一的标准和指导。所有开发人员和AI助手在进行功能开发、代码维护和系统扩展时,都应严格遵循本规范,以确保代码质量、系统稳定性和开发效率。 **重要提醒**: 本规范文件应与项目功能同步更新。任何新功能集成、架构调整或开发流程变更都必须及时反映到相应的规范章节中。 遇到规范未覆盖的情况时,应优先考虑: 1. 代码可读性和可维护性 2. 系统安全性和稳定性 3. 性能优化和用户体验 4. 与现有架构的一致性 **最后更新**: 2025-06-01 (Cd预测功能集成)