数据来源与更新说明
本文说明页面上各数值从何而来、何时更新,以及「刷新页面后概率变化」的原因。
核心结论:你在某时某刻打开或刷新页面,系统会实时请求当前最新的 Open-Meteo 未来 5 天 × 24 小时预报,并据此计算每个小时的云海/日出概率。数值模式通常每数小时同化一次新观测,因此同一目标时刻的概率会随时间推移而更新,近 24–48 小时变化最大。
数据源一览
| 数据 | 来源 | 用途 | 更新频率 |
|---|---|---|---|
| 逐小时气象预报 | Open-Meteo(ECMWF IFS 等数值模式) | 湿度、分层云量、降水、风速、能见度 → 云海/日出评分 | 随模式运行更新;页面每次选点/刷新重新拉取 |
| 观景点海拔 | Open-Meteo Elevation(Copernicus DEM 90m) | 云底高度与观景点海拔匹配 | 静态地形,缓存 24h |
| 卫星红外云图 | NASA GIBS · Himawari Band13 | 地图云层蒙版 + 区域云量修正因子 | 观测型;无未来图,可回溯最近可用时刻 |
| 地图 / POI | 天地图 API 4.0(浏览器端) | 底图、POI 搜索、标记定位 | 实时检索 |
| 精选观景点 | 本地 JSON(五女山、大黑山等) | 精确坐标、海拔、季节权重 | 随应用版本发布 |
| 日出时刻 | Open-Meteo daily sunrise + 后端天文计算 | 日出窗口判定 | 随预报一并更新 |
Open-Meteo 请求内容
每次预测对观景点经纬度请求 forecast_days=5、时区 Asia/Shanghai,共 120 个逐小时点:
GET https://api.open-meteo.com/v1/forecast
?latitude=…&longitude=…
&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,
precipitation,cloud_cover,cloud_cover_low,cloud_cover_mid,
cloud_cover_high,wind_speed_10m,visibility
&daily=sunrise,sunset
&forecast_days=5&timezone=Asia/Shanghai
字段与预测的关系
| 字段 | 在界面中的体现 |
|---|---|
relative_humidity_2m | 因子「近地面湿度」;云海主驱动 |
cloud_cover_low / mid / high | 低/中/高云量因子;右侧天气快照 |
temperature_2m + dew_point_2m | 估算云底高度 (T−Td)×125 m |
precipitation | 近 48h 累计降水 →「雨后放晴」因子 |
wind_speed_10m | 风速因子(微风利于云海维持) |
visibility | 日出清晰度相关因子 |
注意:cloudsea.probability 并非 Open-Meteo 直接提供,而是本系统根据上述字段本地计算的云海适宜度。
刷新与缓存
- 切换观景点 / POI / 拖动标记:立即发起新预测请求,获取最新 5 天预报。
- 刷新浏览器页面:默认重新加载五女山;若已选其他地点需重新搜索。每次加载均拉取当时最新 Open-Meteo 数据。
- 后端 Redis 缓存:同一坐标预报缓存约 30 分钟(生产环境可配),减轻 API 压力;缓存期内多次请求可能返回相同预报快照。
- 时间轴某小时:展示的是该小时预报场下的概率;相邻小时因湿度/云量不同,概率可以相差很大。
- 卫星云图:与逐小时预报独立;选中时刻若无观测则显示最近回溯图,并在蒙版标注 UTC 时间与回溯小时。
为何每小时「可能会不一样」?
有两层含义:
① 时间轴上不同小时:各小时对应不同的预报气象场(如 5:00 与 6:00 湿度、云量不同),概率自然不同。
② 不同日期重复查看同一小时:数值天气预报会随新观测不断修正。例如今天看「明早 6 点」与明天再看「明早 6 点」,模式可能已更新,概率会变化——这是预报本身的特性,不代表系统错误。