Files
PolyWeather/src/data_collection/city_risk_profiles.py
T

62 lines
2.0 KiB
Python

# 城市温度市场 - 数据偏差风险档案
# 基于 METAR 机场站与市区实际温度的系统性差异
from src.data_collection.city_registry import CITY_REGISTRY
# Generate profiles from registry
CITY_RISK_PROFILES = {
cid: {
"risk_level": info["risk_level"],
"risk_emoji": info["risk_emoji"],
"icao": info["icao"],
"airport_name": info["airport_name"],
"distance_km": info["distance_km"],
"warning": info["warning"],
# Backwards compatibility flags if needed
"typical_bias_f": info.get("typical_bias_f", 0.0),
"elevation_diff_m": info.get("elevation_diff_m", 0),
"bias_direction": info.get("bias_direction", None),
"season_notes": info.get("season_notes", None),
}
for cid, info in CITY_REGISTRY.items()
}
def get_city_risk_profile(city: str) -> dict:
"""获取城市的风险档案"""
city_lower = city.lower().strip()
city_key = city_lower
return CITY_RISK_PROFILES.get(city_key)
def format_risk_warning(profile: dict, temp_symbol: str) -> str:
"""格式化风险警告信息"""
if not profile:
return ""
lines = []
# 风险等级标题
risk_labels = {"high": "高危", "medium": "中危", "low": "低危"}
risk_label = risk_labels.get(profile["risk_level"], "未知")
lines.append(f"⚠️ <b>数据偏差风险</b>: {profile['risk_emoji']} {risk_label}")
# 机场信息
lines.append(f" 📍 机场: {profile['airport_name']} ({profile['icao']})")
lines.append(f" 📏 距市区: {profile['distance_km']}km")
# 典型偏差
if profile["typical_bias_f"] >= 1.0:
lines.append(f" 📊 偏差: ±{profile['typical_bias_f']}{temp_symbol}")
# 偏差方向说明
if profile["bias_direction"]:
lines.append(f" 💡 {profile['bias_direction']}")
# 特别警告
if profile["warning"]:
lines.append(f" 🚨 {profile['warning']}")
return "\n".join(lines)