Series: Belajar MATLAB

Modul 7: Tropical Cyclone

Mr Dhuha
Mr Dhuha
08 Juni 2026 · 5 menit baca
Modul 7: Tropical Cyclone

7.1 IBTrACS — Database Siklon Tropis Global

IBTrACS (International Best Track Archive for Climate Stewardship) adalah database resmi WMO yang mengkompilasi data jalur siklon tropis dari seluruh dunia sejak 1842. Data tersedia dalam format NetCDF dan CSV dari ncei.noaa.gov/products/international-best-track-archive.

% ── 7.1 Membaca IBTrACS ──────────────────────────────────
fname_tc = 'IBTrACS.WP.v04r00.nc';   % Wilayah Western Pacific

% Variabel utama
lon_tc  = ncread(fname_tc, 'lon');       % [storm x time]
lat_tc  = ncread(fname_tc, 'lat');
wind_tc = ncread(fname_tc, 'wmo_wind'); % Kecepatan angin maksimum (knot)
pres_tc = ncread(fname_tc, 'wmo_pres'); % Tekanan minimum (hPa)
year_tc = ncread(fname_tc, 'season');   % Tahun
name_tc = ncread(fname_tc, 'name');     % Nama siklon

fprintf('Jumlah total storm: %d\n', size(lon_tc, 1))

% ── 7.2 Plot Track Siklon ─────────────────────────────────
% Filter: hanya tahun 2000-2023, wilayah Indonesia (95-141E, 30S-20N)
years = squeeze(year_tc);
i_storms = find(years >= 2000 & years <= 2023);

figure('Position', [50 50 1200 700])
hold on

for i = i_storms'
    lo = lon_tc(i, :);
    la = lat_tc(i, :);
    ws = wind_tc(i, :);
    
    valid = ~isnan(lo) & ~isnan(la);
    if sum(valid) < 2; continue; end
    
    % Warna berdasarkan intensitas
    max_ws = nanmax(ws);
    if max_ws >= 130
        clr = [0.6 0 0];        % Super typhoon: merah tua
    elseif max_ws >= 96
        clr = [0.9 0.2 0.2];    % Typhoon: merah
    elseif max_ws >= 64
        clr = [1 0.6 0];        % Severe TS: oranye
    else
        clr = [0.3 0.5 1];      % TS: biru
    end
    
    plot(lo(valid), la(valid), '-', 'Color', clr, 'LineWidth', 0.8)
end

load coastlines
plot(coastlon, coastlat, 'k', 'LineWidth', 0.5)
xlabel('Longitude'); ylabel('Latitude')
title('Track Siklon Tropis Western Pacific 2000-2023')
xlim([90 180]); ylim([-15 35])
grid on

7.3 Density Map Siklon

% Density map menggunakan histogram 2D
res = 2;   % Resolusi 2 derajat
lon_bins = 90:res:180;
lat_bins = -15:res:35;

density = zeros(length(lon_bins)-1, length(lat_bins)-1);

for i = i_storms'
    lo = lon_tc(i, :);
    la = lat_tc(i, :);
    valid = ~isnan(lo) & ~isnan(la);
    
    for t = find(valid)
        [~, il] = histc(lo(t), lon_bins);
        [~, ila] = histc(la(t), lat_bins);
        if il > 0 && ila > 0
            density(il, ila) = density(il, ila) + 1;
        end
    end
end

% Normalisasi ke track density per tahun per degree^2
density_norm = density / (2023-2000+1) / res^2;

figure
imagescn(lon_bins(1:end-1)+res/2, lat_bins(1:end-1)+res/2, density_norm')
cmocean('matter')
colorbar('Label', 'Track density (per tahun per deg^2)')
title('Track Density Siklon Tropis (2000-2023)')

Komentar & Diskusi