Skip to Content

镜像地球开放平台

雷达拼图接入

接入全国雷达拼图(复合反射率),使用 Leaflet ImageOverlay 展示实时降水观测数据,覆盖中国及周边区域。

全国雷达拼图将分布在全国各地的天气雷达站观测数据合成为整体图像,反映实时的降水分布情况。复合反射率(Composite Reflectivity)是最常用的雷达产品,数值越高表示降水越强。

雷达数据以图片方式提供,接入流程与图片图层相同:获取最新时间 → 构建 URL → 叠加到地图。

1. 关键参数说明

参数说明
meta 接口https://api.mirror-earth.com/api/vis/radar/meta?apikey={apikey}&timezone=Asia/Shanghai
图片 URLhttps://api.mirror-earth.com/api/vis/part/radar/composite_reflectivity/{time}.webp?apikey={apikey}
雷达覆盖范围南北:15.52°N ~ 54.01°N,东西:71.97°E ~ 148.70°E
Leaflet bounds[[15.5201, 71.965], [54.0081, 148.7043]](格式:[[南, 西], [北, 东]]
更新频率约 5 分钟一帧
图片格式WebP(含透明度通道,无降水区域透明)

注意:雷达图使用 WebP 格式(不同于卫星的 JPEG),无降水区域为透明,可叠加在其他图层之上无遮挡。

2. 示例代码

import { useEffect, useRef, useState } from 'react';
import 'leaflet/dist/leaflet.css';

const API_KEY = 'YOUR_API_KEY';

// 全国雷达拼图覆盖范围:[[南, 西], [北, 东]]
const RADAR_BOUNDS: [[number, number], [number, number]] = [
  [15.5201, 71.965],
  [54.0081, 148.7043],
];

export default function RadarDemo() {
  const mapRef = useRef<HTMLDivElement>(null);
  const mapInstance = useRef<any>(null);
  const [status, setStatus] = useState('正在加载雷达数据...');

  useEffect(() => {
    if (!mapRef.current || mapInstance.current) return;

    const init = async () => {
      const L: any = await import('leaflet');
      const map = L.map(mapRef.current).setView([35.0, 110.0], 4);
      L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', {
        subdomains: ['a', 'b', 'c', 'd'],
        attribution: '© CartoDB',
      }).addTo(map);
      mapInstance.current = map;

      try {
        // 1. 获取最新雷达时间
        const { data: [time] } = await fetch(
          `https://api.mirror-earth.com/api/vis/radar/meta?apikey=${API_KEY}&timezone=Asia/Shanghai`
        ).then(r => r.json());

        // 2. 构建雷达图 URL(WebP 格式,含透明通道)
        const url = `https://api.mirror-earth.com/api/vis/part/radar/composite_reflectivity/${time}.webp?apikey=${API_KEY}`;

        // 3. 叠加到地图(opacity 可适当提高,无降水区已透明)
        L.imageOverlay(url, RADAR_BOUNDS, { opacity: 0.85 }).addTo(map);
        setStatus(`雷达拼图已加载(${time})`);
      } catch {
        setStatus('雷达数据加载失败,请检查 API Key');
      }
    };

    init();

    return () => {
      mapInstance.current?.remove();
      mapInstance.current = null;
    };
  }, []);

  return (
    <div>
      <p style={{ padding: '8px 12px', background: '#fafafa', margin: 0 }}>{status}</p>
      <div ref={mapRef} style={{ width: '100%', height: '500px' }} />
    </div>
  );
}

3. Demo 仓库

完整可运行示例已上传至 Gitee:

Previous

彩色卫星云图接入

Next

在线体验