Baca NetCDF dgn Matlab

29 07 2005

Banyak data meteorologi dan oseanografi yang disimpan dengan format NetCDF (network Common Data Form, informasi lengkap tentang “apa itu NetCDF” bisa anda baca di sini). Pada artikel kali ini akan dibahas bagaimana caranya membaca file dengan format NetCDF (biasanya dengan extention “nc”) dengan menggunakan Matlab. Kenapa Matlab? karena saya terbiasa pakai Matlab, jadi nggak mungkin kan kalau saya nulis artikel tentang “gimana membuka file NetCDF dengan fortran”. Lagian artikel ini sebenarnya juga saya terjemahin secara bebas dari sini. Tapi bukan sekedar nerjemahin lho, sebelumnya saya juga sudah mencobanya. OK, tanpa berpanjang lebar, mari kita mulai sekarang pembahasannya.

Syarat untuk bisa mempraktekan tips ini:

  1. Anda sudah meng-install Matlab di PC anda (terserah mau yang bajakan atau yang berlisensi).
  2. Di Matlab yang anda install, toolbox untuk NetCDF juga sudah ter-install. Coba cek dengan mengetikkan: help netcdf, jika keluar uraian tentang bagaimana menggunakan netcdf, itu berarti toolbox netcdf sudah ter-install. Jika keluar netcdf.m not found, apa boleh buat anda terpaksa harus ke sini dulu untuk meng-install-nya.
  3. Anda sudah memiliki library netcdf.dll dan sebuah program kecil bernama ncdump.exe di PC anda. Jika belum anda bisa kunjungi alamat ini dan ambil file netcdf-3.5.win32bin.zip (ini untuk pengguna Windows) dan ekstrak di direktori yang anda sukai. Jangan lupa untuk mengeset path supaya program ncdump bisa dipanggil dari direktori kerja anda (jika ditaruh di direktori yang berbeda). Cara set path yang paling mudah (dari command prompt, misal ncdump ada di c:\programs\netcdf) adalah dengan mengetikkan set path=c:\programs\netcdf.
  4. Anda punya file dengan format NetCDF yang mau dibuka :)

Baiklah, jika syarat sudah terpenuhi semuanya, mari kita mulai pembahasan kita di sini. Misalkan file dengan format NetCDF yang hendak anda buka adalah slp.1994.nc, maka ketikan:

ncdump -h slp.1994.nc

dari command prompt untuk melihat header file tersebut (pada tahap ini anda belum masuk ke Matlab). Header perlu dilihat terlebih dahulu untuk mengetahui spesifikasi dari file yang hendak anda buka. Hasil perintah tersebut akan menghasilkan keluaran sebagai berikut:

netcdf slp.1994 {
dimensions:
lon = 144 ;
lat = 73 ;
time = UNLIMITED ; // (1460 currently)
variables:
float lat(lat) ;
lat:units = “degrees_north” ;
lat:actual_range = 90.f, -90.f ;
lat:long_name = “Latitude” ;
float lon(lon) ;
lon:units = “degrees_east” ;
lon:long_name = “Longitude” ;
lon:actual_range = 0.f, 357.5f ;
double time(time) ;
time:units = “hours since 1-1-1 00:00:0.0” ;
time:long_name = “Time” ;
time:actual_range = 17470320., 17479074. ;
time:delta_t = “0000-00-00 06:00:00” ;
short slp(time, lat, lon) ;
slp:long_name = “4xDaily Sea Level Pressure” ;
slp:valid_range = 87000.f, 115000.f ;
slp:actual_range = 92960.f, 111610.f ;
slp:units = “Pascals” ;
slp:add_offset = 119765.f ;
slp:scale_factor = 1.f ;
slp:missing_value = 32766s ;
slp:precision = 0s ;
slp:least_significant_digit = -1s ;
slp:GRIB_id = 2s ;
slp:GRIB_name = “PRMSL” ;
slp:var_desc = “Sea Level Pressure\n”,
“P” ;
slp:dataset = “NMC Reanalysis\n”,
“L” ;
slp:level_desc = “Sea Level\n”,
“I” ;
slp:statistic = “Individual Obs\n”,
“I” ;
slp:parent_stat = “Other\n”,
“-” ;

// global attributes:
:Conventions = “COARDS” ;
:title = “4x daily NMC reanalysis (1994)” ;
:base_date = 1994s, 1s, 1s ;
:history = “created 95/02/06 by Hoop (netCDF2.3)” ;
:description = “Data is from NMC initialized reanalysis\n”,
“(4x/day). It consists of most variables interpolated to\n”,
“pressure surfaces from model (sigma) surfaces.” ;
:platform = “Model” ;
}

Secara garis besar saya dapat sampaikan di sini ringkasan dari keluaran di atas yaitu bahwa file slp.1994.nc adalah file yang berisi data slp (Sea Level Pressure) 6 jam-an dengan format matriks (waktu,lintang,bujur), dimana ada 1460 selang waktu, 73 sel arah lintang dan 144 sel arah bujur. Waktu dimulai dari pukul 00:00, lintang dari 90LU s.d. 90LS dan bujur dari 0 s.d. 360. Satuan SLP adalah Pascal, dimana jika ingin mendapatkan harga slp sesungguhnya harus dikalikan dulu dengan scale_factor dan ditambahkan dengan add_offset (slp_terekstrak=(slp*scale_faktor)+add_offset).

Setelah kita mengetahui header-nya, jalankan program Matlab. Dari layar Matlab ketikkan:

nc=netcdf(‘slp.1994.nc’,’nowrite’);

untuk membuka file NetCDF tersebut di atas.

Misalkan selanjutnya kita akan mengestrak data lintang, bujur dan slp pada waktu ke-1, maka kita dapat mengetikkan perintah berikut:

ygrid=nc{‘lat’}(:);
xgrid=nc{‘lon’}(:);
slp=nc{‘slp’,1}(1,:,:);

catatan:

  • argumen 1 pada bagian nc{‘slp’,1} berarti anda mengekstrak data slp dengan mengalikannya dengan scale_factor dan menambahkan pula add_offset pada hasil ekstrak anda.
  • argumen 1 pada (1,:,:) berarti anda mengekstrak data slp hanya pada waktu ke-1 di semua sel. Jika anda ingin mengekstrak data selama 1 hari, anda dapat memberikan argumen (1:4,:,:). Atau jika anda ingin mengekstrak semuanya gunakan argumen (:,:,:).

OK deh ya… selamat mencoba, semoga lancar. Kalau ada apa-apa, tinggalkan saja pesan di bagian pesan pada blog ini. Pesan di rumah makan Padang: “jika anda puas, beri tahu teman, jika anda tidak puas, beritahu kami”.


Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: