🌇 Scoring System / 打分系统
本工具的“日落/火烧云指数”是一个启发式(heuristic)的加权评分(0–100)。我们先在「日落前后 ±窗口」内汇总气象要素(平均/最小/最大),
再把各要素标准化到 0–1 之间(得到 s
),与权重 w
相乘求和,最后×100 得出总分。
The "Sunset Score" is a heuristic weighted score (0–100). We aggregate weather variables in a ±window around sunset,
normalize each factor to [0–1] as s
, weight them by w
, sum them, then ×100.
🧭 Pipeline / 处理流程
- 取数 / Data:从 Open-Meteo 获取逐小时的
cloudcover[_low/_mid/_high]
、precipitation_probability
、visibility
、wind_speed_10m
。 - 时间窗 / Window:以天文计算的日落时间为中心,取 ±window 分钟的小时索引集合(默认 ±90 分)。
- 聚合 / Aggregate:对窗口内各要素求 平均(并保留 min / max 供展示)。
- 标准化 / Normalize:把每个聚合后的要素转换到 [0,1] 得分
s
(见下文“标准化函数”)。 - 加权求和 / Weighted sum:
Score = 100 × Σ ( wi × si )
。 - 分级标签 / Label:基于总分给出 “🔥 Fire / Great / Good / Fair / Poor”。
注:如果有的要素缺失,我们使用中性值(如 0.5 或 0.6)并在详情中标注“无数据”(No data)。
📐 Normalization / 标准化函数
1) 三角函数 tri:
tri(x, m, w) = clamp( 1 - |x - m| / w , 0 , 1 ) /* m: 理想值(optimal value),w: 可容忍宽度(tolerance) 当 x=m 得 1;偏离 m 在 w 内线性下降到 0;超出 w 为 0 */用途:高云(m=50, w=40)、中云(m=40, w=35)、风速(m=4 m/s, w=4)。
2) 低云(越少越好):
s_low = 1 - tri( lowCloudPct , 20 , 25 ) /* 约 0–20% 更利于地平线通透,因此低云越多扣分越高 */
3) 降水概率(越小越好):
s_precip = 1 - clamp( precipProb / 100 , 0 , 1 )
4) 能见度(越大越好):
s_vis = clamp( ( visKm - 5 ) / 10 , 0 , 1 ) /* 5 km 及以下趋近 0;15 km 及以上趋近 1;中间线性过渡 */
5) 气溶胶(占位):
s_aod = 0.6 // 尚未接入 AOD/PM2.5 数据时的中性值
百分比数据兼容 0–1/0–100 两种来源:若检测到最大值 ≤ 1.01,则×100 归一到百分比。
⚖️ Weights / 权重
Factor / 因子 | Weight w | Rationale / 理由 |
---|---|---|
High cloud / 高云 | 0.35 | 高层卷云是色彩“画布”,适中覆盖最佳。 |
Mid cloud / 中云 | 0.25 | 增强层次与纹理,过多会遮光。 |
Low cloud / 低云 | 0.15 | 过厚会挡住地平线,少量可反射。 |
Precipitation / 降水概率 | 0.10 | 降水越少越利于观测与拍摄。 |
Visibility / 能见度 | 0.07 | 高能见度有助于颜色纯净与远景层次。 |
Wind / 风速 | 0.08 | 适中风速利于云形态;过强会吹散。 |
Aerosol / 气溶胶 | 0.00 | 暂未接入数据,默认不计。 |
权重可在首页的“权重调整/Weight”区域(若开启)进行微调;不同地区/季节可尝试略作差异化。
🧮 Final Score / 最终公式
Score = 100 × Σ ( w_i × s_i ) where s_i ∈ [0, 1], w_i ≥ 0
等级阈值(可调整):≥85 Fire、≥70 Great、≥55 Good、≥40 Fair、否则 Poor。
🔎 Worked Example / 计算示例
假设窗口平均:高云 58%,中云 35%,低云 12%,降水概率 20%,能见度 12 km,风速 5 m/s。
Factor | Formula | s | w | Contribution (=w×s×100) |
---|---|---|---|---|
High | tri(58, 50, 40) | 0.80 | 0.35 | 28.0 |
Mid | tri(35, 40, 35) | 0.86 | 0.25 | 21.5 |
Low | 1 - tri(12, 20, 25) | 0.52 | 0.15 | 7.8 |
Precip | 1 - 0.20 | 0.80 | 0.10 | 8.0 |
Vis | clamp((12-5)/10) | 0.70 | 0.07 | 4.9 |
Wind | tri(5, 4, 4) | 0.75 | 0.08 | 6.0 |
Total | — | — | — | 76.2 ≈ 76 |
以上仅为示例,实际数值以你的地点和时段的窗口平均为准。缺失数据将使用中性值(如 s=0.5/0.6)并在详情里注明。