|
@@ -37,7 +37,7 @@
|
|
|
- 矢量数据处理 (Vector Data Processing)
|
|
|
- 空间数据查询和分析
|
|
|
- GIS数据导入导出
|
|
|
-- **Cd预测模型分析 (Cd Prediction Analysis)** ✨新增
|
|
|
+- Cd预测模型分析 (Cd Prediction Analysis)
|
|
|
- 作物Cd含量预测
|
|
|
- 有效态Cd含量预测
|
|
|
- 预测结果可视化
|
|
@@ -51,24 +51,25 @@ AcidMap/
|
|
|
│ ├── api/ # API路由层
|
|
|
│ │ ├── raster.py # 栅格数据接口
|
|
|
│ │ ├── vector.py # 矢量数据接口
|
|
|
-│ │ └── cd_prediction.py # Cd预测模型接口 ✨新增
|
|
|
+│ │ └── cd_prediction.py # Cd预测模型接口
|
|
|
│ ├── services/ # 业务逻辑层
|
|
|
│ │ ├── raster_service.py
|
|
|
│ │ ├── vector_service.py
|
|
|
-│ │ └── cd_prediction_service.py # Cd预测业务服务 ✨新增
|
|
|
+│ │ └── cd_prediction_service.py # Cd预测业务服务
|
|
|
│ ├── models/ # 数据模型层
|
|
|
│ │ ├── base.py # 基础模型
|
|
|
│ │ ├── orm_models.py # ORM模型
|
|
|
│ │ ├── raster.py # 栅格数据模型
|
|
|
│ │ ├── vector.py # 矢量数据模型
|
|
|
-│ │ └── county.py # 县域数据模型
|
|
|
+│ │ ├── county.py # 县域数据模型
|
|
|
+│ │ └── farmland.py # 农田样点数据模型
|
|
|
│ ├── utils/ # 工具函数
|
|
|
│ │ ├── file_validators.py
|
|
|
-│ │ └── cd_prediction_wrapper.py # Cd预测系统包装器 ✨新增
|
|
|
-│ ├── config/ # 配置管理 ✨新增
|
|
|
+│ │ └── cd_prediction_wrapper.py # Cd预测系统包装器
|
|
|
+│ ├── config/ # 配置管理
|
|
|
│ │ ├── __init__.py
|
|
|
│ │ └── cd_prediction_config.py # Cd预测配置管理
|
|
|
-│ ├── static/ # 静态文件 ✨新增
|
|
|
+│ ├── static/ # 静态文件
|
|
|
│ │ └── cd_predictions/ # Cd预测输出文件
|
|
|
│ │ ├── figures/ # 地图和直方图
|
|
|
│ │ ├── raster/ # 栅格文件
|
|
@@ -78,7 +79,7 @@ AcidMap/
|
|
|
│ ├── scripts/ # 脚本文件
|
|
|
│ ├── database.py # 数据库配置
|
|
|
│ └── main.py # FastAPI应用入口
|
|
|
-├── Cd_Prediction_Integrated_System/ # Cd预测系统 ✨新增
|
|
|
+├── Cd_Prediction_Integrated_System/ # Cd预测系统
|
|
|
│ ├── models/ # 预测模型
|
|
|
│ │ ├── crop_cd_model/
|
|
|
│ │ └── effective_cd_model/
|
|
@@ -98,9 +99,9 @@ AcidMap/
|
|
|
├── soilgd.sql # 数据库备份文件
|
|
|
├── db_migrate.py # 数据库迁移脚本
|
|
|
├── reset_db.py # 数据库重置脚本
|
|
|
-├── test_cd_integration.py # Cd集成测试脚本 ✨新增
|
|
|
-├── INTEGRATION_GUIDE.md # 集成使用指南 ✨新增
|
|
|
-├── CD_INTEGRATION_SUMMARY.md # 集成总结文档 ✨新增
|
|
|
+├── test_cd_integration.py # Cd集成测试脚本
|
|
|
+├── INTEGRATION_GUIDE.md # 集成使用指南
|
|
|
+├── CD_INTEGRATION_SUMMARY.md # 集成总结文档
|
|
|
└── main.py # 应用启动入口
|
|
|
```
|
|
|
|
|
@@ -109,7 +110,7 @@ AcidMap/
|
|
|
2. **Service层 (app/services/)**: 业务逻辑处理,数据转换,调用Model层
|
|
|
3. **Model层 (app/models/)**: 数据模型定义,数据库操作
|
|
|
4. **Utils层 (app/utils/)**: 通用工具函数,验证器等
|
|
|
-5. **Config层 (app/config/)**: 配置管理,环境设置 ✨新增
|
|
|
+5. **Config层 (app/config/)**: 配置管理,环境设置
|
|
|
|
|
|
## 3. 开发规范
|
|
|
|
|
@@ -163,7 +164,7 @@ from .services import RasterService
|
|
|
#### 3.2.1 路由组织
|
|
|
- 栅格数据: `/api/raster/*`
|
|
|
- 矢量数据: `/api/vector/*`
|
|
|
-- **Cd预测分析: `/api/cd-prediction/*`** ✨新增
|
|
|
+- **Cd预测分析: `/api/cd-prediction/*`**
|
|
|
- 使用RESTful设计原则
|
|
|
|
|
|
#### 3.2.2 HTTP状态码
|
|
@@ -198,6 +199,29 @@ from .services import RasterService
|
|
|
|
|
|
#### 3.3.3 迁移管理
|
|
|
- 使用Alembic进行数据库迁移
|
|
|
+
|
|
|
+### 3.4 可视化规范
|
|
|
+
|
|
|
+#### 3.4.1 分辨率设置
|
|
|
+- **默认DPI**: 300 (标准分辨率输出)
|
|
|
+- **高分辨率DPI**: 600 (高质量输出)
|
|
|
+- **高分辨率模式**: 支持通过`high_res=True`参数启用600 DPI输出
|
|
|
+- **图像格式**: JPG格式,支持bbox_inches='tight'自动裁切
|
|
|
+
|
|
|
+#### 3.4.2 分辨率配置层级
|
|
|
+1. **配置文件级别**: `config.VISUALIZATION_CONFIG["dpi"] = 300`
|
|
|
+2. **matplotlib全局设置**: `plt.rcParams['savefig.dpi'] = 300`
|
|
|
+3. **方法参数级别**: `high_res`参数可动态控制输出DPI
|
|
|
+
|
|
|
+#### 3.4.3 可视化方法接口
|
|
|
+- **栅格地图**: `create_raster_map(high_res=False)` - 默认300 DPI标准分辨率输出
|
|
|
+- **直方图**: `create_histogram(high_res=False)` - 默认300 DPI标准分辨率输出
|
|
|
+- **图像尺寸**: 可通过`figure_size`和`figsize`参数调整
|
|
|
+
|
|
|
+#### 3.4.4 字体配置
|
|
|
+- 优先使用Windows系统中文字体: Microsoft YaHei, SimHei等
|
|
|
+- 支持跨平台字体回退机制
|
|
|
+- 自动字体缓存重建解决字体问题
|
|
|
- 保持迁移文件版本控制
|
|
|
- 提供数据库重置脚本
|
|
|
|
|
@@ -215,18 +239,22 @@ from .services import RasterService
|
|
|
### 4.2 API路由层
|
|
|
- **栅格API (api/raster.py)**: 处理栅格数据的CRUD操作
|
|
|
- **矢量API (api/vector.py)**: 处理矢量数据的CRUD操作
|
|
|
-- **Cd预测API (api/cd_prediction.py)**: 处理Cd预测模型的调用和结果获取 ✨新增
|
|
|
+- **Cd预测API (api/cd_prediction.py)**: 处理Cd预测模型的调用和结果获取
|
|
|
|
|
|
### 4.3 业务服务层
|
|
|
- **RasterService**: 栅格数据业务逻辑
|
|
|
- **VectorService**: 矢量数据业务逻辑
|
|
|
-- **CdPredictionService**: Cd预测分析业务逻辑 ✨新增
|
|
|
+- **CdPredictionService**: Cd预测分析业务逻辑
|
|
|
|
|
|
### 4.4 数据模型层
|
|
|
- **ORM模型**: 数据库表映射
|
|
|
+ - RasterData: 栅格数据模型
|
|
|
+ - VectorData: 矢量数据模型
|
|
|
+ - Counties: 县域地理数据模型
|
|
|
+ - FarmlandData: 农田样点空间位置与索引数据模型
|
|
|
- **Pydantic模型**: API输入输出验证
|
|
|
|
|
|
-### 4.5 Cd预测系统组件 ✨新增
|
|
|
+### 4.5 Cd预测系统组件
|
|
|
- **CdPredictionWrapper**: Cd预测系统包装器
|
|
|
- **CdPredictionConfig**: Cd预测配置管理
|
|
|
- **作物Cd预测模型**: 基于神经网络的作物Cd含量预测
|
|
@@ -241,13 +269,276 @@ from .services import RasterService
|
|
|
4. **API层开发**: 实现HTTP接口
|
|
|
5. **测试**: 单元测试和集成测试
|
|
|
6. **文档更新**: 更新API文档和代码注释
|
|
|
-7. **规则文件更新**: 更新PROJECT_RULES.md中的相关规范 ✨新增
|
|
|
+7. **规则文件更新**: 更新PROJECT_RULES.md中的相关规范
|
|
|
|
|
|
### 5.2 数据库变更流程
|
|
|
-1. 修改ORM模型
|
|
|
-2. 生成迁移文件: `alembic revision --autogenerate -m "描述"`
|
|
|
-3. 执行迁移: `alembic upgrade head`
|
|
|
-4. 更新数据库备份文件
|
|
|
+
|
|
|
+#### 5.2.1 数据库表格添加标准流程
|
|
|
+
|
|
|
+**第一步: 创建/修改 ORM 模型**
|
|
|
+1. 在 `app/models/` 目录下创建或编辑模型文件
|
|
|
+2. 定义SQLAlchemy ORM模型类,继承Base类
|
|
|
+3. 确保在 `app/models/__init__.py` 中导入新模型
|
|
|
+
|
|
|
+```python
|
|
|
+# 实际案例: 农田数据模型
|
|
|
+# app/models/farmland.py
|
|
|
+from sqlalchemy import Column, Integer, Float
|
|
|
+from geoalchemy2 import Geometry
|
|
|
+from app.database import Base # 统一的Base导入
|
|
|
+
|
|
|
+class FarmlandData(Base):
|
|
|
+ """
|
|
|
+ 农田样点空间位置与索引数据模型
|
|
|
+
|
|
|
+ @param {int} farmland_id - 区域农业用地矢量点编号(主键)
|
|
|
+ @param {int} sample_id - 采样自增的ID(主键+自增)
|
|
|
+ @param {float} lon - 经度
|
|
|
+ @param {float} lan - 纬度
|
|
|
+ @param {float} type - 用地类型:旱地(0)、水田(1)、水浇地(2)
|
|
|
+ """
|
|
|
+ __tablename__ = 'Farmland_data'
|
|
|
+
|
|
|
+ farmland_id = Column('Farmland_ID', Integer, primary_key=True)
|
|
|
+ sample_id = Column('Sample_ID', Integer, primary_key=True, autoincrement=True)
|
|
|
+ lon = Column('lon', Float, nullable=True)
|
|
|
+ lan = Column('lan', Float, nullable=True)
|
|
|
+ type = Column('Type', Float, nullable=True)
|
|
|
+ geom = Column(Geometry('POINT', srid=4326))
|
|
|
+```
|
|
|
+
|
|
|
+**第二步: 使用迁移脚本生成迁移文件**
|
|
|
+```bash
|
|
|
+# 使用项目自带的迁移脚本
|
|
|
+python db_migrate.py create "添加新数据表"
|
|
|
+
|
|
|
+# 或直接使用alembic命令
|
|
|
+alembic revision --autogenerate -m "添加新数据表"
|
|
|
+```
|
|
|
+
|
|
|
+**第三步: 检查生成的迁移文件**
|
|
|
+1. 查看 `migrations/versions/` 目录下新生成的迁移文件
|
|
|
+2. 验证迁移内容是否正确
|
|
|
+3. 必要时手动调整迁移脚本
|
|
|
+
|
|
|
+**第四步: 执行数据库迁移**
|
|
|
+```bash
|
|
|
+# 使用项目迁移脚本
|
|
|
+python db_migrate.py upgrade
|
|
|
+
|
|
|
+# 或直接使用alembic命令
|
|
|
+alembic upgrade head
|
|
|
+```
|
|
|
+
|
|
|
+**第五步: 验证迁移结果**
|
|
|
+```bash
|
|
|
+# 查看当前数据库版本
|
|
|
+python db_migrate.py current
|
|
|
+
|
|
|
+# 查看迁移历史
|
|
|
+python db_migrate.py history
|
|
|
+```
|
|
|
+
|
|
|
+#### 5.2.2 使用sqlacodegen反向生成模型 (可选)
|
|
|
+
|
|
|
+当需要从现有数据库表生成ORM模型时:
|
|
|
+
|
|
|
+```bash
|
|
|
+# 反向生成所有表的模型
|
|
|
+sqlacodegen postgresql://postgres:123456789Qq@localhost/soilgd > models.py
|
|
|
+
|
|
|
+# 生成特定表的模型
|
|
|
+sqlacodegen postgresql://postgres:123456789Qq@localhost/soilgd --tables table1,table2 > specific_models.py
|
|
|
+```
|
|
|
+
|
|
|
+#### 5.2.3 数据库脚本命令参考
|
|
|
+
|
|
|
+**db_migrate.py 脚本命令**:
|
|
|
+- `python db_migrate.py create "描述"` - 创建新迁移
|
|
|
+- `python db_migrate.py upgrade` - 升级到最新版本
|
|
|
+- `python db_migrate.py downgrade` - 降级到上一版本
|
|
|
+- `python db_migrate.py current` - 显示当前版本
|
|
|
+- `python db_migrate.py history` - 显示迁移历史
|
|
|
+- `python db_migrate.py stamp head` - 标记数据库版本
|
|
|
+
|
|
|
+**其他数据库操作**:
|
|
|
+- `python reset_db.py` - 重置数据库
|
|
|
+- `psql -U postgres -d soilgd -f soilgd.sql` - 从备份文件恢复数据库
|
|
|
+
|
|
|
+#### 5.2.4 数据导入脚本开发规范
|
|
|
+
|
|
|
+##### 5.2.4.1 脚本开发原则
|
|
|
+- **统一模式**: 所有导入脚本应遵循统一的结构和错误处理模式
|
|
|
+- **参考现有脚本**: 可参考 `scripts/import_counties.py` (GeoJSON导入) 和 `scripts/import_farmland_data.py` (Excel导入)
|
|
|
+- **完整日志**: 实现详细的操作日志记录
|
|
|
+- **事务安全**: 确保数据完整性,支持回滚机制
|
|
|
+- **批量处理**: 大数据集使用批量插入优化性能
|
|
|
+
|
|
|
+##### 5.2.4.2 数据导入脚本模板结构
|
|
|
+
|
|
|
+```python
|
|
|
+"""
|
|
|
+数据导入脚本模板
|
|
|
+@description: [描述导入的数据类型和来源]
|
|
|
+"""
|
|
|
+
|
|
|
+import os
|
|
|
+import sys
|
|
|
+import logging
|
|
|
+# 添加项目根目录到Python路径
|
|
|
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
+
|
|
|
+from app.database import SessionLocal
|
|
|
+from app.models.[model_file] import [ModelClass]
|
|
|
+
|
|
|
+# 设置日志
|
|
|
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
+
|
|
|
+class [DataType]Importer:
|
|
|
+ """
|
|
|
+ [数据类型]导入器
|
|
|
+ """
|
|
|
+ def __init__(self, file_path: str):
|
|
|
+ self.file_path = file_path
|
|
|
+
|
|
|
+ def read_data(self):
|
|
|
+ """读取数据文件"""
|
|
|
+ pass
|
|
|
+
|
|
|
+ def validate_data(self, data):
|
|
|
+ """验证数据格式和完整性"""
|
|
|
+ pass
|
|
|
+
|
|
|
+ def import_data(self, data):
|
|
|
+ """将数据导入到数据库"""
|
|
|
+ db = SessionLocal()
|
|
|
+ try:
|
|
|
+ # 批量处理逻辑
|
|
|
+ # 事务提交
|
|
|
+ db.commit()
|
|
|
+ logger.info("数据导入完成")
|
|
|
+ except Exception as e:
|
|
|
+ db.rollback()
|
|
|
+ logger.error(f"数据导入失败: {str(e)}")
|
|
|
+ raise
|
|
|
+ finally:
|
|
|
+ db.close()
|
|
|
+
|
|
|
+ def run_import(self):
|
|
|
+ """执行完整的导入流程"""
|
|
|
+ try:
|
|
|
+ data = self.read_data()
|
|
|
+ validated_data = self.validate_data(data)
|
|
|
+ self.import_data(validated_data)
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"导入流程失败: {str(e)}")
|
|
|
+ raise
|
|
|
+
|
|
|
+def main():
|
|
|
+ file_path = "path/to/data/file"
|
|
|
+ importer = [DataType]Importer(file_path)
|
|
|
+ importer.run_import()
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|
|
|
+```
|
|
|
+
|
|
|
+##### 5.2.4.3 GeoJSON数据导入参考
|
|
|
+
|
|
|
+**参考脚本**: `scripts/import_counties.py`
|
|
|
+
|
|
|
+主要特点:
|
|
|
+- 使用JSON模块读取GeoJSON文件
|
|
|
+- 通过模型类的`from_geojson_feature`方法处理几何数据
|
|
|
+- 完整的错误处理和日志记录
|
|
|
+- 事务安全保证
|
|
|
+
|
|
|
+```python
|
|
|
+# 核心导入逻辑示例
|
|
|
+def import_counties_from_geojson(file_path: str, db: Session):
|
|
|
+ with open(file_path, 'r', encoding='utf-8') as f:
|
|
|
+ geojson_data = json.load(f)
|
|
|
+
|
|
|
+ for feature in geojson_data['features']:
|
|
|
+ try:
|
|
|
+ county = County.from_geojson_feature(feature)
|
|
|
+ db.add(county)
|
|
|
+ logger.info(f"成功导入: {county.name}")
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"导入失败: {str(e)}")
|
|
|
+ continue
|
|
|
+
|
|
|
+ db.commit()
|
|
|
+```
|
|
|
+
|
|
|
+##### 5.2.4.4 Excel数据导入参考
|
|
|
+
|
|
|
+**参考脚本**: `scripts/import_farmland_data.py`
|
|
|
+
|
|
|
+主要特点:
|
|
|
+- 使用pandas读取Excel文件和指定sheet
|
|
|
+- 支持数据类型转换和映射(如Type字段映射)
|
|
|
+- 自动生成PostGIS几何对象
|
|
|
+- 批量插入优化(1000条/批次)
|
|
|
+- 数据验证和清洗
|
|
|
+
|
|
|
+```python
|
|
|
+# 核心导入逻辑示例
|
|
|
+class FarmlandDataImporter:
|
|
|
+ def __init__(self, excel_path, sheet_name='Farmland'):
|
|
|
+ self.excel_path = excel_path
|
|
|
+ self.sheet_name = sheet_name
|
|
|
+ self.type_mapping = {'旱': 0.0, '水田': 1.0, '水浇地': 2.0}
|
|
|
+
|
|
|
+ def read_excel_data(self):
|
|
|
+ df = pd.read_excel(self.excel_path, sheet_name=self.sheet_name)
|
|
|
+ return df
|
|
|
+
|
|
|
+ def validate_data(self, df):
|
|
|
+ # 数据类型转换
|
|
|
+ df['Type_Numeric'] = df['Type'].map(self.type_mapping)
|
|
|
+ return df
|
|
|
+
|
|
|
+ def create_geometry(self, lon, lat):
|
|
|
+ return WKTElement(f'POINT({lon} {lat})', srid=4326)
|
|
|
+
|
|
|
+ def import_data(self, df):
|
|
|
+ # 批量导入逻辑
|
|
|
+ batch_size = 1000
|
|
|
+ for i in range(0, len(df), batch_size):
|
|
|
+ batch_objects = []
|
|
|
+ # ... 创建批次对象
|
|
|
+ db.add_all(batch_objects)
|
|
|
+ db.commit()
|
|
|
+```
|
|
|
+
|
|
|
+##### 5.2.4.5 数据导入最佳实践
|
|
|
+
|
|
|
+1. **文件路径检查**: 导入前验证数据文件是否存在
|
|
|
+2. **数据预览**: 读取数据后显示前几行供确认
|
|
|
+3. **字段映射**: 建立清晰的字段映射表(如类型编码转换)
|
|
|
+4. **几何数据处理**: 自动生成PostGIS兼容的几何对象
|
|
|
+5. **批量操作**: 大数据集分批处理,避免内存溢出
|
|
|
+6. **进度跟踪**: 显示导入进度和统计信息
|
|
|
+7. **异常处理**: 跳过无效数据行,记录详细错误信息
|
|
|
+8. **结果验证**: 导入完成后验证数据库中的记录数量
|
|
|
+
|
|
|
+##### 5.2.4.6 常用数据源类型
|
|
|
+
|
|
|
+- **GeoJSON**: 地理空间矢量数据(参考`import_counties.py`)
|
|
|
+- **Excel/CSV**: 结构化表格数据(参考`import_farmland_data.py`)
|
|
|
+- **Shapefile**: GIS矢量数据(使用geopandas读取)
|
|
|
+- **GeoTIFF**: 栅格地理数据(使用rasterio处理)
|
|
|
+
|
|
|
+#### 5.2.5 注意事项
|
|
|
+- 备份数据库后再执行迁移
|
|
|
+- 在开发环境先测试迁移
|
|
|
+- 保持迁移文件的版本控制
|
|
|
+- 迁移失败时及时回滚
|
|
|
+- **Base类统一性**:所有模型必须使用`app.database`中的同一个Base实例
|
|
|
+ - ❌ 错误:`from .base import Base`(会创建独立的Base)
|
|
|
+ - ✅ 正确:`from app.database import Base`(使用统一的Base)
|
|
|
|
|
|
### 5.3 代码提交规范
|
|
|
- feat: 新功能
|
|
@@ -255,9 +546,9 @@ from .services import RasterService
|
|
|
- docs: 文档更新
|
|
|
- refactor: 代码重构
|
|
|
- test: 测试相关
|
|
|
-- **integrate: 系统集成** ✨新增
|
|
|
+- **integrate: 系统集成**
|
|
|
|
|
|
-### 5.4 Cd预测功能开发流程 ✨新增
|
|
|
+### 5.4 Cd预测功能开发流程
|
|
|
1. **模型验证**: 确保Cd预测系统完整性
|
|
|
2. **包装器开发**: 创建系统调用包装器
|
|
|
3. **服务层集成**: 实现异步预测服务
|
|
@@ -270,7 +561,7 @@ from .services import RasterService
|
|
|
### 6.1 开发环境要求
|
|
|
- Python 3.8+
|
|
|
- PostgreSQL 12+ (with PostGIS)
|
|
|
-- **Cd预测系统依赖**: ✨新增
|
|
|
+- **Cd预测系统依赖**:
|
|
|
- PyTorch >= 1.9.0
|
|
|
- scikit-learn >= 1.0.0
|
|
|
- geopandas >= 0.10.0
|
|
@@ -312,7 +603,7 @@ python test_cd_integration.py
|
|
|
- 文件大小限制
|
|
|
- 恶意文件检测
|
|
|
|
|
|
-### 7.4 Cd预测系统安全 ✨新增
|
|
|
+### 7.4 Cd预测系统安全
|
|
|
- 预测任务超时控制 (5分钟)
|
|
|
- 输出文件访问权限管理
|
|
|
- 敏感路径信息隐藏
|
|
@@ -330,7 +621,7 @@ python test_cd_integration.py
|
|
|
- 缓存策略
|
|
|
- 分页处理
|
|
|
|
|
|
-### 8.3 Cd预测性能优化 ✨新增
|
|
|
+### 8.3 Cd预测性能优化
|
|
|
- 异步任务处理 (asyncio)
|
|
|
- CPU密集型任务线程池执行
|
|
|
- 预测结果文件缓存
|
|
@@ -348,7 +639,7 @@ python test_cd_integration.py
|
|
|
- 分级别记录日志
|
|
|
- 敏感信息脱敏
|
|
|
|
|
|
-### 9.3 Cd预测错误处理 ✨新增
|
|
|
+### 9.3 Cd预测错误处理
|
|
|
- 预测系统完整性检查
|
|
|
- 依赖包缺失检测
|
|
|
- 预测超时异常处理
|
|
@@ -366,7 +657,7 @@ python test_cd_integration.py
|
|
|
- 测试数据隔离
|
|
|
- 数据清理策略
|
|
|
|
|
|
-### 10.3 Cd预测测试规范 ✨新增
|
|
|
+### 10.3 Cd预测测试规范
|
|
|
- 配置模块测试
|
|
|
- 包装器功能测试
|
|
|
- API端点注册验证
|
|
@@ -384,13 +675,13 @@ python test_cd_integration.py
|
|
|
- 错误日志监控
|
|
|
- 数据库性能监控
|
|
|
|
|
|
-### 11.3 Cd预测部署特殊要求 ✨新增
|
|
|
+### 11.3 Cd预测部署特殊要求
|
|
|
- 确保Cd_Prediction_Integrated_System目录完整
|
|
|
- 验证地理空间库安装 (fiona, pyogrio)
|
|
|
- 配置预测输出目录权限
|
|
|
- 监控预测任务执行时间
|
|
|
|
|
|
-## 12. API文档规范 ✨新增
|
|
|
+## 12. API文档规范
|
|
|
|
|
|
### 12.1 Cd预测API端点
|
|
|
|
|
@@ -412,7 +703,7 @@ GET /api/cd-prediction/crop-cd/download-histogram
|
|
|
GET /api/cd-prediction/effective-cd/download-histogram
|
|
|
```
|
|
|
|
|
|
-### 12.2 一键接口特点 ✨新增
|
|
|
+### 12.2 一键接口特点
|
|
|
- **即时响应**: 生成完成后直接返回图片文件
|
|
|
- **简化操作**: 无需分两步操作,一次调用完成
|
|
|
- **适用场景**: 前端直接显示、浏览器预览、快速下载
|
|
@@ -466,4 +757,4 @@ Content-Disposition: attachment; filename="crop_cd_prediction_map.jpg"
|
|
|
3. 性能优化和用户体验
|
|
|
4. 与现有架构的一致性
|
|
|
|
|
|
-**最后更新**: 2025-06-01 (Cd预测功能集成)
|
|
|
+**最后更新**: 2025-06-14 (新增数据库导入脚本开发规范和农田数据模型)
|