衛星雲圖
日本氣象廳 Himawari-9 衛星 AHI 儀器的雲圖圖磚,資料經 NOAA Open Data 取得。儀器頻道每 10 分鐘一景,保留約 48 小時。 同一組端點同時提供 16 個原始頻道(B01–B16)與 20 種衍生圖層;涵蓋 Himawari-9 可見的地球圓盤,圓盤外是透明的。
共通規則(座標、快取、資料來源標示、完整地圖範例)見 圖磚概要。
建議標示資料來源:日本氣象廳 Himawari-9(經 NOAA Open Data)、ExpTech Studio(exptech.dev)
- 日本氣象廳 Himawari-9(經 NOAA Open Data):另須遵守日本氣象廳與 NOAA Open Data 對 Himawari 資料的使用條件。
- NOAA:美國政府資料,原則上沒有使用限制;不可暗示 NOAA 推薦或背書你的產品。
標示位置、範例與商業使用申請見資料授權與來源標示。
目前不需要 API Token。
取得可用時間
Section titled “取得可用時間”channel頻道 1–16,或衍生圖層名稱(見下方「頻道與圖層」)。只接受正規寫法,例如 13,不能寫 013。
curl --compressed "https://api.core-tnn1.exptech.dev/api/v2/tiles/satellite/<channel>/list"const res = await fetch("https://api.core-tnn1.exptech.dev/api/v2/tiles/satellite/<channel>/list");if (!res.ok) throw new Error(`HTTP ${res.status}`);const data = await res.json();console.log(data);import requests
res = requests.get( "https://api.core-tnn1.exptech.dev/api/v2/tiles/satellite/<channel>/list", timeout=10,)res.raise_for_status()print(res.json())成功(沒有資料時為 [ ]);用戶端支援時以 gzip 壓縮
[ 1794641400, 600, 600, 600]channel 不合法
bad channel伺服器錯誤(純文字錯誤訊息)text/plain
試試看
回應是 delta 編碼的整數陣列,由舊到新,單位 Unix 秒(還原方式見圖磚概要)。衍生圖層回傳所有組成頻道都齊全的時間,列出的時間一定畫得出來。
| 欄位 | 類型 | 說明 |
|---|---|---|
[0] | integer | 最舊一筆的時間,Unix 秒。 |
[i](i ≥ 1) | integer | 與前一筆的差,秒。累加後得到每一筆的時間。 |
https://static.core-tnn1.exptech.dev/api/v2/tiles/satellite/{channel}/{style}/{time}/{z}/{x}/{y}.webp channel頻道 1–16,或衍生圖層名稱。
stylenormal、jma 或 bd。只對頻道 7–16 有作用;頻道 1–6 與衍生圖層請填 normal。
timeUnix 秒,請用列表裡的值。同一個 10 分鐘區間內的任何秒數都對應同一景。
z縮放層級,0–11。超出範圍回 1 × 1 透明 GIF。
xXYZ 圖磚欄號。
yXYZ 圖磚列號(由北往南)。
curl -o output.webp "https://static.core-tnn1.exptech.dev/api/v2/tiles/satellite/<channel>/<style>/<time>/<z>/<x>/<y>.webp"const res = await fetch("https://static.core-tnn1.exptech.dev/api/v2/tiles/satellite/<channel>/<style>/<time>/<z>/<x>/<y>.webp");if (!res.ok) throw new Error(`HTTP ${res.status}`);const blob = await res.blob();import requests
res = requests.get( "https://static.core-tnn1.exptech.dev/api/v2/tiles/satellite/<channel>/<style>/<time>/<z>/<x>/<y>.webp", timeout=10,)res.raise_for_status()with open("output.webp", "wb") as f: f.write(res.content)image/webp,256 × 256,含透明通道,依圖層採有損或無損壓縮;帶 Cache-Control: public, max-age=300。z 不在 0–11 時改回 1 × 1 透明 GIF(image/gif)binary image/webp
If-None-Match 與 ETag 相符,沒有內容沒有回應本文
channel、style、time 或座標不合法
bad style該時間沒有資料:尚未入庫或已超過保留期間(application/json)
{ "error": "Data not found for specified timestamp"}伺服器錯誤;內容只有一個換行沒有回應本文
試試看
channel 可以是原始頻道編號或衍生圖層名稱。兩者都只接受下表的正規寫法(大小寫、前導零都會 400)。
原始頻道 1–16
Section titled “原始頻道 1–16”| channel | 波長 | 類型 | 看什麼 |
|---|---|---|---|
1 |
0.47 µm | 可見光(藍) | 氣膠、沙塵、煙霧,僅日間 |
2 |
0.51 µm | 可見光(綠) | 植被,真色彩的綠色,僅日間 |
3 |
0.64 µm | 可見光(紅) | 解析度最高(0.5 km),雲的紋理與地表輪廓,僅日間 |
4 |
0.86 µm | 近紅外 | 水體暗、植被亮,海岸線與淹水範圍,僅日間 |
5 |
1.6 µm | 近紅外 | 冰雲、積雪較暗,區分雲的相態,僅日間 |
6 |
2.3 µm | 近紅外 | 雲微物理、地表高溫熱源,僅日間 |
7 |
3.9 µm | 短波紅外 | 夜間霧與低雲、火點 |
8 |
6.2 µm | 水氣 | 上層水氣、噴流、乾空氣入侵 |
9 |
6.9 µm | 水氣 | 中層水氣 |
10 |
7.3 µm | 水氣 | 低層水氣輸送 |
11 |
8.6 µm | 紅外 | 雲相、SO₂ |
12 |
9.6 µm | 臭氧 | 平流層臭氧 |
13 |
10.4 µm | 紅外(大氣窗) | 最接近真實雲頂/地表溫度,最常用的紅外雲圖 |
14 |
11.2 µm | 紅外 | 長波紅外 |
15 |
12.4 µm | 紅外 | 與 13 相減可分辨沙塵、火山灰 |
16 |
13.3 µm | CO₂ | 雲頂高度、半透明卷雲 |
頻道 1–6 顯示反射率灰階(0% 透明 → 100% 白),夜間沒有影像。頻道 7–16 日夜都有影像,可用 style 切換色階。
style(只對頻道 7–16 有作用)
Section titled “style(只對頻道 7–16 有作用)”| style | 說明 |
|---|---|
normal |
日本氣象廳慣用的灰階,越冷越白:290 K 透明,208 K 全白不透明 |
jma |
雲頂強調:較暖的雲維持灰階,最冷的雲頂上色(暖端藍、冷端紅,連續色階) |
bd |
Dvorak BD 曲線:颱風強度分析用的階梯色階,斷點在 +9、−30、−41、−53、−63、−69、−75、−81 °C |
頻道 1–6 與所有衍生圖層會忽略 style,但網址仍需要這一段,請填 normal。
衍生圖層(20 種)
Section titled “衍生圖層(20 種)”| channel | 內容 | 組成 | 更新 |
|---|---|---|---|
truecolor |
真色彩 RGB(JMA 配方),接近肉眼所見,僅日間 | 頻道 3/2/1 | 10 分鐘 |
naturalcolor |
自然色 RGB:區分冰雲與水雲、植被與裸土,僅日間 | 頻道 5/4/3 | 10 分鐘 |
ash |
火山灰 RGB(JMA 配方):火山灰與 SO₂ 煙流 | 13−15/11−13/13 | 10 分鐘 |
dust |
沙塵 RGB(JMA 配方):沙塵、黃沙 | 13−15/11−13/13 | 10 分鐘 |
airmass |
氣團 RGB(JMA 配方):乾燥的平流層空氣入侵與暖濕氣團 | 10−8/13−12/8 | 10 分鐘 |
nightmicrophysics |
夜間微物理 RGB(JMA 配方):夜間的霧與低雲 | 13−15/7−13/13 | 10 分鐘 |
watervapor |
水氣(6.2 µm),日夜可用 | 頻道 8 | 10 分鐘 |
btd_split |
分割視窗差值:沙塵、火山灰與一般雲的正負號相反 | 13 − 15 | 10 分鐘 |
btd_fog |
夜間霧與低雲 | 7 − 13 | 10 分鐘 |
btd_wvirw |
過衝雲頂(深對流) | 8 − 13 | 10 分鐘 |
btd_so2 |
火山 SO₂、雲相 | 11 − 13 | 10 分鐘 |
btd_co2 |
薄卷雲、雲高 | 16 − 13 | 10 分鐘 |
btd_ozone |
臭氧、對流層頂摺疊 | 12 − 13 | 10 分鐘 |
cloudtop |
雲頂溫度(NOAA 反演產品),190–300 K | NOAA 雲頂高度產品 | 每小時 |
cloudmask |
四級雲遮罩(晴空 → 有雲) | NOAA 雲遮罩產品 | 每小時 |
sst |
海表溫度,271.15–305.15 K | NOAA CoastWatch ACSPO | 每小時 |
tpw |
總可降水量,0–75 mm | NOAA NESDIS Blended TPW | 每小時 |
ndvi |
植被指數 (B04−B03)/(B04+B03),有雲處透明 | 頻道 4、3+雲遮罩 | 每小時 |
ndwi |
水體指數 (B02−B04)/(B02+B04),有雲處透明 | 頻道 2、4+雲遮罩 | 每小時 |
mndwi |
改良水體指數 (B02−B06)/(B02+B06),可區分水體與建成區,有雲處透明 | 頻道 2、6+雲遮罩 | 每小時 |
ndvi、ndwi、mndwi 是未經大氣修正的大氣頂指數,適合看變化與範圍,不適合當作校正過的地表量值。
在 MapLibre GL JS 加入某個頻道的最新一景:先取列表、累加出最新時間,再把圖磚網址模板加成 raster source。動畫的做法與雷達相同,見圖磚概要。
const API = "https://api.core-tnn1.exptech.dev";const STATIC = "https://static.core-tnn1.exptech.dev";
async function addLatestSatellite(map, channel = "13", style = "normal") { const list = await (await fetch(`${API}/api/v2/tiles/satellite/${channel}/list`)).json(); if (list.length === 0) return null; let t = 0; for (const v of list) t += v;
map.addSource("satellite", { type: "raster", tiles: [`${STATIC}/api/v2/tiles/satellite/${channel}/${style}/${t}/{z}/{x}/{y}.webp`], tileSize: 256, minzoom: 0, maxzoom: 11, attribution: "資料來源:日本氣象廳 Himawari-9(經 NOAA Open Data)、ExpTech Studio(exptech.dev)", }); map.addLayer({ id: "satellite", type: "raster", source: "satellite", paint: { "raster-opacity": 0.85 } }); return t;}- 時間不存在時回 404 JSON,404 結果會保留約 10 秒。請只用列表裡的時間;超過約 48 小時的景會從列表消失。
time會對齊到 10 分鐘區間的開頭,同一區間內任何秒數都拿到同一景。- 可見光頻道(1–6)與
truecolor、naturalcolor、指數圖層只在日間有影像;列表仍會列出夜間時間,圖磚在夜側是透明的。 - 每小時更新的圖層(
cloudtop、cloudmask、sst、tpw及三種指數)通常比儀器頻道晚 1.5 小時以上才出現;暫時沒有資料時列表是空陣列[]。 style請用normal、jma、bd。gray是normal的舊名,公開圖磚主機不接受(回 400)。channel、style不合法時回 400;time、z、x、y不是整數時回 404(路徑不符)。- 圖上請依資料授權的建議標示註明來源;使用
cloudtop、cloudmask、sst、tpw及指數圖層時另加 NOAA。
