MCP 开发者体验活动:连接 MCP 即可领取 3 天开发者版会员体验
立即领取应用场景
风电功率预测
archive_hres · archive_cma(30–200 m)· archive_gfs
接入文档实时预报 · 场站 15 分钟
GET /v1/forecast
import os
import requests
import pandas as pd
params = {
"latitude": 41.15,
"longitude": 114.70,
"elevation": 1450, # 场站海拔(m)
"hourly": "wind_speed_100m,wind_direction_100m,wind_gusts_10m,"
"temperature_2m,surface_pressure,relative_humidity_2m",
"models": "ecmwf_ifs",
"temporal_resolution": "minutely_15",
"forecast_days": 3,
"timezone": "Asia/Shanghai",
"apikey": os.environ["MIRROR_EARTH_API_KEY"],
}
res = requests.get("https://api.mirror-earth.com/v1/forecast", params=params, timeout=60)
res.raise_for_status()
df = pd.DataFrame(res.json()["hourly"]) # 15 分钟一行,北京时间
print(df.head())光伏功率预测
archive_hres · archive_ifs · 葵花卫星辐射
接入文档实时预报 · 斜面辐照
GET /v1/forecast
import os
import requests
import pandas as pd
params = {
"latitude": 36.40,
"longitude": 94.90,
"hourly": "global_tilted_irradiance,shortwave_radiation,"
"direct_normal_irradiance,diffuse_radiation,"
"cloud_cover_low,temperature_2m,wind_speed_10m",
"tilt": 35, # 组件倾角
"azimuth": 0, # 0 正南,-90 正东,90 正西
"models": "ecmwf_ifs",
"temporal_resolution": "minutely_15",
"forecast_days": 3,
"timezone": "Asia/Shanghai",
"apikey": os.environ["MIRROR_EARTH_API_KEY"],
}
res = requests.get("https://api.mirror-earth.com/v1/forecast", params=params, timeout=60)
res.raise_for_status()
df = pd.DataFrame(res.json()["hourly"])
print(df[["time", "global_tilted_irradiance"]].head())现货电价与负荷预测
省 / 市 / 区县区域平均 · 多模型对比
接入文档批量下载 · 省域面平均
POST /api/tasks/export
import os
import time
from datetime import date, timedelta
import requests
BASE_URL = "https://api.mirror-earth.com"
headers = {"X-API-Key": os.environ["MIRROR_EARTH_API_KEY"]}
today = date.today()
payload = {
"domain": "ecmwf_ifs",
"hourly": ["temperature_2m", "apparent_temperature", "relative_humidity_2m",
"wind_speed_100m", "shortwave_radiation", "precipitation"],
"daily": [],
"monthly": [],
"time_range": {
"type": "date_range",
"start": str(today),
"end": str(today + timedelta(days=3)),
},
"area": {"type": "point", "adcodes": ["370000", "320000"]}, # 山东、江苏
"area_average": True, # 省域面平均,不是省会点值
"time_resolution": "minutely_15",
"timezone": "Asia/Shanghai",
}
est = requests.post(f"{BASE_URL}/api/tasks/estimate", json=payload, headers=headers).json()["data"]
if est.get("error") or not est.get("estimate_id"):
raise RuntimeError(est.get("error_msg") or "预估失败")
payload["estimate_id"] = est["estimate_id"]
res = requests.post(f"{BASE_URL}/api/tasks/export", json=payload, headers=headers)
res.raise_for_status()
task_id = res.json()["data"]["task_id"]
while True:
status = requests.get(f"{BASE_URL}/api/tasks/{task_id}/status", headers=headers).json()["data"]
if status["status"] == "completed":
print(status["output_file"]) # 下载:GET /user_downloads/<output_file>
break
if status["status"] in ("failed", "cancelled"):
raise RuntimeError(status["status"])
time.sleep(10)ERA5 再分析 · 10 年逐月统计
GET /v1/archive
import os
import requests
import pandas as pd
params = {
"latitude": 41.15,
"longitude": 114.70,
"hourly": "wind_speed_100m,shortwave_radiation,temperature_2m",
"start_date": "2015-01-01",
"end_date": "2024-12-31",
"models": "era5",
"timezone": "Asia/Shanghai",
"apikey": os.environ["MIRROR_EARTH_API_KEY"],
}
res = requests.get("https://api.mirror-earth.com/v1/archive", params=params, timeout=300)
res.raise_for_status()
df = pd.DataFrame(res.json()["hourly"])
df["time"] = pd.to_datetime(df["time"])
monthly = df.set_index("time").resample("MS").agg({
"wind_speed_100m": "mean", # 月平均风速 m/s
"shortwave_radiation": lambda x: x.sum() * 3600 / 1e6, # 月辐射量 MJ/m²
"temperature_2m": "mean",
})
print(monthly.groupby(monthly.index.month).mean()) # 10 年逐月气候态示例从环境变量 MIRROR_EARTH_API_KEY 读取 API Key。
训练与上线
01
回算训练集
批量导出多个起报场,输出 init_time 与 time
time_range.type = "forecast"02
按时效切片
只保留申报时刻真实可用的起报时次与预报时效
start_hour = "12"03
实时推理
同一模型的实时预报,与训练集口径一致
temporal_resolution = minutely_15payload = {
"domain": "archive_hres",
"hourly": ["wind_speed_100m", "wind_direction_100m", "temperature_2m"],
"daily": [],
"monthly": [],
"time_range": {
"type": "forecast",
"start": "2026-01-01",
"end": "2026-03-31",
"start_hour": "00,12",
"forecast_hours": 72,
},
"area": {
"type": "point",
"locations": [
{"id": "WF01", "name": "张北风场", "lon": 114.70, "lat": 41.15},
{"id": "PV01", "name": "格尔木光伏", "lon": 94.90, "lat": 36.40},
],
},
"time_resolution": "minutely_15",
"timezone": "UTC",
"area_average": False,
}数据源
| 模型 | 标识符 | 分辨率 | 原始步长 | 风速高度 | 辐射 | 起始 |
|---|---|---|---|---|---|---|
| ECMWF IFS 9km | archive_hres | 9 km | 1 h | 10 / 100 m | GHI · DNI · DHI · GTI | 2019-01 |
| ECMWF IFS 25km | archive_ifs | 25 km | 1 h | 10 / 100 m | GHI · DNI · DHI · GTI | 2023-01 |
| NOAA GFS | archive_gfs | 25 km | 1 h | 10–100 m(7 层) | GHI · DNI · DHI · GTI | 2023-07 |
| 中国气象局 CMA | archive_cma | 12.5 km | 3 h | 10–200 m(10 层) | GHI · DNI · DHI · GTI | 2025-09 |
| 德国气象局 ICON | archive_icon | 11 km | 1 h | 10 / 80 / 120 / 180 m | GHI · DNI · DHI · GTI | 2025-09 |
| 加拿大气象局 GEM | archive_gem | 15 km | 3 h | 10 / 40 / 80 / 120 m | GHI · DNI · DHI · GTI | 2025-09 |
| 英国气象局 UKMO | archive_ukmo | 10 km | 1 h | 10 m | GHI · DNI · DHI · GTI | 2025-09 |
| ECMWF AIFS | archive_aifs | 25 km | 6 h | 10 / 100 m | GHI | 2025-09 |