Skip to Content

镜像地球开放平台

彩色卫星云图接入

接入向日葵(Himawari)卫星彩色云图,使用 Leaflet ImageOverlay 将实时卫星图像叠加到地图上,覆盖东亚及西太平洋区域。

向日葵(Himawari)是日本气象厅运营的地球静止轨道气象卫星,能够提供高分辨率彩色可见光云图,覆盖东亚和西太平洋区域(0°N ~ 55.77°N,67.5°E ~ 135°E)。

与气象要素预报图层不同,卫星云图是观测数据,更新频率更高(约每 10 分钟),可直接以图片方式叠加,无需 WebGL 解码。

1. 关键参数说明

参数说明
meta 接口https://api.mirror-earth.com/api/vis/himawari/meta?apikey={apikey}&timezone=Asia/Shanghai
图片 URLhttps://api.mirror-earth.com/api/vis/himawari/himawari/{time}.jpeg?size=2048&apikey={apikey}&timezone=Asia/Shanghai
Himawari 覆盖范围南北:0°N ~ 55.77°N,东西:67.5°E ~ 135°E
Leaflet bounds[[0, 67.5], [55.77, 135]](格式:[[南, 西], [北, 东]]
更新频率约 10 分钟一帧
图片格式JPEG(真彩色可见光)

注意:卫星云图路径为 /himawari/himawari/(两层 himawari 目录),这是 API 的固定结构,勿省略。

2. 示例代码

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

const API_KEY = 'YOUR_API_KEY';

// 向日葵卫星覆盖范围:[[南, 西], [北, 东]]
const HIMAWARI_BOUNDS: [[number, number], [number, number]] = [
  [0, 67.5],
  [55.77, 135],
];

export default function SatelliteDemo() {
  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([30.0, 100.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/himawari/meta?apikey=${API_KEY}&timezone=Asia/Shanghai`
        ).then(r => r.json());

        // 2. 构建卫星图 URL(注意双层 himawari 路径)
        const url = `https://api.mirror-earth.com/api/vis/himawari/himawari/${time}.jpeg?size=2048&apikey=${API_KEY}&timezone=Asia/Shanghai`;

        // 3. 叠加到地图上
        L.imageOverlay(url, HIMAWARI_BOUNDS, { opacity: 0.9 }).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

ECMWF 全球预报风场粒子接入

Next

雷达拼图接入