Berkenalan dengan google earth engine terjadi pada bulan Maret 2020 saat pandemi corona melanda di Indonesia dan berbagai sektor terkena imbasnya. Hampi semua aktivitas kantor “dirumahkan”, sedangkan pangan tidak boleh berhenti. Lalu bagaimana cara kita mengestimasi luas panen dan laporan panen jika tidak melihat ke lapangan?

Setelah browsing di internet dengan tambahan obrolan dari teman yang berkompeten di bidangnya, maka tercetuslah mencoba aplikasi google earth engine. Google earth engine sebenarnya tidak jauh berbeda dengan aplikasi pemetaan lainnya seperyi Arcgis dan lain – lain. namun, keistimewaan dari google erath adalah:

Open source

Tidak perlu memikirkan licensi jika menggunakan google earth engine. Aplikasi ini sangat cocok bagi orang dari tingkat pemula hingga mahir.bahkan, output gambar dari google earth engine sudah digunakan oleh berbagai macam artikel jurnal internasional. Cukup mendaftar ke google earth engine https://earthengine.google.com/  dengan syarat sudah memiliki akun gmail saja karna ini satu grup dengan aplikasi web gmail yang lain. Nanti akan ada sedikit pertanyaan tentang untuk apa aplikasi ini akan digunakan dan pekerjaan anda sebagai apa, dan lain – lain. silahkan saja diisi, dan selanjutnya nanti akan ada email yang masuk sebagai aktivasi dan ada link ke https://code.earthengine.google.com/ untuk mulai menggunakannya.

Dataset lengkap dari berbagai macam satelit

Saya pribadi hanya pernah menggunakan arcgis, tapi sebagai orang awam masih bingung jika ingin menggunakan satelit sentinel, landsat, Modis, dan lain lain. sedangkan di google earth engine semua itu tinggal kita tulis saja codingnya dan sedah disediakan semuanya oleh google, bahkan citra satelit minggu lalu atau kemarin jika update satelitnya harian.

Custom

Saya katakan sangat custom karena aplikasi ini menggunakan coding untuk mendapatkan gambar citra yang dikehendaki. Saya pribadi menilai jika menggunakan arcgis harus mencari buku atau literatur jika ingin clip peta atau calculate area, legenda, dan lain lain karena menunya sudah ditentukan. Tapi di google earth ini semua terserah kita sesuai tujuan kita menggunakannya. Memang hal ini bisa menjadi kekurangan karena sebagai orang awam biasanya tidak tau apa yang harus diketik. Namun, ternyata panduan dan tutorial sudah banyak bertaburan baik blog ataupun youtube. Saya sendiri mengambil coding dari jurnal yang biasanya memberikan link sourcenya. Jadi tidak perlu kuatir, pengguna google earth ini sudah banyak.

Di blog ini saya akan menuliskan beberapa pengalaman yang telah saya lakukan menggunakan google earth. Sesuai dengan latar belakang diatas, saya berkenalan google earth untuk menghitung berapa luas fase pertumbuhan sehingga diketahui berapa perkiraan luas panen.

Sebenarnya, ada aplikasi yang sudah disiapkan oleh kementerian pertanian yakni SC2 atau sentinel 2 dengan luas di tiap fase pertumbuhan di tingkat kecamatan. Kesan saya karena hanya menampilkan luas lahan saja, maka sulit untuk dilakukan verifikasi dilapangan. Tentu susah kita meyakinkan penyuluh lapangan dengan data langsung tabel sekian hektar, tanpa bisa menunjukkan dimana letak sawah tersebut. Menggunakan google earth selain kita mengetahui luas tiap fase pertumbuhan padi, kita juga akan mendapatkan peta di tingkat kecamatan, bahkan desa jika kia memiliki source administrasi desa dan source peta lahan baku sawah.

Tapi sebelumnya, saya akan membuat disclaimer terlebeih dahulu bahwa yang saya tuliskan disini adalah pengalaman orang awam yang baru belajar pertama kali dengan pemetaan dan google earth engine.

Pengenalan Komponen Google Earth Engine

Pada artikel ini saya akan tuliskan bagian bagian dari google earth tentunya dengan bahasa saya sendiri. Jika sudah berhasil membuat akun, dan masuk ke google earth engine, dibagi menjadi 3 kolom, bagian paling kanan saya sebut sebagai perpustakaan (no1) karena berisi tentang script yang tersimpan, dokumen atau tutorial google serta file file yang kita upload ke google earth engine dengan kapasitas 10 Gb. File yang kita simpan bisa berupa peta dalam bentuk shp atau gambar peta dari satelit.

tampilan google earth engine
tampilan google earth engine

Kemudian no 2 tempat code yang akan dituliskan untuk mendapatkan peta atau informasi lain di google earth engine. Pengalaman saya, saya tidak menulis coding manual, tetapi mencari code dari source yang lain dengan copy paste, atau biasa dikenal ATM, Amati, Tiru, Modifikasi. Bukan jiplak ya…

Kolom no 3 merupakan console, inspector, dan task.  Console nanti berisi table, grafik, atau gambar yang muncul sesuai permintaan yang kita tulis di bagian coding. Task merupakan prosessing google earth engine untuk upload, dan eksport gambar. Sedangkan inspector bisa kita gunakan untuk melihat nilai pada point yang kita pilih di area peta untuk melihat nilai – nilai yang tertera pada point tersebut. Misalnya nilai ndvi, nilai ndwi tergantung prossesing apa yang kita tuliskan di coding.

Menambahkan aset geometry ke dalam Google Earth Engine

Sebelum melangkah lebih jauh dalam pembuatan script di Google Earth Engine, sebaiknya kita memahami bagaimana cara menambahkan aset geometry di dalam Google Earth Engine sehingga ketika kita bermain script sudah fokus kedalam AOI (Area of Interest).

Pada panel sebelah kiri tampilan Google Earth Engine terdapat tab script, Docs, dan Asset. Asset sendiri merupakan file yang bisa kita simpan berupa gambar, shp dalam bentuk tabel, dan juga koleksi koleksi gambar dari citra yang kita simpan. Saat artikel ini ditulis, setiap akun mendapat kapasitas free sebesar 10 Gb.

Sebenarnya tanpa import asset kita bisa belajar Google Earth engine dengan menggunakan point, rectangle, atau shape custom yang kita klik kedalam peta google earth engine seperti gambar dibawah. Klik tanda geometry di kanan atas map, kemudian pilih area menggunakan mouse atau kursor. Maka di script akan muncul import (1 entry) var geometry, yang menandakan kita telah memasukkan variabel AOI kedalam script. Selanjutnya geometry ini sebagai satu variable yang bisa digunakan untuk memotong gambar yang disediakan oleh koleksi dari satelit sentinal, landsat atau yang lainnya.

Namun, alangkah baiknya jika kita memiliki langsung AOI yang fokus kepada tujuann spesifik kita menggunakan Google earth Engine. Yakni membuat Costum Geometry dalam bentuk shape yang merupakan hasil output aplikasi pemetaan seperti Arcgis, Map Info dan lainnya.

Tahap yang perlu dilakukan pertama kali ada menyiapkan bahan yang akan diupload. Saya menggunakan aplikasi Arcgis untuk memotong shape sawah satu kabupaten menjadi sawah satu kecamatan dengan arch tool “clip”. Selanjutnya data dalam table di layer sawah satu kecamatan tersbeut di eksport dalam bentuk shp. Hasil file yang akan terlihat sejumlah 7 file yang kemudian kita archive menjadi satu dalam bentuk zip.

Gambar diatas merupakan peta sawah di Kecamatan Sidamanik yang akan saya upload di Google Earth Engine untuk proses pengerjaan peta Fase pertumbuhan tanaman padi. Peta sawah dan administrasi kecamatan bisa di download di RBI (Rupa Bumi Indonesia). Gratis, kita hanya diminta buat akun saja.

Setelah data geometry sudah lengkap, buka Google Earth Engine dan klik tab asset. Kemudian klik new – shape files (.shp. shx,… zip).

Klik select dan arahkan di file hasil yang kita kompress tadi. Klik upload, lalu akan muncul progress upload di sebelah kanan pada tab task. Pastikan proses sudah rampung sebelum anda merefresh tab asset untuk melihat hasil import geometry.

Setelah success melakukan import, bisa kita klik dan hasilnya seperti gambar di bawah ini:

Untuk menggunakannya atau import ke dalam script dalam proses google earth engine selanjutnya, kita cukup klik import di bagian bawah.

kecamatan sidamanik simalungun sumatera utara

Gambar ini merupakan contoh hasil script yang di clip dengan AOI dengan geometry sawah di kecamatan Sidamanik, Kab Simalungun, Provinsi Sumatera Utara.

Salah satu cara terbaik mengambil gambar jernih dari satelit

Setelah berhasil import geometry atau AOI di google earth engine, artikel ini akan membahas bagaimana mengambil gambar dari satelit dengan batasan geometry yang kita miliki tersebut.

Kita buka google earth engine, import geometry atau AOI (Area of Interest yang kita miliki), kemudian bagian code editor (bagian tengah), kita ketikkan kode berikut:

Var geometry = table
var dataset = ee.ImageCollection('COPERNICUS/S2')
                  .filterDate('2020-01-01', '2020-01-30')
                .filterBounds(geometry)     
print (dataset)

kode diatas kita mendeskripsikan dua variabel variabel, yakni geometry dan dataset. Variabel geometry sama dengan tabel yang berisi file shp AOI yang sudah kita import. Sebenarnya variabel ini tidak perlu di cantumkan sebenarnya tidak masalah, karena table sendiri sudah dideskripsikan di awal saat kita impor dengan nama ‘var table’.

 dataset berisi koleksi gambar yang dimiliki oleh sentinel 2 atau Copernicus/S2 dengan memberikan batasan waktu ( fungsi filter date dari 1 januari hingga 30 januari). Batasan waktu ini penting, karena jika tidak dibatasi google earth akan memberikan semua koleksi gambar sentinel dan itu akan menyebabkan overload.

Kemudian hal yang tidak kalah pentingnya adalah membatasi wilayah. Atau area yang akan ingin kita lihat adalah area geometry. Pemberian batasanini diwakili oleh .flterbounds(geometry).

Kemudian pada baris akhir “print(dataset)” berfungsi untuk mencantumkan gambar gambar tersebut di ruang console atau area sebelah kanan google earth engine. Artinya semua gambar sentinel dua dalam rentang waktu dan wilayah yang sesuai dengan filter yang kita cantumkan akan dimunculkan nama filenya di sebelah kanan.

mengambil gambar dari sentinel
mengambil gambar dari sentinel

Setelah itu klik run pada toolbar diatas. Tunggu sehingga akan ada keterangan di console.  Hasilnya ternyata ada 12 gambar koleksi sentinel pada Bulan Januari 2020. Keterangan lengkap bisa kita klik baris tersebut atau tanda panahnya, kemudian kita lihat satu persatu keterangan metadatanya. Masing masing memiliki 16 band.

menentukan gambar yang akan ditampilkan

Area yang terlingkar pada gambar diatas ini adalah nama gambar tersebut. Kita selanjutnya bisa mengolah data dengan spesifik menggunakan gambar ini dengan menulis atau copy paste judulnya saja.

Menampilkan gambar sentinel 2

Tulis script dibawah ini untuk menampilkan gambar sudah kita pilih:

var image = ee.Image('COPERNICUS/S2/20200102T034141_20200102T034813_T47NMD')
var image2= image.clip(geometry);

var visParams = {bands: ['B8', 'B4', 'B3'], max: 3048, gamma: 1};
var visParams_ndvi = {min: -0.2, max: 0.8, palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
    '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'};

// Calculate NDVI
var image_ndvi = image2.normalizedDifference(['B8','B4']);

// Map results
Map.centerObject(geometry,13)
Map.addLayer(image2,visParams,'warna merah')
Map.addLayer(image_ndvi,visParams_ndvi,'warna NDVI')

Didalam ee.image adalah nama gambar yangkita kehendaki berdasarkan pilihan kita sebelumnya. Copy paste kan saja judul gambarnya. Tidak lupa kita clip dengan wilayah AOI yang kita kehendaki di google earth engine dengan variabel image 2.

Variabel baru yakni visparams dan visparam_ndvi merupakan penjelasan kita bagaimana kita ingin menampilkan peta, pada kali ini saya hanya menggunakan band 8 atau B8, B4, dan B3. Keterangan band itu ada di deskripsi gambar yang dipilih sebelumnya. Atau membaca profile dari satelit sentinel Top of Atmosfer di link berikut: deskripsi band sentinel 2.

Kemudian dalam beberapa band yang kita pilih tersebut, kita menghitung nilai NDVI yang akan ditampilkan di layer baru nantinya. Untuk pembahasan NDVI akan dijelaskan terpisah (insha allah).

Kemudian pada bagian map result kita mulai membuat layer, dengan center objectnya kita fokuskan di AOI dengan besar fokus sama dengan 13. Nilai fokus ini bisa diperbesar atau dikurangi sesuai kebutuhan. Kemudian layer yang kita beri nama “warna merah” menggunakan deskripsi yang sudah dijelaskan di variabel visparam. Dan warna ndvi untuk layer ndvi

print peta sentinel
print peta sentinel

Klik run
Hasilnya terlihat sbb:

gambar ndvi
calculate NDVI dari band 8 dan 4
band 8, 4 dan 3 divisualkan merah

Jika kita hilangkan clip geometry, sebenarnya gambar aslinya berbentuk square. Sebagai berikut:
Script:

var image = ee.Image('COPERNICUS/S2/20200102T034141_20200102T034813_T47NMD')

var visParams = {bands: ['B8', 'B4', 'B3'], max: 3048, gamma: 1};
var visParams_ndvi = {min: -0.2, max: 0.8, palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
    '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'};

// Calculate NDVI
var image_ndvi = image.normalizedDifference(['B8','B4']);

// Map results
Map.centerObject(image,9)
Map.addLayer(image,visParams,'warna merah')
Map.addLayer(image_ndvi,visParams_ndvi,'warna NDVI')

Hasil:
Gambar warna merah:

tanpa clip merah
tanpa clip layer warna merah
tanpa clip layer NDVI

Terlihat bahwa ada awan yang menutupi areal lapisan tanah cukup besar. Hal ini dimaklumi karna indonesia beriklim troopis dengan kondisi awan yang bisa dikatakan selalu ada setiap hari. Kemungkinan daerah timur indonesia akan lebih bersih dari awan karena lebih banyak cuaca panasnya.

Satu persatu gambar dari 12 gambar diawal bisa dicoba untuk dilihat mana jumlah awan yang paling sedikit. Namun ada cara yang lebih tepat untuk mengetahui gambar mana yang memiliki jumlah awan yang paling sedikit yakni menggunakan fungsi sort pada jumlah awan.

Gambar dengan jumlah awan yang paling sedikit pada rentang waktu tertentu.
Gunakan skrip dibawah ini:

var geometry = table
var dataset = ee.ImageCollection('COPERNICUS/S2')
                  .filterDate('2020-01-01', '2020-01-30')
                .filterBounds(geometry)
                 
var sorted = dataset.sort('CLOUD_COVER')
var image = sorted.first()

var visParams = {bands: ['B8', 'B4', 'B3'], max: 3048, gamma: 1};
var visParams_ndvi = {min: -0.2, max: 0.8, palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
    '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'};

// Calculate NDVI
var image_ndvi = image.normalizedDifference(['B8','B4']);

// Map results
Map.centerObject(geometry,12)
Map.addLayer(image.clip(geometry),visParams,'warna merah')
Map.addLayer(image_ndvi.clip(geometry),visParams_ndvi,'warna NDVI')

Yang berbeda dari skrip diatas adalah

var sorted = dataset.sort(‘CLOUD_COVER’)
var image = sorted.first()

jadi kita langsung membuat short pada field cloud cover dan memilih cloud cover yang paling sedikit tanpa harus menentukan atau memilih nama gambar tersebut. Jadi dari 12 gambar tadi, tanpa kita tau judul gambar yang akan terpilih kita langsung perintahkan pilih cloud cover yang paling sedikit di bulan januari 2020.
Hasilnya adalah sebagai berikut

NDVI sedikit awan
NDVI sedikit awan

merah sedikit awan
tampilan peta dengan sedikit awan dari periode tertentu

Terlihat bahwa meskipun sudah filter sedikit awan, tapi awan tampaknya masih terlihat. Terutama daerah pantai atau yang danau, biasanya awan selalu ada setiap harinya.

Proses lain untuk menghilangkan awan adalah dengan cara menggabungkan beberapa gambar pada periode tersebut sehingga mendapatkan lapisan yang lebih jernih yang disebut dengan masking. Jadi pixel yang tertutup awan diganti dengan gambar lain yang tidak tertutup. Mungkin akan dijelaskan di artikel berikutnya.

Menghitung Luas Berdasarkan Nilai NDVI

Membuat peta dengan keteranga NDVI memang penting, namun hal itu serasa kurang lengkap jika kita tidak menambahkannya dengan informasi luas setiap range nilai NDVI.

Berdasarkan pengalaman, saya mendapat peta fase pertumbuhan tanaman dalam bentuk pdf dari sebuah instansi ternama yang memiliki tupoksi khusus mengeluarkan peta tersebut. Alhasil, saya harus merender ulang peta itu untuk mendapatkan berapa luas lahan yang berada dalam fase vegetatif dan sebagainya. Itu cukup merepotkan.

Google earth engine menyediakan fitur perhitungan pixel langsung yang terdapat dalam peta yang dihasilkan. perhitungan pixel tersebut kemudian dapat dikalikan dengan skala yang digunakan sehingga langsung keluar hasil luas, bisa dalam meter persegi ataupun hektar.

Pada artikel ini, saya akan membagi nilai NDVI dalam beberapa range. Nilai NDVI memiliki nilai -1 hingga 1. ada hubungan antara fase pertumbuhan tanaman dengan nilai NDVI sehingga bisa dikelompokkan berdasarkan range tertentu. Artikel ini tidak membahas fase tanaman tertentu berada dalam range tertentu, melainkan sebagai latihan bagaimana membagi nilai range NDVI dan menghitung luasnya.

langsung saja kita buka google earth engine dan menuliskan script sebagai berikut:

Imports (2 entries)
var table : Table users/
var table2 : Table users/

var dataset = ee.ImageCollection('COPERNICUS/S2')
                  .filterDate('2020-03-01', '2020-04-09')
                .filterBounds(table);
             
          
var sorted = dataset.sort('CLOUD_COVER')
var scene = sorted.first().clip(table)


// Visualization parameters 
var visParams = {bands: ['B8', 'B4', 'B3'], max: 3048, gamma: 1};
var visParams_ndvi = {min: -0.2, max: 0.8, palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
    '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'};

// Calculate NDVI
var image_ndvi = scene.normalizedDifference(['B8','B4']);


// Map results
Map.centerObject(table,12)
Map.addLayer(scene,visParams,'Sentinel-2 False Color Infrared')
Map.addLayer(table2,{},'kecamatan')
Map.addLayer(image_ndvi,visParams_ndvi,'Sentinel-2 NDVI')

var mergedAllFunction = function(image) {
 var ndvi = scene.normalizedDifference(['B8','B4']).rename('NDVI');

 var thres1 = ndvi.gte(0).rename('thres1')
 var thres2=ndvi.gt(0.1921).and(ndvi.lt(0.739)).rename('thres2')
 var thres3=ndvi.gt(0.74).and(ndvi.lt(0.778)).rename('thres3')
 var thres4=ndvi.gt(0.192).and(ndvi.lte(1)).rename('thres4')

 return image.addBands(ndvi).addBands([thres1,thres2,thres3,thres4]);
}

var median = dataset.median();

var merged = mergedAllFunction(median);

var areas = merged
    .select(['thres1', 'thres2', 'thres3', 'thres4'])
    .multiply(ee.Image.pixelArea())
    .reduceRegion({
      reducer: ee.Reducer.sum(),
      geometry: table,  // a geometry
      scale: 10,   // scale = 10 for sentinel-2 'red' band
      maxPixels: 1e9  
    });
print(areas,'square meters')

Bagian pertama adalah mengimport aset tabel sawah (tabel 1) dan batas kecamatan (tabel 2). kemudian memanggil koleksi dataset sentinel dengan mengganti tanggal batas awal dan akhir dari koleksi sentinel tersebut dengan menerapkan filter awan yang paling minimal.

Pembagian range NDVI terletak pada :

var thres1 = ndvi.gte(0).rename('thres1')
 var thres2=ndvi.gt(0.1921).and(ndvi.lt(0.739)).rename('thres2')
 var thres3=ndvi.gt(0.74).and(ndvi.lt(0.778)).rename('thres3')
 var thres4=ndvi.gt(0.192).and(ndvi.lte(1)).rename('thres4')

variabel yang diberi nama thres1 memiliki range ndvi antara 0 – 0.1920
thres2 memiliki range 0.1921 – 0.738
thres3 memiliki range 0.74 – 0.778
thres4 memiliki range 0.192 – 1

tentu nilai ini bisa diganti sesuai dengan kebutuhan yang dihadapi dilapangan. Kendala menggunakan metode ini karena NDVI memiliki grafik sinus, sehingga ada beberapa area di fase generatif juga terdefinisi sebagai fase vegetatif. Hal ini sudah ada solusinya yang nanti akan saya publish juga di blog ini, setelah saya publish sebagai KTI 🙂

hasil dari script diatas adalah gambar dibawah ini. hasil perhitungan luas perkelas ada di area console dengan satuan meter persegi. Selain itu, peta sawah dengan batas kecamatan juga ada di bagian map seperti yang sudah dijelaskan di artikel sebelumnya.

Bagian ini menjadi bagian akhir tutorial dasar penggunaan google earth engine. Selanjutnya akan dipublish dalam artikel yang terpisah dalam case by case. Terima Kasih telah berkunjung

Peneliti bidang sosial ekonomi pertanian. Pernah bekerja di bidang supply chain. Detil info silahkan kunjungi laman about me.

Join the Conversation

4 Comments

Your email address will not be published. Required fields are marked *

  1. Thanks sharingnya mas, saya benar-benar baru belajar earth engine, ini sangat membantu saya…

  2. Thanks postnya Mas, dari hasil earth engine ini bisa diexport ngga ya ke file tif atau ecw supaya kita bisa copy ke local drive kita?

    1. Bisa mas…ada codingnya. Nanti kapan kapan postingnya saya lanjutkan ya.. atau langsung search aja di google. Banyak kok. Terima kasih