Sunday, 16 July 2017

Menyusun Laporan Bulanan Magnet Bumi Dengan Python

Postingan kali ini tidak akan membahas mengenai GMT, tetapi mengenai pekerjaan rutin di kantor saya. Pekerjaan rutin tersebut adalah penyusunan laporan bulanan magnet bumi. Untuk menyusun laporan bulanan magnet bumi ini, dulu saya harus menghitung data magnet bumi rata-rata per menit menjadi rata-rata per jam secara manual menggunakan excel. Pekerjaan ini cukup memakan waktu. Kini saya telah menulis program Python untuk menyusun laporan bulanan ini. Input yang dibutuhkan adalah data magnet bumi dengan format IAGA-2002. Untuk menjalankan program, pastikan di komputer anda sudah terinstal Python 2.7. Pastikan juga modul-modul berikut sudah terpasang :
  • PyQt4
  • numpy
  • openpyxl
  • Matplotlib
  • Pillow


Thursday, 18 May 2017

Menampilkan Wind Barbs dengan GMT

Disini saya akan menjelaskan cara menampilkan Wind Barbs dengan GMT 5. Wind Barbs adalah diagram yang menunjukkan arah dan kecepatan angin. Untuk menampilkan diagram ini, kita harus membuat file definisi simbol Wind Barbs. File ini saya dapat dari sebuah forum di website GMT dan saya modifikasi agar mampu menampilkan data hingga kecepatan lebih dari 200 knot. File definisi tersebut dapat didownload disini. Setelah didownload, simpan di C:\programs\gmt5\share\custom. Download contoh data angin disini dan file cpt disini.


Monday, 24 April 2017

Membuat Animasi Peta Seismisitas

Kali ini saya akan berbagi cara membuat animasi dari peta seismisitas. Pada animasi ini, gempa akan muncul sesuai waktu kejadian dan gempa-gempa yang terdahulu lama kelamaan akan berubah transparansinya. Disini saya menggunakan GMT 5.3.1 di Windows 7. Animasi ini bisa juga dijalankan di Linux namun ada beberapa bagian yang harus dirubah. Sebelumnya pastikan di komputer anda telah terpasang program ImageMagick. Program ini akan saya gunakan untuk mengonversi kumpulan file image menjadi satu file GIF.


Pertama-tama buatlah file .bat berikut dan download file-file pendukung yang sudah ada di link-link dibawah ini kemudian jalankan :

>> set F=animasi.ps
>> set R=95.85/96.5/5/5.65
>> set JM=15
>> set data=data.txt
>> 
>> mkdir tmp
>> @echo off
>> #BARIS AWAL DATA SETELAH HEADER ADALAH BARIS KE 14
>> set start=14
>> set num2=1 
>> for /f "delims=*" %%a in ('gawk "END {print NR}" %data%') do set stop=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $1}" %data%') do set year=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $2}" %data%') do set month=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $3}" %data%') do set day=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $4}" %data%') do set hour=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $5}" %data%') do set minute=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-|.]" "NR==%start% {printf \"%%i\", $6}" %data%') do set second=%%a
>> 
>> #HITUNG JUMLAH DETIK
>> set /a z=(14-100%month%%%100)/12, y=10000%year%%%10000-z
>> set /a ut=y*365+y/4-y/100+y/400+(153*(100%month%%%100+12*z-3)+2)/5+%day%-719469
>> set /a waktu=ut*86400+100%hour%%%100*3600+100%minute%%%100*60+100%second%%%100
>> gawk "NR==%start%  {print %waktu%-25200,$0}" %data% > datatmp
>> 
>> :loop
>> set /a start= %start% + %num2%
>> if %start% GTR %stop% goto close
>> goto open
>> 
>> :open
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $1}" %data%') do set year=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $2}" %data%') do set month=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $3}" %data%') do set day=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $4}" %data%') do set hour=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-]" "NR==%start% {printf \"%%i\", $5}" %data%') do set minute=%%a
>> for /f "delims=*" %%a in ('gawk -F"[\t|:|-|.]" "NR==%start% {printf \"%%i\", $6}" %data%') do set second=%%a
>> set /a z=(14-100%month%%%100)/12, y=10000%year%%%10000-z
>> set /a ut=y*365+y/4-y/100+y/400+(153*(100%month%%%100+12*z-3)+2)/5+%day%-719469
>> set /a waktu=ut*86400+100%hour%%%100*3600+100%minute%%%100*60+100%second%%%100
>> gawk "NR==%start%  {print %waktu%,$0}" %data% >> datatmp
>> goto loop
>> 
>> :close
>> echo on
>> 
>> #MENAMBAHKAN WAKTU SATU JAM SEBELUM DATA AWAL DAN SATU JAM SETELAH DATA AKHIR DENGAN STEP 360 DETIK ATAU 6 MENIT
>> for /f "delims=*" %%a in ('gawk "NR==1 {print $1-3600}" datatmp') do set starteq=%%a
>> for /f "delims=*" %%a in ('gawk "END {print $1+3600}" datatmp') do set stopeq=%%a
>> set step=360
>> 
>> :loopeq
>> set /a starteq= %starteq% + %step%
>> if %starteq% GTR %stopeq% goto closeeq
>> goto openeq
>> 
>> :openeq
>> #MEMBUAT PETA SEISMISITAS
>> pscoast -R%R% -JM%JM% -Dh -W1 -K -Slightblue -Gpalegreen4 -B0.3 > %F%
>> psxy -R -JM sesar.gmt -K -O -W1,black >> %F%
>> psxy -R -JM jlnlokal.gmt -K -O -W1,gray >> %F%
>> psxy -R -JM jlnkolektor.gmt -K -O -W1,white >> %F%
>> psxy -R -JM jlnarteri.gmt -K -O -W2,khaki2 >> %F%
>> echo 96 5.32 Sigli | pstext -R -JM -O -K -F+f12,Bookman-Demi >> %F%
>> 
>> #SET TRANSPARANSI UNTUK DATA GEMPA YANG SUDAH TERJADI
>> gawk "{if ($1<=%starteq%) print $5,$4,$6,$7*0.04}" datatmp | psxy -R -JM -Sci -Ctabel.cpt -W1 -O -t80 -K >> %F%
>> gawk "{if ($1>%starteq% && $1<=%starteq%+%step%) print $5,$4,$6,$7*0.04}" datatmp | psxy -R -JM -Sci -Ctabel.cpt -W1 -O -t60 -K >> %F%
>> gawk "{if ($1>%starteq%+%step% && $1<=%starteq%+%step%+%step%) print $5,$4,$6,$7*0.04}" datatmp | psxy -R -JM -Sci -Ctabel.cpt -W1 -O -t40 -K >> %F%
>> gawk "{if ($1>%starteq%+%step%+%step% && $1<=%starteq%+%step%+%step%+%step%) print $5,$4,$6,$7*0.04}" datatmp | psxy -R -JM -Sci -Ctabel.cpt -W1 -O -t20 -K >> %F%
>> gawk "{if ($1>%starteq%+%step%+%step%+%step% && $1<=%starteq%+%step%+%step%+%step%+%step%) print $5,$4,$6,$7*0.04}" datatmp | psxy -R -JM -Sci -Ctabel.cpt -W1 -O -K >> %F%
>> gawk "BEGIN {print strftime(\"%%d-%%m-%%Y %%H:%%M:00 UTC\",%starteq%);}" | gawk "{print 96.35,5.6,$0}" | pstext -R -JM -O -F+f12,Bookman-Demi -K >> %F%
>> pscoast -R95/99/2/6 -JM4 -Dh -W1 -K -O -Slightblue -Gwhite -B3::wEsN --MAP_FRAME_TYPE=plain --FONT_ANNOT_PRIMARY=8p >> %F%
>> echo 95.85 5 > kotak
>> echo 95.85 5.65 >> kotak
>> echo 96.5 5.65 >> kotak
>> echo 96.5 5 >> kotak
>> echo 95.85 5 >> kotak
>> psxy -R -JM kotak -O -W1,red >> %F%
>> psconvert -A -Tg -P %F% -Ftmp\%starteq% -E100
>> 
>> goto loopeq
>> :closeeq
>> 
>> #KONVERSI KE FILE GIF DENGAN DELAY 10 (FPS=100/10=10) DAN LOOP 0 (KEMBALI KE AWAL)
>> convert -delay 10 -loop 0 tmp/*.png animasi.gif
>> del datatmp gmt.history kotak %F% 
>> rd /S /Q tmp

Proses ini akan memakan waktu yang cukup lama tergantung kemampuan komputer. Anda juga dapat menggunakan data gempa anda sendiri. Pada animasi diatas, saya mendownload data dari repogempa BMKG dan menggunakan data gempa Pidie Jaya yang terjadi akhir 2016 silam. Selamat mencoba. Salam.