台灣浪況Taiwan Waves

Taiwan surf data: what exists, where it comes from, what to trust

Researched 2026-10-02. “Verified” means the endpoint was hit and a real response parsed during this research; anything else is labelled.

Short version

1. Observed data (truth)

CWA marine observations: the backbone

Dataset What Window Access
O-B0075-001 Hourly obs, all marine stations last 48 h https://cwaopendata.s3.ap-northeast-1.amazonaws.com/Observation/O-B0075-001.zip (no key), or REST with key
O-B0075-002 Same last 30 days .../Observation/O-B0075-002.zip (~42 MB, updated daily ~01:50)
O-B0076-001 Station metadata: ID, names, lat/lon, type, operator, status current .../Observation/O-B0076-001.json
O-B0070-001 Long-period swell watch (長浪: period ≥ 8 s, height ≥ 1.5 m), last 8 h max hourly .../Observation/O-B0070-001.json (stations keyed by name)

The ZIPs hold one XML per station (46699A.xml and so on). This repo’s scripts/fetch-cwa.ts parses them.

Fields (verified): WaveHeight (m), WaveDirection (°, from), WavePeriod (s), SeaTemperature, Temperature, StationPressure, wind (speed, direction from, gust, Beaufort), TideHeight (m, TWVD2001), and surface current (speed, direction toward). None means the station doesn’t measure it or sent no data; - means a comms or instrument fault.

What “wave height” and “period” mean. CWA doesn’t document it. One matched sample against the NAMR NODASS feed for the same buoy and hour lined WaveHeight up with significant wave height, and WavePeriod with mean period, not peak. Treat period as Tm, not Tp. That’s why the buoy’s period reads shorter than a surf app’s “swell period”.

Key east-coast stations (verified from O-B0076-001):

ID Station Operator Lat, lon Notes
46694A Longdong 龍洞 CWA 25.098, 121.922 NE cape; Fulong / NE coast
OAC005 Honeymoon Bay 蜜月灣 NAMR (Ocean Affairs Council) 24.949, 121.929 right off the break; intermittent in CWA’s feed
46708A Guishan Island 龜山島 CWA 24.847, 121.927 Yilan / Wushi
46706A Su-ao 蘇澳 WRA 24.625, 121.876
46699A Hualien 花蓮 CWA 24.031, 121.633
46761F Chenggong 成功 CWA 23.133, 121.420 wave-rider in 28 m water by Sanxiantai, the most “nearshore” buoy on the coast
WRA007 Taitung 臺東 WRA 22.722, 121.140
C6S94 Lanyu 蘭嶼 CWA 22.074, 121.582 open-ocean, first to see typhoon swell from the SE
46759A Eluanbi 鵝鑾鼻 WRA 21.916, 120.811 southern tip
NTU01/02 NTU typhoon buoys NTU 21.2/123.9, 21.8/122.6 far offshore SE; early warning for typhoon swell

Elsewhere: Fugui Cape C6AH2 (north coast), Pengjiayu C6B01, Hsinchu 46757B, Taichung C6F01, Penghu 46735A, Qigu 46778A, Mituo COMC08, Xiao Liuqiu 46714D, Kinmen, Matsu, Pratas. Tide gauges at Wushi (C4U02), Su-ao, Hualien, Shiti (1566), Chenggong (C4S02) and others.

API keys. Registration at opendata.cwa.gov.tw is free. A key gives 20,000 calls/day and unlocks the REST datastore. The REST datastore filters by station, element and time (/api/v1/rest/datastore/O-B0075-001?Authorization=KEY&StationID=46708A&WeatherElement=WaveHeight,WavePeriod). The file API (/fileapi/v1/opendataapi/{ID}?Authorization=KEY&format=ZIP) is a 302 to the same S3 object, so the S3 route gets identical data without a key, just undocumented. License: Taiwan Open Government Data License 1.0 (CC BY 4.0 compatible); attribute 交通部中央氣象署.

Longer history

Other Taiwanese sources

2. Forecasts

CWA’s own wave model

CWA runs WAVEWATCH III (“NWW3”) four times a day on nested grids down to 0.025° (~2.5 km) around Taiwan. The outer grid uses GFS winds and the inner grids CWA’s own WRF winds. There’s no operational nearshore SWAN model. Published outputs:

Dataset What Access
M-B0078-001 Point forecasts: Hs, period, 16-point direction, current. 3-hourly, 72 h, updated every ~6 h. 170 points: beaches (A), fishing spots (B), harbours (I), ports (H), snorkel sites (N), surf spots (O001–O013) .../Model/M-B0078-001.json, verified
F-A0020-001 Gridded 0.1° Hs, period and direction, hourly to 168 h .../Forecast/F-A0020-001.zip (58 MB zip → ~2.5 GB XML). Marked withdrawn on data.gov.tw but still updating; could disappear
F-A0021-001 Tide high/low times and heights, 1 month, 266 locations .../Forecast/F-A0021-001.json, verified
F-A0012-001 Sea-area text forecasts (wave height as “1至2公尺”) .../Forecast/F-A0012-001.json

The official surf page (cwa.gov.tw/V8/C/L/Surfing) uses the same 13 spot IDs. The richer surf index, swell height and swell period on ocean.cwa.gov.tw are not in any open dataset.

Global models with free access

Source Resolution / horizon Swell partitions Access
Open-Meteo Marine wraps the models below MFWAM and GFS yes; ECMWF no marine-api.open-meteo.com/v1/marine, no key, CORS. Free tier is non-commercial. Used by this site
Météo-France MFWAM 1/12° (~9 km), ~10 days primary, secondary, wind sea Open-Meteo, or Copernicus Marine cmems_mod_glo_wav_anfc_0.083deg_PT3H-i (free login)
NOAA GFS-Wave (WW3) 0.16°, hourly to 120 h then 3-hourly to 16 days 3 swell partitions + wind sea Open-Meteo, or NOMADS GRIB2 (filter_gfswave.pl subsetting works); public domain
ECMWF WAM 0.25° open data (9 km native via Open-Meteo), 15 days none, but open data includes wave height in period bands (10–12 s, 12–14 s … 25–30 s), the best free long-period-swell signal data.ecmwf.int/forecasts/.../wave/ GRIB2, CC BY 4.0
ECMWF / GEFS wave ensembles 51 / 31 members, 15–16 days — raw GRIB only; Open-Meteo’s wave ensembles returned all nulls when tested
DWD GWAM 0.25°, ~7 days swell + wind sea opendata.dwd.de or Open-Meteo
JMA global / coastal 0.25° / 0.05°, 132 h / 72 h — Kyoto Univ. RISH mirror, research use only

Which is best for Taiwan?

No published head-to-head exists. What the literature does say:

Practical ranking to start with:

  1. CWA M-B0078 for the 3-day outlook at its spots (highest resolution, local winds).
  2. MFWAM for swell partitions out to ~10 days.
  3. GFS-Wave for 16-day range and a second opinion on partitions.
  4. ECMWF as the total-sea cross-check.

Revisit once the archive has a season of data.

3. Where commercial apps get their data

In short, nearly every app is a global WW3/WAM model with some post-processing. None of them see CWA’s buoys.

4. Data for building our own model later

Dataset Span Why
This repo’s archive (data/archive/cwa-obs/*.csv) from first run the truth labels: hourly Hs, Tm, direction and wind at every buoy
CWA forecast archive (data/archive/cwa-recreation-forecast/*.csv) from first run every M-B0078 issue for the spot points, to score CWA’s forecast by lead time
ocean.cwa.gov.tw get_station_info (bun run backfill:history) dense from ~mid-2024 at most buoys (already pulled) truth labels; matches official data hour-for-hour
CMEMS WAVERYS reanalysis 1980–2026, 0.2°, 3-hourly, swell partitions the best free long hindcast; free Copernicus login
ERA5 waves (Copernicus CDS) 1940–, 0.5° partitions and peak period; coarse, weak in typhoons
Open-Meteo Historical Forecast API MFWAM ~2022–, ECMWF ~2024–, GFS ~2025– archived forecasts, exactly what you need to learn a forecast correction
IHMT harbour gauges monthly CSV since 2018 adds peak period at Su-ao and Hualien
NODASS Honeymoon Bay since 2021 (needs token) the only buoy sitting right at a surf break

A sensible path:

  1. Archive (running now). Run bun run fetch every 1–3 hours, so CWA’s 48-hour window never leaves a gap. The ~2-year backfill from ocean.cwa.gov.tw is already in data/archive/ (bun run backfill:history to refresh).
  2. Score. Compare per-buoy, per-season and per-lead-time skill of CWA, MFWAM, GFS-Wave and ECMWF against the archive, splitting monsoon and typhoon regimes.
  3. Bias-correct (model 1). For each buoy, regress observed Hs and period on the forecast features: model Hs, swell partitions, period, direction, wind, lead time and month. Gradient-boosted trees or even linear models work. Train on Open-Meteo historical forecasts against archived obs. This “MOS” step is what the published Taiwan ML work does at 1–24 h, and it usually beats any single raw model.
  4. Buoy to break (model 2). Learn a per-spot transfer from offshore conditions to surf height. This needs ground truth: webcams, spot checks, or the NAMR Honeymoon Bay buoy. Spot orientation and Guishan Island’s shadow matter a lot here.
  5. Typhoon handling. Blend the ECMWF/GEFS ensembles, the ECMWF period-band heights and live readings from the far-offshore NTU and Lanyu buoys. The literature says this is where raw models fail most.

Caveats