Skip to Content

镜像地球开放平台

批量下载区域平均数据

以下载山西省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.5km4.5天-
gem加拿大15km10天-
icon德国11km7天-
ecmwf欧洲25km15天-
ecmwf_ifs欧洲9km15天-
jma日本50km11天-
meteofrance法国25km4天-
gfs美国13km/25km16天-
kma韩国12km12天-
ukmo英国10km7天-
aifs欧洲25km15天AI预报
graphcast美国25km16天AI预报

历史观测

domain来源类型分辨率时间范围/备注
era5_seamless欧洲再分析25km1940年至今

要素列表

逐小时要素

要素名说明单位
temperature_2m2米气温°C
dew_point_2m2米露点温度°C
relative_humidity_2m2米相对湿度%
vapour_pressure_deficit饱和水汽压差hPa
soil_temperature_0_to_7cm0-7cm土壤温度°C
soil_temperature_7_to_28cm7-28cm土壤温度°C
soil_temperature_28_to_100cm28-100cm土壤温度°C
soil_temperature_100_to_255cm100-255cm土壤温度°C
soil_moisture_0_to_7cm0-7cm土壤湿度m3/m3
soil_moisture_7_to_28cm7-28cm土壤湿度m3/m3
soil_moisture_28_to_100cm28-100cm土壤湿度m3/m3
soil_moisture_100_to_255cm100-255cm土壤湿度m3/m3
soil_moisture_index_0_to_7cm0-7cm土壤湿度指数-
soil_moisture_index_7_to_28cm7-28cm土壤湿度指数-
soil_moisture_index_28_to_100cm28-100cm土壤湿度指数-
soil_moisture_index_100_to_255cm100-255cm土壤湿度指数-
wind_speed_10m10米风速m/s
wind_speed_100m100米风速m/s
wind_gusts_10m10米阵风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_evapotranspirationFAO参考作物蒸散发mm

逐日要素

要素名说明单位
temperature_2m_max2米气温最大值°C
temperature_2m_mean2米气温平均值°C
temperature_2m_min2米气温最小值°C
dew_point_2m_max2米露点温度最大值°C
dew_point_2m_mean2米露点温度平均值°C
dew_point_2m_min2米露点温度最小值°C
relative_humidity_2m_max2米相对湿度最大值%
relative_humidity_2m_mean2米相对湿度平均值%
relative_humidity_2m_min2米相对湿度最小值%
vapour_pressure_deficit_max饱和水汽压差最大值hPa
vapour_pressure_deficit_mean饱和水汽压差平均值hPa
soil_temperature_0_to_7cm_mean0-7cm土壤温度平均值°C
soil_temperature_7_to_28cm_mean7-28cm土壤温度平均值°C
soil_temperature_28_to_100cm_mean28-100cm土壤温度平均值°C
soil_temperature_100_to_255cm_mean100-255cm土壤温度平均值°C
soil_moisture_0_to_7cm_mean0-7cm土壤湿度平均值m3/m3
soil_moisture_7_to_28cm_mean7-28cm土壤湿度平均值m3/m3
soil_moisture_28_to_100cm_mean28-100cm土壤湿度平均值m3/m3
soil_moisture_100_to_255cm_mean100-255cm土壤湿度平均值m3/m3
soil_moisture_index_0_to_7cm_mean0-7cm土壤湿度指数平均值-
soil_moisture_index_7_to_28cm_mean7-28cm土壤湿度指数平均值-
soil_moisture_index_28_to_100cm_mean28-100cm土壤湿度指数平均值-
soil_moisture_index_100_to_255cm_mean100-255cm土壤湿度指数平均值-
wind_speed_10m_max10米风速最大值m/s
wind_speed_10m_mean10米风速平均值m/s
wind_speed_10m_min10米风速最小值m/s
wind_speed_100m_max100米风速最大值m/s
wind_speed_100m_mean100米风速平均值m/s
wind_speed_100m_min100米风速最小值m/s
wind_gusts_10m_max10米阵风最大值m/s
wind_gusts_10m_mean10米阵风平均值m/s
wind_gusts_10m_min10米阵风最小值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_sumFAO参考作物蒸散发总量mm

逐月要素

逐月要素名称与逐日完全相同,聚合方式一致。

Previous

逐月要素支持

Next

批量下载预报数据