单元分类功能已成功集成到项目中,提供基于点位数据的单元h_xtfx值计算功能。该功能使用反距离加权插值算法,根据五万亩调查数据中的点位信息来计算各单元的土壤环境质量类别(h_xtfx)。
无严格管控类点位时:
存在严格管控类点位时:
GET /api/unit-grouping/h_xtfx
响应示例:
{
"success": true,
"data": {
"1": "优先保护类",
"2": "安全利用类",
"3": null,
"4": "严格管控类"
},
"statistics": {
"total_units": 1000,
"units_with_data": 856,
"units_without_data": 144,
"category_distribution": {
"优先保护类": 324,
"安全利用类": 432,
"严格管控类": 100
},
"point_distribution": {
"优先保护类": 1200,
"安全利用类": 800,
"严格管控类": 150
}
}
}
GET /api/unit-grouping/statistics
GET /api/unit-grouping/unit/{unit_id}
GET /api/unit-grouping/points/statistics
响应示例:
{
"success": true,
"total_points": 2150,
"distribution": {
"优先保护类": {
"count": 1200,
"percentage": 55.81
},
"安全利用类": {
"count": 800,
"percentage": 37.21
},
"严格管控类": {
"count": 150,
"percentage": 6.98
}
}
}
GET /api/unit-grouping/units/batch?unit_ids=1&unit_ids=2&unit_ids=3
响应示例:
{
"success": true,
"total_requested": 3,
"total_found": 2,
"data": [
{
"gid": 1,
"BSM": "440200001",
"PXZQMC": "广东省",
"CXZQMC": "韶关市",
"SUM_NYDTBM": 1234.56,
"Shape_Area": 987654.32
}
]
}
GET /api/unit-grouping/points/by-area?area_name=乐昌市
响应示例:
{
"success": true,
"area_name": "乐昌市",
"total_points": 125,
"h_xtfx_distribution": {
"优先保护类": 80,
"安全利用类": 35,
"严格管控类": 10
},
"data": [
{
"id": 1,
"dwmc": "LC001",
"xmc": "乐昌市",
"zmc": "乐城街道",
"cmc": "某村",
"h_xtfx": "优先保护类",
"lat": 25.123456,
"lon": 113.654321,
"ph": 6.5
}
]
}
GET /api/unit-grouping/database/summary
响应示例:
{
"success": true,
"summary": {
"total_units": 1000,
"total_points": 2150,
"points_with_h_xtfx": 2150,
"h_xtfx_categories": 3,
"point_distribution": {
"优先保护类": 1200,
"安全利用类": 800,
"严格管控类": 150
}
}
}
app/
├── api/
│ └── unit_grouping.py # API接口定义
├── services/
│ └── unit_grouping_service.py # 业务逻辑服务
├── models/
│ └── orm_models.py # 数据模型(已存在)
└── main.py # 主应用(已更新)
确保已安装所需的Python包:
# 使用conda环境
conda env create -f environment.yml
conda activate your_env_name
# 或使用pip(如果有requirements.txt)
pip install shapely
# 在项目根目录下运行
uvicorn main:app --reload
# 或使用演示脚本
python scripts/demos/unit_grouping_demo.py
打开浏览器访问: http://localhost:8000/docs
# 运行集成测试
python tests/integration/test_unit_grouping.py
unit_ceil表: 单元几何数据
gid
: 单元IDgeom
: 几何信息
fifty_thousand_survey_data表: 五万亩调查数据
id
: 点位IDgeom
: 点位几何信息h_xtfx
: 土壤环境质量类别传统SQL方式:
# 原始SQL查询
unit_query = text("SELECT gid, ST_AsBinary(geom) as geom FROM unit_ceil")
unit_result = self.db_session.execute(unit_query)
unit_rows = unit_result.fetchall()
ORM方式:
# 使用ORM查询
unit_query = self.db_session.query(
UnitCeil.gid,
func.ST_AsBinary(UnitCeil.geom).label('geom')
)
unit_rows = unit_query.all()
func.count()
和group_by()
filter(Model.id.in_(ids))
filter()
和isnot(None)
query().count()
所有错误都会返回适当的HTTP状态码和错误信息。
未来可以考虑添加:
app/api/unit_grouping.py
app/services/unit_grouping_service.py
tests/integration/test_unit_grouping.py
scripts/demos/unit_grouping_demo.py
如有问题或建议,请联系开发团队。