台風
このエンドポイント群は、中央気象署が発表する 4 種の台風データをまとめたものです。進路(track)、予報円(potential)、暴風域に入る確率(probability)、台風警報(warning)です。別に、活動中の熱帯低気圧の一覧と、重ね合わせ用の GeoJSON があります。サーバーは 1 分ごとに出典を確認し、過去のスナップショットは 7 日保持します。台風の状況ページ、進路の地図、警報の表示に向きます。共通形式は気象 API の概要を参照してください。
データライセンス
Section titled “データライセンス”推奨表記データ出典:中央気象署、ExpTech Studio(exptech.dev)
- 中央気象署:中央気象署のデータ利用規約(政府データオープンライセンスなど)も適用されます。気象・地震情報は中央気象署の発表を正とします。
表記の場所、例、商用利用の申請はデータの利用条件と出典表記をご覧ください。
現在は API Token は不要です。
共通のルール
Section titled “共通のルール”- すべてのエンドポイントは
{ updated, cyclones: [...] }を返します(GeoJSON のエンドポイントを除く)。熱帯低気圧が同時に複数あるときは、cyclonesも複数件です。 tdNoは熱帯低気圧の一意な識別子です(中央気象署の熱帯低気圧番号)。同じスナップショットの中では重複しません。4 種のデータはtdNoで互いに対応します。まだ命名されていない熱帯低気圧にもtdNoがあり、そのときname、cwaName、tyNoは""です。- 時刻は Unix 秒です。データがないとき
updatedは0です。 - 欠測は
nullです。 - 座標:一覧、進路、警報は
latとlonの 2 フィールドです。予報円、暴風域に入る確率、GeoJSON は[経度, 緯度]の配列です。小数第 4 位です。 - 単位:風速と最大瞬間風速は m/s、気圧は hPa、進行速度は km/h、半径は km です。進行方向は 16 方位の英語略号です。例:
NNW。 - 活動中の熱帯低気圧がないとき、一覧、
track、potential、probabilityのcyclonesは[]です。warningは通常、直近の 1 件の「解除」警報を残します(msgTypeがCancel)。
4 種類のデータ
Section titled “4 種類のデータ”kind |
内容 | 用途 |
|---|---|---|
track |
台風の進路。過去と現在の位置、現在の移動、象限ごとの暴風半径、今後の各予報時間の予報位置 | 数値が最もそろっています。暴風の範囲を判断するときは、この 4 象限の半径を使ってください |
potential |
進路の予報円。過去の進路、予測進路、予報円(不確実な範囲)、風力7の強風域、各予報時刻 | 予報円の図を描く |
probability |
暴風域に入る確率。20%、40%、60%、80%、100% の入れ子の等値線 | 確率の図を描く、またはある座標がどの確率の区域にあるかを判断する |
warning |
台風警報。発表、更新、または解除。警報本文、台風の情報、影響する県・市 | 現在の海上・陸上の台風警報を表示する |
活動中の熱帯低気圧を取得
Section titled “活動中の熱帯低気圧を取得”熱帯低気圧ごとに、最新の位置と強度を 1 件返します。track から取ります。
curl "https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon"const res = await fetch("https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon");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/v5/meteor/typhoon", timeout=10,)res.raise_for_status()print(res.json())成功
{ "updated": 1794614400, "cyclones": [ { "tdNo": "27", "name": "DOLPHIN", "cwaName": "白海豚", "year": 2026, "tyNo": "26", "t": 1794614400, "lat": 18.3, "lon": 128.9, "wind": 33, "gust": 43, "pres": 970, "speed": 22, "dir": "WNW" } ]}データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし
試してみる
レスポンスのフィールド
Section titled “レスポンスのフィールド”| フィールド | 型 | 説明 |
|---|---|---|
updated | number | 最新の位置決定の時刻。Unix 秒。データがないときは 0 |
cyclones[].tdNo | string | 熱帯低気圧番号。一意な識別子 |
cyclones[].name | string | 国際英語名。未命名のときは空文字列 |
cyclones[].cwaName | string | 中国語名。未命名のときは空文字列 |
cyclones[].year | number | 年 |
cyclones[].tyNo | string | 台風番号。まだ熱帯低気圧のときは空文字列 |
cyclones[].t | number | この位置決定の時刻。Unix 秒 |
cyclones[].lat | number | 中心の緯度 |
cyclones[].lon | number | 中心の経度 |
cyclones[].wind | number | null | 中心付近の最大風速(m/s) |
cyclones[].gust | number | null | 最大瞬間風速(m/s) |
cyclones[].pres | number | null | 中心気圧(hPa) |
cyclones[].speed | number | null | 進行速度(km/h) |
cyclones[].dir | string | null | 進行方向。16 方位の英語略号 |
台風データを取得
Section titled “台風データを取得”kind に応じて、4 種のデータの最新の 1 つを取得します。それぞれの構造は下の小節を参照してください。
kindパスパラメータ。track、potential、probability、warning のいずれか
curl "https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>"const res = await fetch("https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>");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/v5/meteor/typhoon/<kind>", timeout=10,)res.raise_for_status()print(res.json())成功(track の例)
{ "updated": 1794614400, "cyclones": [ { "tdNo": "27", "name": "DOLPHIN", "cwaName": "白海豚", "year": 2026, "tyNo": "26", "analysis": [ { "t": 1794528000, "lat": 16.9, "lon": 131.2, "wind": 28, "gust": 38, "pres": 980 }, { "t": 1794614400, "lat": 18.3, "lon": 128.9, "wind": 33, "gust": 43, "pres": 970 } ], "now": { "speed": 22, "dir": "WNW", "move": [ "以每小時22公里速度,向西北西進行", "WNW 22 KM/HR" ], "c15": { "avg": 180, "ne": 200, "se": 180, "sw": 160, "nw": 180 }, "c25": null }, "forecast": [ { "tau": 6, "t": 1794636000, "lat": 18.8, "lon": 127.9, "wind": 35, "gust": 45, "pres": 965, "speed": 20, "dir": "WNW", "r15": 180, "r70": 80, "state": null } ] } ]}データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし
試してみる
進路 track
Section titled “進路 track”| フィールド | 型 | 説明 |
|---|---|---|
updated | number | 最新の位置決定の時刻。Unix 秒。データがないときは 0 |
cyclones[].tdNo、name、cwaName、year、tyNo | string / number | 「活動中の熱帯低気圧」と同じ |
cyclones[].analysis[] | object[] | 過去と現在の位置決定。古い順 |
t | number | 位置決定の時刻。Unix 秒 |
lat、lon | number | 中心の座標 |
wind、gust、pres | number | null | 中心付近の最大風速、最大瞬間風速(m/s)、中心気圧(hPa) |
cyclones[].now.speed | number | null | 現在の進行速度(km/h) |
cyclones[].now.dir | string | null | 現在の進行方向 |
cyclones[].now.move | string[] | null | 移動の説明 [中国語, 英語] |
cyclones[].now.c15 | object | null | 風力7の強風半径(km)。avg は平均、ne、se、sw、nw は 4 象限。弱すぎるときは null |
cyclones[].now.c25 | object | null | 風力10の暴風半径(km)。構造は c15 と同じ |
cyclones[].forecast[].tau | number | 予報時間(時間) |
cyclones[].forecast[].t | number | 予報時刻。Unix 秒 |
cyclones[].forecast[].lat、lon | number | 予報した中心の座標 |
cyclones[].forecast[].wind、gust、pres | number | null | 予報した強度 |
cyclones[].forecast[].speed、dir | number | null / string | null | 予報した進行速度(km/h)と進行方向 |
cyclones[].forecast[].r15 | number | null | 風力7の強風半径(km) |
cyclones[].forecast[].r70 | number | null | 70% 確率半径(km) |
cyclones[].forecast[].state | string[] | null | 衰弱または温帯低気圧化の説明 [中国語, 英語] |
ある地点が暴風の範囲内かを判断するときは、now.c15 / now.c25 の 4 象限の半径を使ってください。potential の暴風域は対称な円で、模式図に向きます。
予報円 potential
Section titled “予報円 potential”{ "updated": 1794614400, "cyclones": [ { "tdNo": "27", "name": "白海豚", "past": [[131.2, 16.9], [128.9, 18.3]], "forecast": [[128.9, 18.3], [127.9, 18.8], [125.6, 19.9]], "cone": [[128.4, 18.0], [127.3, 18.4], [124.8, 19.3], [126.1, 20.6], [128.9, 18.3], [128.4, 18.0]], "circle": [[130.6, 18.3], [128.9, 20.0], [127.2, 18.3], [128.9, 16.6], [130.6, 18.3]], "current": [128.9, 18.3], "points": [ { "label": "11月14日14時", "lng": 127.9, "lat": 18.8 }, { "label": "11月15日08時", "lng": 125.6, "lat": 19.9 } ] } ]}| フィールド | 型 | 説明 |
|---|---|---|
updated | number | データの時刻。Unix 秒。データがないときは 0 |
cyclones[].tdNo | string | 熱帯低気圧番号。対応できないときは空文字列 |
cyclones[].name | string | 出典データの名称。例:中国語名、または TD27 |
cyclones[].past | number[][] | 過去の進路 [[経度, 緯度], ...] |
cyclones[].forecast | number[][] | 予測進路 |
cyclones[].cone | number[][] | 予報円(不確実な範囲)の外枠 |
cyclones[].circle | number[][] | null | 風力7の強風域(対称な円、模式用)。弱いときは null |
cyclones[].current | number[] | null | 現在の中心 [経度, 緯度] |
cyclones[].points[] | object[] | 各予報時刻。label は時刻の文字列、lng、lat |
暴風域に入る確率 probability
Section titled “暴風域に入る確率 probability”{ "updated": 1794614400, "cyclones": [ { "tdNo": "27", "levels": [ { "p": 100, "coords": [[128.6, 18.0], [129.2, 18.4], [128.9, 18.9], [128.6, 18.0]] }, { "p": 20, "coords": [[126.0, 17.2], [130.4, 17.6], [129.8, 21.0], [125.1, 20.5], [126.0, 17.2]] } ] } ]}| フィールド | 型 | 説明 |
|---|---|---|
updated | number | データの時刻。Unix 秒。データがないときは 0 |
cyclones[].tdNo | string | 熱帯低気圧番号 |
cyclones[].levels[].p | number | 入る確率(%)。20、40、60、80、100 |
cyclones[].levels[].coords | number[][] | その確率の閉じた等値線 [[経度, 緯度], ...] |
levels は確率の高い順です(100 が最も内側)。座標がどの確率にあるかを判断するときは、p が最も高い等値線から、点が多角形の内側にあるかを調べます。
台風警報 warning
Section titled “台風警報 warning”中央気象署は通常、同時に台風警報を 1 つだけ出します。cyclones の長さは 0 または 1 です。
{ "updated": 1794615000, "cyclones": [ { "tdNo": "27", "active": true, "id": "CWA-Weather_typhoon-warning_202611140830000000", "sent": 1794615000, "status": "Actual", "msgType": "Cancel", "scope": "Public", "event": "颱風", "urgency": "Past", "severity": "Minor", "certainty": "Observed", "effective": 1794615000, "onset": 1794615000, "expires": 1794618600, "headline": "解除颱風警報", "senderName": "中央氣象署", "typhoon": { "no": "26", "name": "DOLPHIN", "cwaName": "白海豚", "reportNo": "12", "category": "END", "analysis": { "t": 1794614400, "lat": 18.3, "lon": 128.9, "wind": 33, "gust": 43, "pres": 970, "r15": 180, "scale": ["中度颱風", "TYPHOON"] }, "prediction": { "t": 1794700800, "lat": 20.1, "lon": 125.0, "wind": 30, "gust": 40, "pres": 975, "r15": 160, "scale": null } }, "sections": [ { "title": "命名與位置", "text": "中度颱風白海豚(國際命名 DOLPHIN)……" } ], "areas": [ { "name": "臺北市", "code": "63000000" } ] } ]}| フィールド | 型 | 説明 |
|---|---|---|
updated | number | 最新の警報の発表時刻。Unix 秒。データがないときは 0 |
cyclones[].tdNo | string | 熱帯低気圧番号。現在の熱帯低気圧に対応できないときは空文字列(古い解除警報でよくあります) |
cyclones[].active | boolean | 警報の内容を解析できたか |
cyclones[].id | string | 警報の識別子 |
cyclones[].sent | number | null | 発表時刻。Unix 秒 |
cyclones[].status | string | 例:Actual |
cyclones[].msgType | string | Alert は発表、Update は更新、Cancel は解除 |
cyclones[].scope、event、urgency、severity、certainty | string | 警報の範囲、イベント、緊急度、重大度、確度。出典の原文のまま |
cyclones[].effective、onset、expires | number | null | 有効、開始、失効の時刻。Unix 秒 |
cyclones[].headline | string | 見出し。例:「海上颱風警報」「解除颱風警報」 |
cyclones[].senderName | string | 発表機関 |
cyclones[].typhoon.no | string | 台風番号(tyNo と同じ。tdNo ではない) |
cyclones[].typhoon.name、cwaName | string | 英語名、中国語名 |
cyclones[].typhoon.reportNo | string | 警報の報数 |
cyclones[].typhoon.category | string | 警報の種別。出典の原文のまま。解除のときは例として END |
cyclones[].typhoon.analysis | object | null | 現在の位置。t、lat、lon、wind、gust、pres、r15(風力7の強風半径 km)、scale(強度 [中国語, 英語]) |
cyclones[].typhoon.prediction | object | null | 予測位置。構造は analysis と同じ |
cyclones[].sections[] | object[] | 警報本文の各節。title、text |
cyclones[].areas[] | object[] | 影響する県・市。name は名称、code は県・市コード |
過去の時刻リストを取得
Section titled “過去の時刻リストを取得”あるデータの過去のスナップショット時刻です。差分符号化の Unix 秒で、古い順です。復元方法は差分の時刻リストを参照してください。
kindパスパラメータ。track、potential、probability、warning のいずれか
curl "https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>/list"const res = await fetch("https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>/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/v5/meteor/typhoon/<kind>/list", timeout=10,)res.raise_for_status()print(res.json())成功
[ 1794528000, 21600, 21600, 21600, 21600]データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし
試してみる
レスポンスのフィールド
Section titled “レスポンスのフィールド”| フィールド | 型 | 説明 |
|---|---|---|
[0] | number | 最も古いスナップショットの時刻。Unix 秒 |
[i](i ≥ 1) | number | 直前の 1 件との時間差(秒) |
スナップショットの時刻は、データ自身の時刻です。track は最新の位置決定の時刻、potential と probability は出典データの時刻、warning は警報の発表時刻(sent)です。スナップショットがないときは [] を返します。
指定時刻の台風データを取得
Section titled “指定時刻の台風データを取得”あるデータの、指定時刻のスナップショットです。構造は対応する最新のデータと同じです。static.core だけで提供し、api.core はこのパスに 404 を返します。
kindパスパラメータ。track、potential、probability、warning のいずれか
timeパスパラメータ。10 桁の Unix 秒。/{kind}/list に出た値でなければなりません
curl "https://static.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>/<time>"const res = await fetch("https://static.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>/<time>");if (!res.ok) throw new Error(`HTTP ${res.status}`);const data = await res.json();console.log(data);import requests
res = requests.get( "https://static.core-tnn1.exptech.dev/api/v5/meteor/typhoon/<kind>/<time>", timeout=10,)res.raise_for_status()print(res.json())成功(probability の例)
{ "updated": 1794614400, "cyclones": [ { "tdNo": "27", "levels": [ { "p": 100, "coords": [ [ 128.6, 18 ], [ 129.2, 18.4 ], [ 128.9, 18.9 ], [ 128.6, 18 ] ] } ] } ]}データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし
time が整数ではない、またはその時刻にスナップショットがない(保持期限を過ぎたときも同じ)。body なしレスポンスボディなし
試してみる
レスポンスのフィールド
Section titled “レスポンスのフィールド”台風データを取得のうち、対応する kind のフィールドと同じです。
重ね合わせ用 GeoJSON を取得
Section titled “重ね合わせ用 GeoJSON を取得”最新の potential と probability から作った GeoJSON の FeatureCollection です。MapLibre や Leaflet などの地図に、そのまま追加できます。
curl "https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/geojson"const res = await fetch("https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/geojson");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/v5/meteor/typhoon/geojson", timeout=10,)res.raise_for_status()print(res.json())成功
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [ 128.9, 18.3 ], [ 127.9, 18.8 ], [ 125.6, 19.9 ] ] }, "properties": { "kind": "forecast", "tdNo": "27" } }, { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ 127.9, 18.8 ] }, "properties": { "kind": "forecastPoint", "label": "11月14日14時", "tdNo": "27" } }, { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [ 128.6, 18 ], [ 129.2, 18.4 ], [ 128.9, 18.9 ], [ 128.6, 18 ] ] ] }, "properties": { "kind": "probability", "p": 100, "tdNo": "27" } } ]}データは変わっていません(If-None-Match が一致)。body なしレスポンスボディなし
試してみる
レスポンスのフィールド
Section titled “レスポンスのフィールド”各 Feature の properties.kind が種類を決め、いずれも properties.tdNo を持ちます。
properties.kind |
幾何 | 内容 |
|---|---|---|
past |
LineString | 過去の進路 |
forecast |
LineString | 予測進路 |
cone |
Polygon | 予報円の範囲 |
circle15 |
Polygon | 風力7の強風域(対称な円) |
current |
Point | 現在の中心 |
forecastPoint |
Point | 予報時刻。properties.label は時刻の文字列 |
probability |
Polygon | 入る確率の等値線。properties.p は確率(%) |
台風がないとき features は [] です。
重ね合わせ用 GeoJSONを、そのまま MapLibre GL JS の source にし、kind で描く図形を絞ります。例として予報円の範囲は次のとおりです。
map.addSource("typhoon", { type: "geojson", data: "https://api.core-tnn1.exptech.dev/api/v5/meteor/typhoon/geojson",});map.addLayer({ id: "typhoon-cone", type: "fill", source: "typhoon", filter: ["==", ["get", "kind"], "cone"], paint: { "fill-color": "#f97316", "fill-opacity": 0.2 },});- 時刻はすべて Unix 秒で、欠測は
nullです。 - 過去のスナップショットは 7 日保持します。ただし各種のデータは少なくとも最新の 1 件を残すため、台風シーズンが終わったあとも最後の 1 つを照会できます(通常は解除警報です)。
potential、probability、warningのtdNoは、サーバーが名称、番号、または位置でtrackに対応させたものです。対応できないときは空文字列です。- データ出典:中央気象署のオープンデータの台風データです。
- サーバーの選び方は気象 API の概要を参照してください。タイムスタンプ付きスナップショットは
static.core、それ以外はapi.coreです。TNN-1 の URL を直接使うことを推奨します。
