Google Earth Engine untuk Pemodelan Kesesuaian Lokasi Budidaya Ikan Kerapu (GEE-015)

· 8 min read

Sumberdaya perikanan di Indonesia sangat berlimpah dan dapat dimanfaatkan salah satunya untuk budidaya laut. Budidaya laut perlu didukung data lokasi yang baik agar dalam melakukan budidaya lokasinya sesuai. penentuan lokasi dapat memanfaatkan data penginderaan jauh dan analisis spasial dengan Sistem Informasi Geografis.

Salah satu tool yang mempermudah pemodelan ini yaitu dengan menggunakan Google Earth Engine, dimana dengan menggunakan Google Earth Engine dapat melakukan pemrosesan langsung pada Google Earth Engine dengan area cukup luas tanpa perlu mendownload data.


Data

Data yang digunakan merupakan data yang sudah tersedia di Google Earth Engine yaitu

  • Mosaik Landsat Landsat 8 Collection 1 Tier 1 TOA reflectance tahun 2015 – 2020 (USGS/Google)
  • ETOPO1 is a 1 arc-minute global (NOAA) Amante, C (2009)

Lokasi

Lokasi yang akan dilakukan analisis kesesuaian budidaya ikan kerapu yaitu perairan Laut Jawa

Tahapan Pemrosesan


Langkah 1: Menambahkan Citra

langkah pertama yaitu menambahakan citra Landsat 8, dan Batimetri ETOPO, maka pada masuk ke code box seperti berikut:


Langkah 2: Menambahkan file SHP

Untuk mengimport file SHP dapat dilakukan pada bagian Assets kemudian klik NEW, pilih bagian shape files seperti gambar berikut

File SHP yang telah ditambahkan akan muncul di tab Assets, Untuk menambahkan file SHP tadi dapat diklik pada icon panah ke kanan atau import

This image has an empty alt attribute; its file name is image-19.png

Langkah 3: Memfilter citra

Citra yang akan digunakan perlu untuk difilter waktu perekaman sesuai keinginan disini saya menggunakan rata-rata nilai citra perekaman tahun 1 April 2015 sampai 1 April 2020 dan citra dengan tutupan awan yang sedikit, disini saya memfilter citra dengan tutupan awan 10% dengan dengan script sebagai berikut

var L8filter = L8.filterDate("2015-04-01","2020-04-01").filterMetadata("CLOUD_COVER","less_than",10).mean()

Langkah 4: Membuat masking

Masking disini digunakan untuk menghilangkan bagian yang tidak diperlukan dan menyisakan area penelitian. Masking disini terdiri dari 2 data yaitu masking untuk area kerja, disini menggunakan Polygon batas Laut Jawa dan masking untuk citra landsat yang didak tersedia atau tidak ada data.

//Masking dengan menggunakan polygon batas perairan
var datamask = ee.Image.constant(1).clip(batas).mask()

//Masking dengan data Landsat 8 untuk menghilangkan area yang tidak memiliki nilai dengan melihat salah satu nilai band
var datamask2 = L8filter.expression('b4>=0?1:0',{'b4':L8filter.select('B4')}).eq(1)
Melakukan zoom ke area kerja

zoom dapat dilakukan dengan set center dengan parameter longitude, latitude, dan nilai zoom seperti berikut

Map.setCenter(114,-5,6);

Langkah 5: Memasking citra

Citra Landsat 8 dan Batimetri dimasking dengan menggunakan data masking yang telah dibuat sebelumnya. Masking dilakukan dengan Code “updateMask()”. Masking disini dilakukan 2 kali, maka dengan cara mengulang code “updateMask()”. Nama band dapat diubah sesuai keinginan, misal untuk band batimetri dari data ETopo bernama ‘bedrock’ akan diubah menjadi nama ‘batimetri’ dengan menggunakan code “rename()”

//masking citra Landsat 8
var L8selection = L8filter.updateMask(datamask).updateMask(datamask2)

//masking batimetri
var batimetri = ETPO.select('bedrock').updateMask(datamask).updateMask(datamask2).rename('batimetri')

Langkah 6: Menghitung Klorofil-a

Ekstraksi Klorofil-a dengan menggunakan data Landsat 8 Band Merah, NIR, dan SWIR. Rumus ekstraksi Klorofil-a dengan algoritma yang dikembangkan oleh Nuriya et al. (2010)

Rumus dalam bentuk code dan hasilnya diberi nama ‘chlor_a’ sebagai berikut

var Chla = L8selection.expression(
          '(0.2818*((Merah/(NIR+SWIR))**3.497))',{
            //'((2.41*(NIR/Merah))+0.187)',{
            'NIR':L8selection.select('B5'),
            'SWIR':L8selection.select('B6'),
            'Merah':L8selection.select('B4'),
            'Hijau':L8selection.select('B3'),
        }
  ).rename('chlor_a')

Langkah 7: Menghitung suhu permukaan laut

Ekstraksi suhu permukaan laut dengan menggunakan data Landsat 8 Band 10 dan 11. Rumus ekstrkasi suhu permukaan laut dengan algoritma Split window yang dikembangkan oleh Cahyono (2017)

Rumus dalam bentuk code dan hasilnya diberi nama ‘SPL’ sebagai berikut

var SPL1 = L8selection.expression(
          '((BT10-273)+(2.946*((BT10-273)-(BT11-273)))-0.038)',{
            'BT10':L8selection.select('B10'),
            'BT11':L8selection.select('B11'),
          }).rename('SPL')

Langkah 8: Menghitung muatan padatan tersuspensi

Ekstraksi muatan padatan tersuspensi dengan menggunakan data Landsat 8 Band 4. Rumus ekstrkasi muatan padatan tersuspensi dengan algoritma yang dikembangkan oleh Budhiman (2004)

Rumus dalam bentuk code dan hasilnya diberi nama ‘MPT’ sebagai berikut

var MPT = L8selection.expression('8.1429**(23.704*B4)',{
  'B4':L8selection.select('B4')
}).rename('MPT')

Langkah 9: Melakukan pembobotan parameter
Pengharkatan

Melakukan pembobotan parameter yang telah dihitung sebelumnya dengan mengacu pada sebagian parameter dari Kangkan dkk. (2007). Tabel harkat setiap parameter sebagai berikut

Harkat531
Batimetri (meter) 15-25 5 – 15  atau 26 – 35 <5 atau >35
Klorofil-a >10 4 – 10 <4
Suhu Permukaan laut (⁰C) 28 – 30 25 – 27 atau 31 – 32 <25 atau >32
Muatan Padatan Tersuspensi (mg/l) <25 25 – 50 >50

adapun rumus logika sebagai berikut:

|| ( atau )

&& ( dan )

A?B:C ( jika A maka B, jika tidak A maka C )

Adapun code untuk mengharkatkan nilai parameter dari hasil perhitungan sebelumnya, sebagai berikut:

//harkat batimetri
var harkatbati = batimetri.expression(
              'batimetri>-5||batimetri<-35?1'+ //kedalama <5m atau >35mbobot 1
              ': batimetri<=-5&&batimetri>=-15||batimetri<=-26&&batimetri>=-35?3'+ //kedalaman 5-15m bobot 3
              ': batimetri<=-15&&batimetri>=-25?5'+ //kedalaman 15-25m bobot 5
              ': 0',
              {'batimetri':batimetri.select('batimetri')}).rename('harkatbati')
                           
//harkat klorofil-a
var harkatklorofil = Chla.expression(
              'chla<4?1'+ //klorofil <4 bobot 1
              ': chla>=4&&chla<=10?3'+ //klorofil 4-10 bobot 3
              ': chla>10?5'+ //klorofil >10 bobot 5
              ': 0',
              {'chla':Chla.select('chlor_a')}
              ).rename('harkatklorofil')
                 
//harkat suhu permukaan laut              
var harkatspl = SPL1.expression(
              'spl<25&&spl>35?1'+ //suhu <25C atau >35c bobot 1
              ': spl>=25&&spl<=27||spl>=31&&spl<=32?3' + //suhu 25-27C atau 31-32C bobot 3
              ': spl>=28&&spl<=30?5'+ //suhu 28-30C bobot 5
              ': 0',
              {'spl':SPL1.select('SPL')}
              ).rename('harkatspl')
                  
//harkat muatan padatan tersuspensi              
var harkatmpt = MPT.expression(
              'mpt>50?1'+  //padatan tersuspensi >50mg/l bobot 1
              ': mpt>=26&&mpt<=50?3'+ //padatan tersuspensi 26-50mg/l bobot 3
              ': mpt<25?5'+ //padatan tersuspensi <25mg/l bobot 5
              ': 0', {'mpt':MPT.select('MPT')}
              ).rename('harkatmpt')
Pembobotan

Bobot setiap parameter mengacu pada Kangkan dkk. (2007) pada tabel berikut

Parameter Bobot
Batimetri (meter) 3
Klorofil-a 1
Suhu Permukaan laut (⁰C) 2
Muatan Padatan Tersuspensi (mg/l) 3

Pembobotan dilakukan dengan cara mengkalikan dan menambahkan setiap parameter. untuk mengalikan dengan code “multiply()” dan untuk menambahkan dengan code “add()”, hasil pembobotan ini diberi nama ‘bobot’. Code untuk pembobotan sebagai berikut

//pembobotan              
var bobot = harkatbati.multiply(3).add(harkatklorofil.multiply(1)).add(harkatspl.multiply(2)).add(harkatmpt.multiply(3)).rename('bobot') //bobot batimetri x3, klorofil x1, suhu x2, padatan tersuspensi x3

Langkah 10: Pengkelasan

Hasil pembobotan perlu untuk dikelaskan agar lebih mudah untuk dibedakan. Pengelasan menjadi 4 kelas yaitu sangat sesuai, sesuai, cukup sesuai, dan sesuai dengan menggunakan interval pengelasan sama. Hasil pengkelasan ini akan memiliki nilai piksel 1 sampi dengan 4, dimana 1 berarti tidak sesuai dan 4 berarti sangat sesuai

Hasil pengelasan perlu dilakukan masking lagi untuk menghilangkan pixel dengan nilai yang tidak diinginkan dari hasil pengelasan karena saat menggunakan code logika, pada bagian masking yang sebelumnya akan berisi nilai sehingga perlu dihilangkan. Data masking menggunakan data yang telah dibuat sebelumnya.

//Mengkelaskan hasil pembobotan
var kesesuaian = bobot.expression(
                'bobot<=11.25?1'+
                ': bobot<=22.5?2'+
                ': bobot<=33.75?3'+
                ': bobot<=45?4'+
                ': 0',{
                  'bobot':bobot.select('bobot')
                }
).updateMask(datamask).updateMask(datamask2)

Langkah 11: Melakukan simbolisasi

Penentuan simbol warna dengan menggunakan code HEX warna yang dapat dicari dari katalog misalanya disini, dalam simbol perlu ditentukan nilai yang akan dimunculkan, berdasarkan hasil pengelasan sebelumnya menggunakan nilai 1 sampai 4 maka nilai minimum diisi 1 dan nilai maksimum diisi 4. Untuk pewarnaan diisikan sesuai urutan dari minimum ke maksimum. Urutan warna disini yaitu 1 dengan warna ff2a1f, 2 dengan warna ffbb23, 3 dengan warna e6ff1b, dan 4 dengan warna 19ff0a.

Setelah simbol dibuat maka peta dapat ditampilkan dengan menggunakan “Map.addLayer()” dengan variabel hasil pengelasan dan simbol seperti code berikut

//menentukan simbol warna
var simbol = {"min":1,"max":4,"palette":["ff2a1f","ffbb23","e6ff1b","19ff0a"]}

//menampilkan peta dengan menggunakan simbol
Map.addLayer(kesesuaian, simbol)

Langkah 12: Membuat Informasi Peta

Informasi peta ini terdiri dari Judul Peta dan Legenda. urutan script yang ditampilkan adalah script yang paling bawah akan ditampilkan di atas sehingga code legenda ditulis terlebih dahulu kemudian code untuk membuat judul peta dengan code sebagai berikut

//Membuat Legenda
//Menentukan Posisi Legenda
var legend = ui.Panel({
  style: {
    position: 'bottom-left',
    padding: '8px 15px'
  }
});
 
//Membuat judul legenda
var legendTitle = ui.Label({
  value: 'Kesesuaian',
  style: {
    fontWeight: 'bold',
    fontSize: '18px',
    margin: '0 0 4px 0',
    padding: '0'
    }
});
legend.add(legendTitle);
 
// Membuat baris legenda yang berisi kotak warna dan nama kelas
var makeRow = function(color, name) {
 
      // Membuat kotak simbol
      var colorBox = ui.Label({
        style: {
          backgroundColor: '#' + color,
          padding: '8px',
          margin: '0 0 4px 0'
        }
      });
 
      // Membuat nama kelas
      var description = ui.Label({
        value: name,
        style: {margin: '0 0 4px 6px'}
      });
 
      // memposisikan simbol dan nama kelas
      return ui.Panel({
        widgets: [colorBox, description],
        layout: ui.Panel.Layout.Flow('horizontal')
      });
};
 
//  Menentukan warna kelas
var palette =['19ff0a','e6ff1b','ffbb23', 'ff2a1f'];
 
// Menentukan nama kelas
var names = ['Sangat Sesuai','Sesuai','Cukup Sesuai','Tidak Sesuai'];
 
// Menambahkan warna dan nama kelas sesuai dengan urutan
for (var i = 0; i < 4; i++) {
  legend.add(makeRow(palette[i], names[i]));
  }  
Map.add(legend);


//Membuat Judul Peta
//Menentukan posisi Judul Peta
var title = ui.Panel({
  style: {
    position: 'bottom-left',
    padding: '8px 15px'
  }
});

//Membuat isi Judul Peta
var textTitle = ui.Label({
  value: 'Kesesuaian Budidaya Ikan Kerapu',
  style: {
    fontWeight: 'bold',
    fontSize: '20px',
    margin: '0 0 4px 0',
    padding: '0'
    }
});
title.add(textTitle);
Map.add(title)

Peta Hasil Analisi Parametrik Kesesuaian Budidaya Ikan Kerapu dengan Google Earth Engine


Daftar Pustaka
  • Amante, C. and B. W. Eakins, 2009. ETOPO1 1 Arc-Minute Global Relief Model: Procedures, Data Sources and Analysis. NOAA Technical Memorandum NESDIS NGDC-24, 19 pp
  • Budhiman, S. 2014. Mapping TSM concentration form multisensory satellite images in turbid tropical coastal waters of Mahakam Delta-Indonesia. [tesis]. Netherlands (ND): International Institute for Geo-Information Sciebce and Earth Observasion
  • Cahyono AB, Armono HD, Saptarini D. 2017. Estimation of sea surface temperature (SST) using split window methods for monitoring industrial activity in coastal area. Applied Mechanics and Materials.
  • Kangkan AL, Hartoko A, Sumito. 2007. Studi penentuan lokasi untuk pengembangan budidaya laut berdasarkan parameter fisika, kimia, dan biologi di Teluk Kupang, Nusa Tenggara Timur. Jurnal Pasir  Laut.
  • Nuriya H, Hidayah Z, Nugraha WA. 2010. Pengukuran konsentrasi klorofil-a dengan pengolahan citra landsat ETM-7 daan uji laboratorium di Perairan Selat Madura bagian Barat. Jurnal Kelautan.