{"generated_at":"2026-04-20T00:15:59+00:00","source":"Open-Meteo (Marine + Weather)","timezone":"Asia/Bangkok","sites":[{"slug":"sail-rock","name":"Sail Rock","region":"Koh Tao & Offshore","lat":9.88,"lng":100.06,"depth_max":40,"exposed_directions":["N","NE","E","SE","S","SW","W","NW"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":18.4,"gust_kmh":16.6,"wind_dir":"SE","wind_dir_deg":157,"wave_m":0.18,"wave_dir":"SE","wave_period_s":2.3,"swell_m":0.14,"swell_dir":"SE","current_ms":1,"current_dir":"N","sst_c":31.2,"rain_prev7d_mm":4.4,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.2,"model_winds":{"best_match":null,"gfs_global":28.7,"icon_global":14.9,"jma_gsm":12.4,"gem_global":17.6},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-21","wind_kmh":18.1,"gust_kmh":17.3,"wind_dir":"SE","wind_dir_deg":151,"wave_m":0.18,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.16,"swell_dir":"SE","current_ms":1.1,"current_dir":"N","sst_c":31.4,"rain_prev7d_mm":3.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":3.9,"model_winds":{"best_match":null,"gfs_global":20.5,"icon_global":17.9,"jma_gsm":12.6,"gem_global":21.2},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-22","wind_kmh":20.7,"gust_kmh":20.1,"wind_dir":"SE","wind_dir_deg":150,"wave_m":0.2,"wave_dir":"SE","wave_period_s":3.1,"swell_m":0.14,"swell_dir":"SE","current_ms":1.3,"current_dir":"NE","sst_c":31.4,"rain_prev7d_mm":5.4,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.2,"model_winds":{"best_match":null,"gfs_global":25.9,"icon_global":20,"jma_gsm":12.2,"gem_global":24.5},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-23","wind_kmh":17.7,"gust_kmh":18.1,"wind_dir":"S","wind_dir_deg":160,"wave_m":0.24,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.2,"swell_dir":"SE","current_ms":1.3,"current_dir":"NE","sst_c":31.4,"rain_prev7d_mm":10.2,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.1,"model_winds":{"best_match":null,"gfs_global":19.5,"icon_global":16.5,"jma_gsm":11.4,"gem_global":23.4},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-24","wind_kmh":19.6,"gust_kmh":19.3,"wind_dir":"SE","wind_dir_deg":138,"wave_m":0.26,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.16,"swell_dir":"SE","current_ms":1.2,"current_dir":"N","sst_c":31.4,"rain_prev7d_mm":16.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.9,"model_winds":{"best_match":null,"gfs_global":25,"icon_global":19.8,"jma_gsm":13.1,"gem_global":20.5},"score":63,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":12,"tide_penalty":0}},{"date":"2026-04-25","wind_kmh":20.3,"gust_kmh":18.5,"wind_dir":"SE","wind_dir_deg":118,"wave_m":0.3,"wave_dir":"E","wave_period_s":3,"swell_m":0.3,"swell_dir":"E","current_ms":1,"current_dir":"N","sst_c":31.2,"rain_prev7d_mm":16.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2.9,"model_winds":{"best_match":null,"gfs_global":23.2,"icon_global":18.8,"jma_gsm":17,"gem_global":22},"score":63,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":12,"tide_penalty":0}},{"date":"2026-04-26","wind_kmh":18.4,"gust_kmh":17,"wind_dir":"SE","wind_dir_deg":125,"wave_m":0.32,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.18,"swell_dir":"E","current_ms":1,"current_dir":"NW","sst_c":31,"rain_prev7d_mm":16.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":1.7,"model_winds":{"best_match":null,"gfs_global":20,"icon_global":18,"jma_gsm":16.2,"gem_global":19.4},"score":63,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":12,"tide_penalty":0}}]},{"slug":"chumphon-pinnacle","name":"Chumphon Pinnacle","region":"Koh Tao & Offshore","lat":10.1725,"lng":99.7787,"depth_max":40,"exposed_directions":["N","NE","E","SE","S","SW","W","NW"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":17.7,"gust_kmh":16.2,"wind_dir":"SE","wind_dir_deg":155,"wave_m":0.2,"wave_dir":"SE","wave_period_s":2.5,"swell_m":0.2,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":4.1,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":8,"model_winds":{"best_match":null,"gfs_global":29.5,"icon_global":12.8,"jma_gsm":12.4,"gem_global":16.2},"score":65,"rating":"good","factors":["strong current","forecast uncertainty"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-21","wind_kmh":18.4,"gust_kmh":18.3,"wind_dir":"SE","wind_dir_deg":142,"wave_m":0.14,"wave_dir":"SE","wave_period_s":3,"swell_m":0.14,"swell_dir":"SE","current_ms":1,"current_dir":"N","sst_c":31,"rain_prev7d_mm":2.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.3,"model_winds":{"best_match":null,"gfs_global":20.2,"icon_global":18.1,"jma_gsm":12.6,"gem_global":22.7},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-22","wind_kmh":21,"gust_kmh":21.3,"wind_dir":"S","wind_dir_deg":160,"wave_m":0.26,"wave_dir":"SE","wave_period_s":3.1,"swell_m":0.2,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":5.3,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.1,"model_winds":{"best_match":null,"gfs_global":23.7,"icon_global":22.1,"jma_gsm":12.2,"gem_global":25.9},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-23","wind_kmh":17.8,"gust_kmh":18.9,"wind_dir":"S","wind_dir_deg":171,"wave_m":0.26,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.22,"swell_dir":"SE","current_ms":0.8,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":9.8,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.4,"model_winds":{"best_match":null,"gfs_global":17.8,"icon_global":15.5,"jma_gsm":11.4,"gem_global":26.6},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-24","wind_kmh":20.4,"gust_kmh":20,"wind_dir":"SE","wind_dir_deg":150,"wave_m":0.24,"wave_dir":"SE","wave_period_s":3,"swell_m":0.2,"swell_dir":"SE","current_ms":0.9,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":15.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.4,"model_winds":{"best_match":null,"gfs_global":25.8,"icon_global":20.1,"jma_gsm":13.1,"gem_global":22.7},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-25","wind_kmh":20.5,"gust_kmh":18.7,"wind_dir":"SE","wind_dir_deg":115,"wave_m":0.42,"wave_dir":"E","wave_period_s":3.1,"swell_m":0.3,"swell_dir":"E","current_ms":0.9,"current_dir":"N","sst_c":31,"rain_prev7d_mm":15.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2.7,"model_winds":{"best_match":null,"gfs_global":22.1,"icon_global":19.8,"jma_gsm":17,"gem_global":23},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-26","wind_kmh":18.8,"gust_kmh":17.4,"wind_dir":"SE","wind_dir_deg":124,"wave_m":0.44,"wave_dir":"SE","wave_period_s":3,"swell_m":0.32,"swell_dir":"E","current_ms":0.8,"current_dir":"N","sst_c":30.8,"rain_prev7d_mm":15.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2.1,"model_winds":{"best_match":null,"gfs_global":20,"icon_global":18.2,"jma_gsm":16.2,"gem_global":20.9},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]},{"slug":"southwest-pinnacle","name":"Southwest Pinnacle","region":"Koh Tao & Offshore","lat":10.04,"lng":99.79,"depth_max":30,"exposed_directions":["N","NE","E","SE","S","SW","W","NW"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":18,"gust_kmh":15.7,"wind_dir":"SE","wind_dir_deg":155,"wave_m":0.2,"wave_dir":"SE","wave_period_s":2.3,"swell_m":0.2,"swell_dir":"SE","current_ms":0.7,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":3.4,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.5,"model_winds":{"best_match":null,"gfs_global":28.9,"icon_global":14.1,"jma_gsm":12.4,"gem_global":16.6},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-21","wind_kmh":18.5,"gust_kmh":16.7,"wind_dir":"SE","wind_dir_deg":143,"wave_m":0.14,"wave_dir":"SE","wave_period_s":2.7,"swell_m":0.12,"swell_dir":"SE","current_ms":1,"current_dir":"NW","sst_c":31.2,"rain_prev7d_mm":3.2,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.5,"model_winds":{"best_match":null,"gfs_global":20.6,"icon_global":17.9,"jma_gsm":12.6,"gem_global":23},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-22","wind_kmh":20.9,"gust_kmh":20.1,"wind_dir":"SE","wind_dir_deg":157,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.16,"swell_dir":"SE","current_ms":1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":4.1,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.2,"model_winds":{"best_match":null,"gfs_global":25,"icon_global":20.7,"jma_gsm":12.2,"gem_global":25.6},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-23","wind_kmh":17.3,"gust_kmh":18.5,"wind_dir":"S","wind_dir_deg":163,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.18,"swell_dir":"SE","current_ms":0.9,"current_dir":"E","sst_c":31.2,"rain_prev7d_mm":8.8,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.4,"model_winds":{"best_match":null,"gfs_global":16.1,"icon_global":15.3,"jma_gsm":11.4,"gem_global":26.3},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-24","wind_kmh":20.2,"gust_kmh":19.5,"wind_dir":"SE","wind_dir_deg":141,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.7,"swell_m":0.16,"swell_dir":"SE","current_ms":1.2,"current_dir":"N","sst_c":31.2,"rain_prev7d_mm":15.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.4,"model_winds":{"best_match":null,"gfs_global":25.4,"icon_global":19.1,"jma_gsm":13.1,"gem_global":23},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-25","wind_kmh":20.9,"gust_kmh":19.1,"wind_dir":"SE","wind_dir_deg":115,"wave_m":0.36,"wave_dir":"E","wave_period_s":2.8,"swell_m":0.22,"swell_dir":"E","current_ms":1,"current_dir":"N","sst_c":31.2,"rain_prev7d_mm":15.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":3.5,"model_winds":{"best_match":null,"gfs_global":23,"icon_global":19.1,"jma_gsm":17,"gem_global":24.5},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-26","wind_kmh":18.6,"gust_kmh":16.9,"wind_dir":"SE","wind_dir_deg":123,"wave_m":0.38,"wave_dir":"SE","wave_period_s":2.7,"swell_m":0.22,"swell_dir":"E","current_ms":1,"current_dir":"NW","sst_c":31,"rain_prev7d_mm":15.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":1.8,"model_winds":{"best_match":null,"gfs_global":19.2,"icon_global":18.5,"jma_gsm":16.2,"gem_global":20.5},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]},{"slug":"shark-island","name":"Shark Island","region":"Koh Tao & Offshore","lat":10.059,"lng":99.844,"depth_max":25,"exposed_directions":["S","SW","W"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":17.9,"gust_kmh":15.9,"wind_dir":"SE","wind_dir_deg":156,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.3,"swell_m":0.2,"swell_dir":"SE","current_ms":1,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":3,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.6,"model_winds":{"best_match":null,"gfs_global":28.9,"icon_global":13.5,"jma_gsm":12.4,"gem_global":16.9},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-21","wind_kmh":18.3,"gust_kmh":16.2,"wind_dir":"SE","wind_dir_deg":149,"wave_m":0.14,"wave_dir":"SE","wave_period_s":2.7,"swell_m":0.12,"swell_dir":"SE","current_ms":1.1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":2.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.9,"model_winds":{"best_match":null,"gfs_global":20.6,"icon_global":16.3,"jma_gsm":12.6,"gem_global":23.8},"score":67,"rating":"good","factors":["strong current"],"breakdown":{"wind":22,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-22","wind_kmh":20.4,"gust_kmh":19.4,"wind_dir":"S","wind_dir_deg":159,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.16,"swell_dir":"SE","current_ms":1.1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":4.4,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.4,"model_winds":{"best_match":null,"gfs_global":25,"icon_global":18.4,"jma_gsm":12.2,"gem_global":25.9},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-23","wind_kmh":16.9,"gust_kmh":17.7,"wind_dir":"S","wind_dir_deg":163,"wave_m":0.24,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.18,"swell_dir":"SE","current_ms":1.1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":9.1,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.3,"model_winds":{"best_match":null,"gfs_global":16.1,"icon_global":14.1,"jma_gsm":11.4,"gem_global":25.9},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-24","wind_kmh":19.5,"gust_kmh":18.5,"wind_dir":"SE","wind_dir_deg":141,"wave_m":0.26,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.14,"swell_dir":"SE","current_ms":1.2,"current_dir":"N","sst_c":31.3,"rain_prev7d_mm":16,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.4,"model_winds":{"best_match":null,"gfs_global":25.4,"icon_global":17.3,"jma_gsm":13.1,"gem_global":22.3},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":23,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-25","wind_kmh":20,"gust_kmh":18,"wind_dir":"SE","wind_dir_deg":117,"wave_m":0.34,"wave_dir":"E","wave_period_s":2.8,"swell_m":0.26,"swell_dir":"E","current_ms":1.2,"current_dir":"N","sst_c":31.2,"rain_prev7d_mm":16.3,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":3.5,"model_winds":{"best_match":null,"gfs_global":23,"icon_global":16.9,"jma_gsm":17,"gem_global":23},"score":68,"rating":"good","factors":["strong current"],"breakdown":{"wind":25,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-26","wind_kmh":18,"gust_kmh":16.1,"wind_dir":"SE","wind_dir_deg":124,"wave_m":0.36,"wave_dir":"SE","wave_period_s":2.7,"swell_m":0.2,"swell_dir":"E","current_ms":1,"current_dir":"N","sst_c":31,"rain_prev7d_mm":16.3,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2,"model_winds":{"best_match":null,"gfs_global":19.2,"icon_global":16.3,"jma_gsm":16.2,"gem_global":20.2},"score":68,"rating":"good","factors":["strong current"],"breakdown":{"wind":25,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]},{"slug":"white-rock","name":"White Rock","region":"Koh Tao & Offshore","lat":10.108,"lng":99.814,"depth_max":22,"exposed_directions":["W","NW","N"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":17.9,"gust_kmh":15.7,"wind_dir":"SE","wind_dir_deg":157,"wave_m":0.2,"wave_dir":"SE","wave_period_s":2.4,"swell_m":0.2,"swell_dir":"SE","current_ms":0.7,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":2.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.7,"model_winds":{"best_match":null,"gfs_global":29.1,"icon_global":13.4,"jma_gsm":12.4,"gem_global":16.6},"score":73,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-21","wind_kmh":17.9,"gust_kmh":16.3,"wind_dir":"SE","wind_dir_deg":145,"wave_m":0.14,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.12,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":2.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.6,"model_winds":{"best_match":null,"gfs_global":20.2,"icon_global":15.9,"jma_gsm":12.6,"gem_global":23},"score":73,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-22","wind_kmh":20.5,"gust_kmh":19.9,"wind_dir":"S","wind_dir_deg":160,"wave_m":0.24,"wave_dir":"SE","wave_period_s":3,"swell_m":0.2,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":3.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.3,"model_winds":{"best_match":null,"gfs_global":25.2,"icon_global":18.8,"jma_gsm":12.2,"gem_global":25.6},"score":72,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-23","wind_kmh":17.4,"gust_kmh":18.2,"wind_dir":"S","wind_dir_deg":168,"wave_m":0.24,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.22,"swell_dir":"SE","current_ms":0.8,"current_dir":"E","sst_c":31.1,"rain_prev7d_mm":8.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.6,"model_winds":{"best_match":null,"gfs_global":18.3,"icon_global":13.7,"jma_gsm":11.4,"gem_global":26.3},"score":72,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-24","wind_kmh":19.4,"gust_kmh":19.1,"wind_dir":"SE","wind_dir_deg":150,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.2,"swell_dir":"SE","current_ms":1,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":15.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.6,"model_winds":{"best_match":null,"gfs_global":25.1,"icon_global":16.3,"jma_gsm":13.1,"gem_global":23},"score":71,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-25","wind_kmh":20,"gust_kmh":18.5,"wind_dir":"SE","wind_dir_deg":118,"wave_m":0.4,"wave_dir":"E","wave_period_s":3,"swell_m":0.26,"swell_dir":"E","current_ms":0.9,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":15.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4,"model_winds":{"best_match":null,"gfs_global":22.3,"icon_global":16.2,"jma_gsm":17,"gem_global":24.5},"score":71,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-26","wind_kmh":18.2,"gust_kmh":16.6,"wind_dir":"SE","wind_dir_deg":125,"wave_m":0.42,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.24,"swell_dir":"E","current_ms":1,"current_dir":"NW","sst_c":30.9,"rain_prev7d_mm":15.3,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2.3,"model_winds":{"best_match":null,"gfs_global":19.7,"icon_global":16.2,"jma_gsm":16.2,"gem_global":20.5},"score":71,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]},{"slug":"japanese-gardens","name":"Japanese Gardens","region":"Koh Tao & Offshore","lat":10.119,"lng":99.815,"depth_max":12,"exposed_directions":["W","NW","N"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":17.9,"gust_kmh":15.7,"wind_dir":"SE","wind_dir_deg":157,"wave_m":0.2,"wave_dir":"SE","wave_period_s":2.4,"swell_m":0.2,"swell_dir":"SE","current_ms":0.7,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":2.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.7,"model_winds":{"best_match":null,"gfs_global":29.1,"icon_global":13.4,"jma_gsm":12.4,"gem_global":16.6},"score":68,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":-5}},{"date":"2026-04-21","wind_kmh":17.9,"gust_kmh":16.3,"wind_dir":"SE","wind_dir_deg":145,"wave_m":0.14,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.12,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":2.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.6,"model_winds":{"best_match":null,"gfs_global":20.2,"icon_global":15.9,"jma_gsm":12.6,"gem_global":23},"score":68,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":-5}},{"date":"2026-04-22","wind_kmh":20.5,"gust_kmh":19.9,"wind_dir":"S","wind_dir_deg":160,"wave_m":0.24,"wave_dir":"SE","wave_period_s":3,"swell_m":0.2,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":3.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.3,"model_winds":{"best_match":null,"gfs_global":25.2,"icon_global":18.8,"jma_gsm":12.2,"gem_global":25.6},"score":67,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":-5}},{"date":"2026-04-23","wind_kmh":17.4,"gust_kmh":18.2,"wind_dir":"S","wind_dir_deg":168,"wave_m":0.24,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.22,"swell_dir":"SE","current_ms":0.8,"current_dir":"E","sst_c":31.1,"rain_prev7d_mm":8.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.6,"model_winds":{"best_match":null,"gfs_global":18.3,"icon_global":13.7,"jma_gsm":11.4,"gem_global":26.3},"score":67,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":-5}},{"date":"2026-04-24","wind_kmh":19.4,"gust_kmh":19.1,"wind_dir":"SE","wind_dir_deg":150,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.2,"swell_dir":"SE","current_ms":1,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":15.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.6,"model_winds":{"best_match":null,"gfs_global":25.1,"icon_global":16.3,"jma_gsm":13.1,"gem_global":23},"score":66,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":-5}},{"date":"2026-04-25","wind_kmh":20,"gust_kmh":18.5,"wind_dir":"SE","wind_dir_deg":118,"wave_m":0.4,"wave_dir":"E","wave_period_s":3,"swell_m":0.26,"swell_dir":"E","current_ms":0.9,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":15.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4,"model_winds":{"best_match":null,"gfs_global":22.3,"icon_global":16.2,"jma_gsm":17,"gem_global":24.5},"score":66,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":-5}},{"date":"2026-04-26","wind_kmh":18.2,"gust_kmh":16.6,"wind_dir":"SE","wind_dir_deg":125,"wave_m":0.42,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.24,"swell_dir":"E","current_ms":1,"current_dir":"NW","sst_c":30.9,"rain_prev7d_mm":15.3,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2.3,"model_winds":{"best_match":null,"gfs_global":19.7,"icon_global":16.2,"jma_gsm":16.2,"gem_global":20.5},"score":71,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]},{"slug":"twins","name":"Twins","region":"Koh Tao & Offshore","lat":10.117,"lng":99.812,"depth_max":18,"exposed_directions":["W","NW","N"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":17.7,"gust_kmh":15.5,"wind_dir":"SE","wind_dir_deg":155,"wave_m":0.2,"wave_dir":"SE","wave_period_s":2.4,"swell_m":0.2,"swell_dir":"SE","current_ms":0.7,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":3.2,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.8,"model_winds":{"best_match":null,"gfs_global":29.1,"icon_global":12.8,"jma_gsm":12.4,"gem_global":16.6},"score":68,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":-5}},{"date":"2026-04-21","wind_kmh":18.5,"gust_kmh":16.7,"wind_dir":"SE","wind_dir_deg":143,"wave_m":0.14,"wave_dir":"SE","wave_period_s":2.8,"swell_m":0.12,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":2.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.4,"model_winds":{"best_match":null,"gfs_global":20.2,"icon_global":18.1,"jma_gsm":12.6,"gem_global":23},"score":68,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":-5}},{"date":"2026-04-22","wind_kmh":21.3,"gust_kmh":20.5,"wind_dir":"S","wind_dir_deg":159,"wave_m":0.24,"wave_dir":"SE","wave_period_s":3,"swell_m":0.2,"swell_dir":"SE","current_ms":0.9,"current_dir":"NE","sst_c":31,"rain_prev7d_mm":4.4,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.2,"model_winds":{"best_match":null,"gfs_global":25.2,"icon_global":22.1,"jma_gsm":12.2,"gem_global":25.6},"score":67,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":-5}},{"date":"2026-04-23","wind_kmh":17.9,"gust_kmh":18.3,"wind_dir":"S","wind_dir_deg":166,"wave_m":0.24,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.22,"swell_dir":"SE","current_ms":0.8,"current_dir":"E","sst_c":31.1,"rain_prev7d_mm":8.9,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.3,"model_winds":{"best_match":null,"gfs_global":18.3,"icon_global":15.5,"jma_gsm":11.4,"gem_global":26.3},"score":67,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":-5}},{"date":"2026-04-24","wind_kmh":20.3,"gust_kmh":19.9,"wind_dir":"SE","wind_dir_deg":149,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.2,"swell_dir":"SE","current_ms":1,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":16,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.2,"model_winds":{"best_match":null,"gfs_global":25.1,"icon_global":20.1,"jma_gsm":13.1,"gem_global":23},"score":66,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":-5}},{"date":"2026-04-25","wind_kmh":20.9,"gust_kmh":19.3,"wind_dir":"SE","wind_dir_deg":116,"wave_m":0.4,"wave_dir":"E","wave_period_s":3,"swell_m":0.26,"swell_dir":"E","current_ms":0.9,"current_dir":"N","sst_c":31.1,"rain_prev7d_mm":16,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":3.2,"model_winds":{"best_match":null,"gfs_global":22.3,"icon_global":19.8,"jma_gsm":17,"gem_global":24.5},"score":66,"rating":"good","factors":["strong current","spring tide (shallow site)"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":-5}},{"date":"2026-04-26","wind_kmh":18.7,"gust_kmh":16.9,"wind_dir":"SE","wind_dir_deg":123,"wave_m":0.42,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.24,"swell_dir":"E","current_ms":1,"current_dir":"NW","sst_c":30.9,"rain_prev7d_mm":15.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":1.9,"model_winds":{"best_match":null,"gfs_global":19.7,"icon_global":18.2,"jma_gsm":16.2,"gem_global":20.5},"score":71,"rating":"good","factors":["strong current"],"breakdown":{"wind":28,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]},{"slug":"hin-wong-pinnacle","name":"Hin Wong Pinnacle","region":"Koh Tao & Offshore","lat":10.098,"lng":99.85,"depth_max":32,"exposed_directions":["E","NE","SE"],"models_used":["best_match","gfs_global","icon_global","jma_gsm","gem_global"],"forecast":[{"date":"2026-04-20","wind_kmh":18,"gust_kmh":16,"wind_dir":"SE","wind_dir_deg":157,"wave_m":0.22,"wave_dir":"SE","wave_period_s":2.4,"swell_m":0.2,"swell_dir":"SE","current_ms":1,"current_dir":"NE","sst_c":31.1,"rain_prev7d_mm":2.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.49,"tide_highs":[{"time":"17:15","height":1.77}],"tide_lows":[{"time":"02:23","height":0.28}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":7.7,"model_winds":{"best_match":null,"gfs_global":29.1,"icon_global":13.4,"jma_gsm":12.4,"gem_global":16.9},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-21","wind_kmh":18.1,"gust_kmh":16.4,"wind_dir":"SE","wind_dir_deg":150,"wave_m":0.14,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.14,"swell_dir":"SE","current_ms":1.1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":2.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.63,"tide_highs":[{"time":"17:52","height":1.88}],"tide_lows":[{"time":"03:49","height":0.25}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":4.9,"model_winds":{"best_match":null,"gfs_global":20.2,"icon_global":15.9,"jma_gsm":12.6,"gem_global":23.8},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":15,"tide_penalty":0}},{"date":"2026-04-22","wind_kmh":20.5,"gust_kmh":19.9,"wind_dir":"S","wind_dir_deg":161,"wave_m":0.26,"wave_dir":"SE","wave_period_s":3,"swell_m":0.2,"swell_dir":"SE","current_ms":1.1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":4.5,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.68,"tide_highs":[{"time":"18:34","height":1.92}],"tide_lows":[{"time":"05:57","height":0.24}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.4,"model_winds":{"best_match":null,"gfs_global":25.2,"icon_global":18.8,"jma_gsm":12.2,"gem_global":25.9},"score":65,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-23","wind_kmh":17.3,"gust_kmh":18,"wind_dir":"S","wind_dir_deg":166,"wave_m":0.26,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.22,"swell_dir":"SE","current_ms":1.1,"current_dir":"NE","sst_c":31.2,"rain_prev7d_mm":8.8,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.66,"tide_highs":[{"time":"19:20","height":1.89}],"tide_lows":[{"time":"08:04","height":0.23}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":6.4,"model_winds":{"best_match":null,"gfs_global":18.3,"icon_global":13.7,"jma_gsm":11.4,"gem_global":25.9},"score":66,"rating":"good","factors":["strong current"],"breakdown":{"wind":22,"waves":20,"swell":10,"current":0,"viz":14,"tide_penalty":0}},{"date":"2026-04-24","wind_kmh":19.2,"gust_kmh":18.8,"wind_dir":"SE","wind_dir_deg":150,"wave_m":0.26,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.16,"swell_dir":"SE","current_ms":1.2,"current_dir":"N","sst_c":31.3,"rain_prev7d_mm":15.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.54,"tide_highs":[{"time":"20:08","height":1.8}],"tide_lows":[{"time":"08:57","height":0.26}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":5.5,"model_winds":{"best_match":null,"gfs_global":25.1,"icon_global":16.3,"jma_gsm":13.1,"gem_global":22.3},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-25","wind_kmh":19.6,"gust_kmh":18.2,"wind_dir":"SE","wind_dir_deg":118,"wave_m":0.38,"wave_dir":"E","wave_period_s":3,"swell_m":0.3,"swell_dir":"E","current_ms":1.2,"current_dir":"N","sst_c":31.2,"rain_prev7d_mm":15.8,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":1,"tide_range_m":1.34,"tide_highs":[{"time":"20:58","height":1.67}],"tide_lows":[{"time":"09:14","height":0.33}],"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":3.5,"model_winds":{"best_match":null,"gfs_global":22.3,"icon_global":16.2,"jma_gsm":17,"gem_global":23},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}},{"date":"2026-04-26","wind_kmh":18.1,"gust_kmh":16.3,"wind_dir":"SE","wind_dir_deg":125,"wave_m":0.4,"wave_dir":"SE","wave_period_s":2.9,"swell_m":0.22,"swell_dir":"E","current_ms":1,"current_dir":"N","sst_c":31,"rain_prev7d_mm":15.7,"bloom":0,"bloom_source":"Copernicus satellite chlorophyll","chlorophyll_mg_m3":0.26,"tide_spring":0.2,"tide_range_m":null,"tide_highs":null,"tide_lows":null,"tide_source":"WorldTides FES2022","cape_jkg":0,"storm_risk":"low","model_count":4,"model_spread_kmh":2.2,"model_winds":{"best_match":null,"gfs_global":19.7,"icon_global":16.2,"jma_gsm":16.2,"gem_global":20.2},"score":64,"rating":"good","factors":["strong current"],"breakdown":{"wind":21,"waves":20,"swell":10,"current":0,"viz":13,"tide_penalty":0}}]}]}