暴雨地震灾害链HTTP请求

This commit is contained in:
wzy-warehouse
2026-06-06 08:38:19 +08:00
parent 844fa7d719
commit eddbdaca1f
11 changed files with 551 additions and 38 deletions
+41 -8
View File
@@ -17,21 +17,20 @@ logger = get_logger("dbn")
class RainfallDBN:
"""暴雨灾害链DBN模型"""
# 灾害概率→离散等级的阈值映射
# 灾害概率→等级的阈值映射
HAZARD_LEVEL_THRESHOLDS = [
(0.6, 'very_high'),
(0.4, 'high'),
(0.2, 'medium'),
(0.05, 'low'),
(0.0, 'none'),
(0.7, ''),
(0.5, '较高'),
(0.3, ''),
(0.0, ''),
]
def _probability_to_level(self, prob: float) -> str:
"""将连续概率映射到离散等级"""
"""将连续概率映射到风险等级:低(<30%) / 中(30-50%) / 较高(50-70%) / 高(70%+)"""
for threshold, level in self.HAZARD_LEVEL_THRESHOLDS:
if prob >= threshold:
return level
return 'none'
return ''
def __init__(self, config_dir: Optional[str] = None):
"""
@@ -374,6 +373,40 @@ class RainfallDBN:
return results
def predict_multiple_points(self, points: List[Dict[str, Any]],
rainfall: Optional[float] = None,
duration: Optional[float] = None,
query_time: Optional[datetime] = None) -> List[Dict[str, Any]]:
"""
对已获取的点列表进行暴雨灾害预测
Args:
points: 点信息列表(已从数据库获取)
rainfall: 累计降雨量(可选)
duration: 持续时间(可选)
query_time: 查询时间(可选)
Returns:
预测结果列表
"""
results = []
for point in points:
try:
result = self.predict_single_point(
point, rainfall=rainfall, duration=duration, query_time=query_time
)
results.append(result)
except Exception as e:
logger.error(f"预测点 {point.get('id')} 失败: {e}")
results.append({
'point_id': point.get('id'),
'source_type': point.get('source_type'),
'lon': point.get('lon'),
'lat': point.get('lat'),
'error': str(e)
})
return results
def get_model_info(self) -> Dict[str, Any]:
"""
获取模型信息