批量下载区域平均数据
以下载山西省2025年逐日区域平均温度、降雨数据为例
需求:下载山西省(adcode 140000)2025 年逐日各要素的区域平均值。
历史数据模型:era5_seamless
以 Python 代码为例,分四步完成:
什么是区域平均
气象格点数据的分辨率约为 25km,一个区县范围内通常覆盖多个格点。区域平均(area_average: true)表示将该行政区划边界内所有格点的数值取空间平均,输出为一行一个区划的时序数据,而非逐格点数据。
相比逐格点输出,区域平均的优势:
- 数据量大幅减少,下载和处理更高效
- 代表整个行政区的综合气象状况,适合统计分析
区域平均仅支持以行政区划(adcodes)指定范围,不支持自定义经纬度点位或网格范围。
第一步:创建批量下载任务
直接指定山西省的 adcode(140000)。行政区划 adcode 可从平台提供的 CSV 文件中查询:省/直辖市使用 province.csv,地级市使用 city.csv,区县使用 district.csv。
与普通点位下载相比,只需将 area_average 设为 true。
import time
import zipfile
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.mirror-earth.com"
# 山西省 adcode(可从 province.csv 中查询)
adcodes = ["140000"]
headers = {
"X-API-Key": API_KEY,
"Content-Type": "application/json",
}
payload = {
"domain": "era5_seamless",
"hourly": [],
"daily": ["temperature_2m_mean", "rain_sum"],
"monthly": [],
"time_range": {
"type": "date_range",
"start": "2025-01-01",
"end": "2025-12-31",
},
"area": {
"type": "point",
"adcodes": adcodes,
},
"timezone": "Asia/Shanghai",
"area_average": True, # 开启区域平均
}
res = requests.post(f"{BASE_URL}/api/tasks/export", json=payload, headers=headers)
res.raise_for_status()
task_id = res.json()["data"]["task_id"]
print(f"任务已创建,task_id: {task_id}")
若需要下载多个省份,将 adcodes 改为包含多个 adcode 的列表即可,如 adcodes = ["140000", "150000"]。
第二步:轮询等待任务完成
output_file = None
while True:
res = requests.get(f"{BASE_URL}/api/tasks/{task_id}/status", headers=headers)
res.raise_for_status()
data = res.json()["data"]
status = data["status"]
progress = data.get("progress_percent", 0)
print(f"任务状态:{status},进度:{progress}%")
if status == "completed":
output_file = data["output_file"]
break
elif status in ("failed", "cancelled"):
raise RuntimeError(f"任务异常,状态:{status}")
time.sleep(10)
第三步:下载并解压任务结果
download_url = f"{BASE_URL}/user_downloads/{output_file}"
res = requests.get(download_url, headers=headers, stream=True)
res.raise_for_status()
zip_path = "shanxi_avg_2025.zip"
with open(zip_path, "wb") as f:
for chunk in res.iter_content(chunk_size=8192):
f.write(chunk)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall("shanxi_avg_2025")
print("下载完成,数据已解压到 shanxi_avg_2025/")
完整代码
import time
import zipfile
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.mirror-earth.com"
headers = {
"X-API-Key": API_KEY,
"Content-Type": "application/json",
}
# ── 1. 指定山西省 adcode(可从 province.csv 中查询)────────────
adcodes = ["140000"]
# ── 2. 创建任务(area_average=True)────────────────────────────
payload = {
"domain": "era5_seamless",
"hourly": [],
"daily": ["temperature_2m_mean", "rain_sum"],
"monthly": [],
"time_range": {
"type": "date_range",
"start": "2025-01-01",
"end": "2025-12-31",
},
"area": {
"type": "point",
"adcodes": adcodes,
},
"timezone": "Asia/Shanghai",
"area_average": True,
}
res = requests.post(f"{BASE_URL}/api/tasks/export", json=payload, headers=headers)
res.raise_for_status()
task_id = res.json()["data"]["task_id"]
print(f"任务已创建,task_id: {task_id}")
# ── 3. 轮询任务进度 ─────────────────────────────────────────────
output_file = None
while True:
res = requests.get(f"{BASE_URL}/api/tasks/{task_id}/status", headers=headers)
res.raise_for_status()
data = res.json()["data"]
status = data["status"]
progress = data.get("progress_percent", 0)
print(f"任务状态:{status},进度:{progress}%")
if status == "completed":
output_file = data["output_file"]
break
elif status in ("failed", "cancelled"):
raise RuntimeError(f"任务异常,状态:{status}")
time.sleep(10)
# ── 4. 下载并解压结果 ───────────────────────────────────────────
download_url = f"{BASE_URL}/user_downloads/{output_file}"
res = requests.get(download_url, headers=headers, stream=True)
res.raise_for_status()
zip_path = "shanxi_avg_2025.zip"
with open(zip_path, "wb") as f:
for chunk in res.iter_content(chunk_size=8192):
f.write(chunk)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall("shanxi_avg_2025")
print("下载完成,数据已解压到 shanxi_avg_2025/")
模型列表
只有这些模型支持区域平均数据
预报模型
| domain | 来源 | 分辨率 | 预测时长 | 备注 |
|---|---|---|---|---|
| cma | 中国 | 12.5km | 4.5天 | - |
| gem | 加拿大 | 15km | 10天 | - |
| icon | 德国 | 11km | 7天 | - |
| ecmwf | 欧洲 | 25km | 15天 | - |
| ecmwf_ifs | 欧洲 | 9km | 15天 | - |
| jma | 日本 | 50km | 11天 | - |
| meteofrance | 法国 | 25km | 4天 | - |
| gfs | 美国 | 13km/25km | 16天 | - |
| kma | 韩国 | 12km | 12天 | - |
| ukmo | 英国 | 10km | 7天 | - |
| aifs | 欧洲 | 25km | 15天 | AI预报 |
| graphcast | 美国 | 25km | 16天 | AI预报 |
历史观测
| domain | 来源 | 类型 | 分辨率 | 时间范围/备注 |
|---|---|---|---|---|
| era5_seamless | 欧洲 | 再分析 | 25km | 1940年至今 |
要素列表
逐小时要素
| 要素名 | 说明 | 单位 |
|---|---|---|
| temperature_2m | 2米气温 | °C |
| dew_point_2m | 2米露点温度 | °C |
| relative_humidity_2m | 2米相对湿度 | % |
| vapour_pressure_deficit | 饱和水汽压差 | hPa |
| soil_temperature_0_to_7cm | 0-7cm土壤温度 | °C |
| soil_temperature_7_to_28cm | 7-28cm土壤温度 | °C |
| soil_temperature_28_to_100cm | 28-100cm土壤温度 | °C |
| soil_temperature_100_to_255cm | 100-255cm土壤温度 | °C |
| soil_moisture_0_to_7cm | 0-7cm土壤湿度 | m3/m3 |
| soil_moisture_7_to_28cm | 7-28cm土壤湿度 | m3/m3 |
| soil_moisture_28_to_100cm | 28-100cm土壤湿度 | m3/m3 |
| soil_moisture_100_to_255cm | 100-255cm土壤湿度 | m3/m3 |
| soil_moisture_index_0_to_7cm | 0-7cm土壤湿度指数 | - |
| soil_moisture_index_7_to_28cm | 7-28cm土壤湿度指数 | - |
| soil_moisture_index_28_to_100cm | 28-100cm土壤湿度指数 | - |
| soil_moisture_index_100_to_255cm | 100-255cm土壤湿度指数 | - |
| wind_speed_10m | 10米风速 | m/s |
| wind_speed_100m | 100米风速 | m/s |
| wind_gusts_10m | 10米阵风 | m/s |
| precipitation | 降水量 | mm |
| rain | 降雨量 | mm |
| snowfall | 降雪量 | cm |
| snow_depth | 积雪深度 | m |
| cloud_cover | 总云量 | % |
| cloud_cover_low | 低云量 | % |
| cloud_cover_mid | 中云量 | % |
| cloud_cover_high | 高云量 | % |
| shortwave_radiation | 短波辐射 | W/m2 |
| direct_radiation | 直接辐射 | W/m2 |
| diffuse_radiation | 散射辐射 | W/m2 |
| pressure_msl | 海平面气压 | hPa |
| boundary_layer_height | 边界层高度 | m |
| sunshine_duration | 日照时长 | s |
| et0_fao_evapotranspiration | FAO参考作物蒸散发 | mm |
逐日要素
| 要素名 | 说明 | 单位 |
|---|---|---|
| temperature_2m_max | 2米气温最大值 | °C |
| temperature_2m_mean | 2米气温平均值 | °C |
| temperature_2m_min | 2米气温最小值 | °C |
| dew_point_2m_max | 2米露点温度最大值 | °C |
| dew_point_2m_mean | 2米露点温度平均值 | °C |
| dew_point_2m_min | 2米露点温度最小值 | °C |
| relative_humidity_2m_max | 2米相对湿度最大值 | % |
| relative_humidity_2m_mean | 2米相对湿度平均值 | % |
| relative_humidity_2m_min | 2米相对湿度最小值 | % |
| vapour_pressure_deficit_max | 饱和水汽压差最大值 | hPa |
| vapour_pressure_deficit_mean | 饱和水汽压差平均值 | hPa |
| soil_temperature_0_to_7cm_mean | 0-7cm土壤温度平均值 | °C |
| soil_temperature_7_to_28cm_mean | 7-28cm土壤温度平均值 | °C |
| soil_temperature_28_to_100cm_mean | 28-100cm土壤温度平均值 | °C |
| soil_temperature_100_to_255cm_mean | 100-255cm土壤温度平均值 | °C |
| soil_moisture_0_to_7cm_mean | 0-7cm土壤湿度平均值 | m3/m3 |
| soil_moisture_7_to_28cm_mean | 7-28cm土壤湿度平均值 | m3/m3 |
| soil_moisture_28_to_100cm_mean | 28-100cm土壤湿度平均值 | m3/m3 |
| soil_moisture_100_to_255cm_mean | 100-255cm土壤湿度平均值 | m3/m3 |
| soil_moisture_index_0_to_7cm_mean | 0-7cm土壤湿度指数平均值 | - |
| soil_moisture_index_7_to_28cm_mean | 7-28cm土壤湿度指数平均值 | - |
| soil_moisture_index_28_to_100cm_mean | 28-100cm土壤湿度指数平均值 | - |
| soil_moisture_index_100_to_255cm_mean | 100-255cm土壤湿度指数平均值 | - |
| wind_speed_10m_max | 10米风速最大值 | m/s |
| wind_speed_10m_mean | 10米风速平均值 | m/s |
| wind_speed_10m_min | 10米风速最小值 | m/s |
| wind_speed_100m_max | 100米风速最大值 | m/s |
| wind_speed_100m_mean | 100米风速平均值 | m/s |
| wind_speed_100m_min | 100米风速最小值 | m/s |
| wind_gusts_10m_max | 10米阵风最大值 | m/s |
| wind_gusts_10m_mean | 10米阵风平均值 | m/s |
| wind_gusts_10m_min | 10米阵风最小值 | m/s |
| precipitation_sum | 降水量总和 | mm |
| rain_sum | 降雨量总和 | mm |
| snowfall_sum | 降雪量总和 | cm |
| snow_depth_max | 积雪深度最大值 | m |
| snow_depth_mean | 积雪深度平均值 | m |
| snow_depth_min | 积雪深度最小值 | m |
| cloud_cover_max | 总云量最大值 | % |
| cloud_cover_mean | 总云量平均值 | % |
| cloud_cover_min | 总云量最小值 | % |
| cloud_cover_low_max | 低云量最大值 | % |
| cloud_cover_low_mean | 低云量平均值 | % |
| cloud_cover_low_min | 低云量最小值 | % |
| cloud_cover_mid_max | 中云量最大值 | % |
| cloud_cover_mid_mean | 中云量平均值 | % |
| cloud_cover_mid_min | 中云量最小值 | % |
| cloud_cover_high_max | 高云量最大值 | % |
| cloud_cover_high_mean | 高云量平均值 | % |
| cloud_cover_high_min | 高云量最小值 | % |
| shortwave_radiation_sum | 短波辐射总量 | MJ/m2 |
| direct_radiation_sum | 直接辐射总量 | MJ/m2 |
| diffuse_radiation_sum | 散射辐射总量 | MJ/m2 |
| pressure_msl_max | 海平面气压最大值 | hPa |
| pressure_msl_mean | 海平面气压平均值 | hPa |
| pressure_msl_min | 海平面气压最小值 | hPa |
| boundary_layer_height_max | 边界层高度最大值 | m |
| boundary_layer_height_mean | 边界层高度平均值 | m |
| boundary_layer_height_min | 边界层高度最小值 | m |
| sunshine_duration | 日照时长 | s |
| et0_fao_evapotranspiration_sum | FAO参考作物蒸散发总量 | mm |
逐月要素
逐月要素名称与逐日完全相同,聚合方式一致。