Open-Meteo 是开源、免费、无需注册、无API Key的气象/海洋预报API项目,聚合全球多家官方气象机构的数值预报模型,统一封装成简单HTTP接口,返回JSON/CSV,前端GIS项目(OpenLayers、deck.gl)可以直接调用点位的海洋数据。
开源:后端代码开源,支持本地私有化部署;协议 CC BY 4.0,使用时需要注明来源。
✅ 核心特点
- 不用申请key,GET直接请求
非商用:每日最多1万次请求免费;超过额度、商用需要订阅。 - 多模型自动融合 best_match
自动根据经纬度,挑选当前位置分辨率最高的模型;也可以手动指定 ECMWF / GFS / ICON 等模型。 - 时间粒度:小时级 ,预报最长16天;历史再分析数据可追溯到1940年(ERA5)。
- 支持多输出格式:JSON(默认)、CSV、XLSX。
- 源码开源,你可以自建服务,不用依赖官方服务器。
📚 数据源(来自各国官方气象中心)
ECMWF欧洲中期预报中心、NOAA、DWD德国气象局、法国气象局Météo-France、日本气象厅JMA、中国气象局CMA、UK Met Office等30+套数值模式,每天拉取TB级原始数据做统一预处理、插值、时间对齐。
🌊 Marine Weather API(海洋接口,对你最关键!)
端点:
[https://api.open-meteo.com/v1/marine](https://api.open-meteo.com/v1/marine)包含洋流 ocean_current(你之前ECCO/HYCOM对比的场景)+海浪
海洋变量列表
| 参数 | 含义 | 说明 |
|---|---|---|
ocean_current_velocity |
洋流流速 | km/h、m/s、knots可选 |
ocean_current_direction |
洋流流向 | 洋流往哪个方向流,0=向北,90=向东 |
| wave_height | 有效浪高 | 米 |
| wave_direction | 浪向 | 波浪从哪个方向来 |
| wave_period | 波浪周期 | 秒 |
⚠️ 重要限制(和ECCO/HYCOM对比)
- Open-Meteo 的洋流是点位时序数据,不是网格化栅格/GeoJSON !
✅ 适合:查询某个坐标点的洋流流速流向,做单点探针。
❌ 不适合:直接拿到全球海洋网格,做 OpenLayers / deck.gl 大面积洋流粒子场渲染 (这点和ECCO、HYCOM完全不一样) 如果你想要整片海域的连续洋流场,Open-Meteo不适合,仍然需要ECCO/HYCOM/CMEMS的网格化NetCDF。 - 空间分辨率:全球约 10km级别,近海高一点;没有ECCO那么精细。
- 只提供预报场,历史海洋再分析数据弱于ERA5/ECCO。
🌤️ 其他API模块
- Forecast 普通气象API:气温、降水、10m风(U/V风分量,适合风场可视化)、湿度、气压、土壤参数
- Ensemble集合预报:ECMWF/GFS集合成员,看预报不确定性
- Historical历史再分析:ERA5,1940至今,小时气象历史
- Flood API:全球河流径流洪水预报
🧪 最简调用示例(浏览器/JS直接请求,可嵌入OpenLayers)
查询 经度120°E,纬度30°N(东海),获取小时洋流:
[https://api.open-meteo.com/v1/marine?latitude=30&longitude=120&hourly=ocean_current_velocity,ocean_current_direction&timezone=Asia%2FShanghai](https://api.open-meteo.com/v1/marine?latitude=30&longitude=120&hourly=ocean_current_velocity,ocean_current_direction&timezone=Asia%2FShanghai)
复制浏览器打开,直接返回JSON。
JS fetch 示例
js
fetch(`[https://api.open-meteo.com/v1/marine?latitude=30&longitude=120&hourly=ocean_current_velocity,ocean_current_direction&timezone=Asia/Shanghai](https://api.open-meteo.com/v1/marine?latitude=30&longitude=120&hourly=ocean_current_velocity,ocean_current_direction&timezone=Asia/Shanghai)`)
.then(res=>res.json())
.then(data=>{
console.log(data.hourly.time);
console.log(data.hourly.ocean_current_velocity);
console.log(data.hourly.ocean_current_direction);
})
在OpenLayers中:可以监听地图点击,拿到点击经纬度,调用这个接口,弹窗展示该点洋流。
⚖️ Open-Meteo VS ECCO / HYCOM / CMEMS
| Open-Meteo | ECCO | HYCOM | CMEMS | |
|---|---|---|---|---|
| 数据类型 | 点位时序API(JSON) | NetCDF网格化海洋再分析 | NetCDF全球海洋预报 | 网格化海洋多变量 |
| 洋流获取方式 | 单点查询 | 下载网格文件,本地解析 | 下载网格文件 | OPeNDAP/文件下载 |
| 前端可视化 | 单点探针,不能大面积粒子场 | ✅ 可提取u/v洋流,ol-wind/deck.gl粒子 | ✅ | ✅ |
| 使用门槛 | 极低,http直接调用 | 高,NetCDF预处理 | 高 | 中 |
| 用途 | 地图点击查单点海洋/气象 | 历史海洋研究、全域洋流可视化 | 实时海洋模拟 | 业务海洋产品 |
✅ 适合你的场景
- OpenLayers地图:点击海洋区域,弹窗显示该点洋流流速流向
- 快速原型,不用下载几十GB NetCDF
- 同时叠加海面风场(普通forecast接口的u/v风)
- 网页前端直接请求,后端不用搭数据服务
❌ 不适合你的场景
你之前目标:全局/大面积动态洋流粒子效果(ol-wind/deck.gl)
Open-Meteo无法一次性返回整片海域的u、v洋流网格,只能逐个点查询,不适合粒子流场渲染,这个场景继续用 HYCOM / ECCO / CMEMS。
⚠️ 注意事项
- 调用限流:免费版单日1万次,高频批量请求会被限流。
- 洋流是欧拉流+潮汐+波浪综合计算的合成洋流,和纯海流模型定义略有区别。
- 数据版权:CC BY 4.0,公开展示项目必须标注Open-Meteo以及原始数据源。