Day 1 — Concepts

2 jam · paham dulu, mengetik besok

CatatanTujuan hari ini adalah paham, bukan lomba mengetik

Hari ini tidak menghasilkan peta. Yang dihasilkan adalah pengertian kenapa kode Earth Engine ditulis seperti itu — sehingga besok, ketika kita mengetik cepat, Anda tahu apa yang sedang terjadi dan bisa memperbaiki sendiri ketika ada yang salah.

Peserta yang melewati hari pertama tetap bisa menjalankan skrip besok. Sampai wilayahnya diganti, muncul error, dan tidak ada cara menebak dari mana datangnya.

What we are building

Satu alur analisis yang tumbuh sedikit demi sedikit sepanjang dua hari:

Membandingkan tutupan vegetasi di kawasan tambang nikel Konawe Utara, Sulawesi Tenggara antara 2023 dan 2026 — menghitung berapa hektar vegetasi yang hilang, membuat peta tutupan lahannya, dan mengekspor hasilnya sebagai GeoTIFF yang bisa masuk laporan.

Tidak ada langkah yang dibuang. Skrip hari kedua adalah skrip hari pertama yang diteruskan. Kalau wilayah kerja Anda berbeda — dan hampir pasti berbeda — semua contoh bisa dipindah ke sana dengan mengganti satu variabel.

0 · Setup check

10 menit

Lima menit pertama, semua orang bersamaan. Buka code.earthengine.google.com, ketik satu baris ini, klik Run:

print('siap');

Kalau kata siap muncul di panel Console (kanan atas), Anda siap.

PentingKalau tidak muncul

Hampir selalu satu dari tiga hal: akun belum disetujui; tab lama masih terbuka dengan sesi kedaluwarsa (tutup semua, buka lagi); atau jaringan memblokir earthengine.google.com — sering terjadi di jaringan kantor pemerintah, dan solusinya hotspot ponsel.

1 · Why Earth Engine

20 menit

Mulai dengan pertanyaan: kalau ingin melihat perubahan tutupan lahan satu kabupaten selama sepuluh tahun, apa yang harus dilakukan?

Jawaban cara lama: cari citra di katalog, unduh satu per satu, tiap scene ratusan MB, koreksi atmosfer, mozaik, potong, baru analisis. Untuk sepuluh tahun satu kabupaten itu bisa ratusan gigabyte dan berminggu-minggu kerja — sebelum satu pun kesimpulan lahir.

Earth Engine membalik urutannya. Datanya tidak pindah ke Anda; kode Anda yang pindah ke datanya. Seluruh arsip Landsat sejak 1984, Sentinel sejak 2015, MODIS sejak 2000, ditambah ratusan dataset lain, sudah duduk di server Google. Anda menuliskan apa yang ingin dihitung, Google yang mengerjakan, dan yang dikirim balik ke layar Anda hanya gambar petanya.

Cara lama Earth Engine
Unduhan Ratusan GB Nol
Perangkat keras Komputer kuat + penyimpanan Peramban
Waktu ke hasil pertama Berhari-hari Menit
Menambah 10 tahun lagi Ulangi semuanya Ubah satu tanggal
Biaya Waktu & penyimpanan Gratis untuk riset & pendidikan
PeringatanDua hal yang perlu ditegaskan sejak awal

Gratisnya untuk penggunaan non-komersial — riset, pendidikan, dan sebagian besar kerja lembaga publik. Penggunaan komersial berbayar.

“Gratis” bukan berarti “tanpa batas”. Ada kuota memori dan waktu komputasi. Kita akan menabraknya sendiri besok, di bagian klasifikasi — dan cara mengatasinya ada di sana.

Yang tersedia, gratis

Data Resolusi Sejak Untuk apa
Sentinel-2 10 m 2015 tutupan lahan, vegetasi, tanaman
Landsat 8/9 30 m 2013 rangkaian panjang, konsistensi historis
Landsat 5/7 30 m 1984 perubahan jangka sangat panjang
Sentinel-1 (radar) 10 m 2014 tembus awan — banjir, sawah
SRTM / Copernicus DEM 30 m — ketinggian, lereng
CHIRPS 5 km 1981 curah hujan

Untuk Indonesia, baris radar sering menentukan: separuh tahun langit kita tertutup awan, dan Sentinel-1 tidak peduli pada awan.

2 · Code Editor tour

20 menit

Sekilas layarnya padat, tetapi hanya ada empat bagian yang perlu dikenali hari ini.

Kiri — Scripts / Docs / Assets. Scripts menyimpan skrip Anda. Docs adalah dokumentasi lengkap semua fungsi — ini yang paling sering dilupakan pemula, padahal isinya jawaban dari 90% pertanyaan. Assets untuk data Anda sendiri, misalnya shapefile batas wilayah.

Tengah — Editor kode. Tempat mengetik. Tombol Run menjalankan seluruh skrip dari atas ke bawah. Save menyimpan. Get Link membuat URL yang berisi skrip Anda — cara terbaik membagikan pekerjaan ke rekan atau ke dosen pembimbing.

Kanan — Console / Inspector / Tasks. Console menampilkan hasil print(). Inspector membaca nilai piksel saat Anda mengklik peta — alat debug paling berguna di GEE. Tasks tempat ekspor dijalankan.

Bawah — Peta. Setiap Map.addLayer() menambah satu lapisan. Panel Layers di pojok kanan atas peta mengatur transparansi dan mematikan lapisan — sangat membantu saat membandingkan sebelum/sesudah.

TipDua kebiasaan yang menghemat berjam-jam

Inspector adalah cara tercepat memeriksa “apakah nilainya masuk akal”. Klik di laut, lihat NDVI-nya negatif — berarti perhitungan Anda benar.

Tasks sering terlupakan. Export di dalam skrip tidak langsung mengekspor; ia hanya mengantre. Anda masih harus klik RUN di tab Tasks. Peserta yang bilang “ekspornya tidak jalan” hampir selalu lupa ini.

3 · JavaScript secukupnya

30 menit

Anda tidak perlu belajar JavaScript. Anda perlu enam hal.

var kota  = 'Maumere';           // teks, pakai tanda kutip
var tahun = 2024;                // angka, tanpa kutip

var bands = ['B4', 'B3', 'B2'];  // daftar — hitungan mulai NOL
print(bands[0]);                 // 'B4', bukan bands[1]

var visual = {                   // kamus: pasangan nama: nilai
  bands: ['B4', 'B3', 'B2'],
  min: 0,
  max: 3000
};

Perhatikan kamus di atas. Bentuk {nama: nilai} akan muncul terus, karena hampir semua fungsi Earth Engine menerima pengaturannya dalam bentuk itu.

Hitungan mulai nol adalah sumber kesalahan nomor satu bagi orang yang terbiasa dengan spreadsheet.

Functions dan chaining

function tambahNDVI (image) {
  var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI');
  return image.addBands(ndvi);
}

var citra = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
              .filterBounds(aoi)
              .filterDate('2024-06-01', '2024-09-30')
              .median();

Titik di awal baris berarti “lalu lakukan ini pada hasil sebelumnya”. Dibaca dari atas ke bawah seperti kalimat.

4 · Client vs server

40 menit · bagian terpenting seluruh webinar

PentingKalau hanya satu hal yang diingat, jadikan yang ini

Hampir semua kebingungan pemula di GEE berakar di sini — dan tidak satupun bisa dipecahkan dengan menyalin skrip orang lain.

Ada dua dunia yang hidup berdampingan di dalam satu skrip:

Klien (peramban Anda) Server (Google)
Contoh var a = 5; var b = ee.Number(5);
Ciri JavaScript biasa Selalu diawali ee.
Dihitung di Laptop Anda Data center Google
Boleh pakai if/for? Boleh Tidak

Kenapa if tidak boleh dipakai pada objek server

Contoh ini yang paling jelas menunjukkannya. Jalankan sendiri:

var b = ee.Number(1);

if (b.gt(3)) {
  print('lebih besar dari 3');   // ini TETAP tercetak!
}

Padahal 1 jelas tidak lebih besar dari 3. Kenapa tetap tercetak?

Karena b.gt(3) tidak mengembalikan true atau false. Ia mengembalikan sebuah objek ee.Number — perintah yang belum dijalankan, yang baru akan dievaluasi di server nanti. Dan di JavaScript, objek apa pun dianggap “benar”. Jadi blok if itu selalu jalan, apa pun isinya.

Ini bukan bug. Ini konsekuensi dari kenyataan bahwa peramban Anda belum tahu nilainya — dan tidak akan tahu sampai server menghitungnya.

Hal yang sama berlaku untuk perulangan

Jangan pernah menulis for untuk memproses isi sebuah koleksi citra:

// SALAH — for-loop tidak bisa menyentuh isi ImageCollection
for (var i = 0; i < koleksi.size(); i++) { ... }

// BENAR — .map() menyuruh server melakukannya untuk setiap citra
var hasil = koleksi.map(function (citra) {
  return citra.normalizedDifference(['B8', 'B4']);
});

.map() adalah cara Earth Engine berkata “kerjakan fungsi ini pada setiap elemen, di sisimu, secara paralel”. Untuk ribuan citra, bedanya bukan soal gaya penulisan — for memang tidak akan berhasil sama sekali.

PeringatangetInfo() — pakai sehemat mungkin

getInfo() memaksa hasil dari server pindah ke peramban sekarang juga, dan peramban membeku sampai selesai.

print(koleksi.size());              // benar — print menanganinya secara asinkron
var n = koleksi.size().getInfo();   // jalan, tapi memblokir; hindari kecuali perlu

Jangan pernah memakainya di dalam .map().

Aturan praktis

Kalau namanya diawali ee., jangan pakai if, for, atau operator + - * / biasa padanya. Pakai metodenya sendiri: .add(), .subtract(), .gt(), .map().

Dari sinilah hampir semua kalimat “kok hasilnya kosong” berasal. Dan begitu Anda memahaminya, dokumentasi Earth Engine yang tadinya membingungkan langsung masuk akal: seluruh API-nya disusun mengikuti pembagian ini.

Tugas · 10 menit

Dikerjakan sekarang, tidak dikumpulkan. Tujuannya supaya besok tangan Anda sudah hafal Code Editor.

1. Ubah ee.Number(1) pada contoh if di atas menjadi ee.Number(5). Apakah hasilnya berubah? Kenapa tidak?

2. Buat skrip baru bernama latihan-hari-1, lalu tampilkan satu citra Sentinel-2 di wilayah kerja Anda:

var titik = ee.Geometry.Point([121.35, -8.65]);   // ganti ke wilayah Anda
Map.centerObject(titik, 11);

var citra = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
              .filterBounds(titik)
              .filterDate('2024-06-01', '2024-09-30')
              .first();

Map.addLayer(citra, {bands: ['B4','B3','B2'], min: 0, max: 3000}, 'Sentinel-2');
print(citra);

3. Klik Inspector, lalu klik satu titik di peta. Lihat daftar nilai band.

4. Di Console, buka segitiga di sebelah hasil print(citra) dan telusuri isinya. Ada berapa band? Kapan citra itu direkam?

Kalau nomor 4 terasa membingungkan, itu wajar — dan itu justru inti hari pertama: yang dicetak bukan gambar, melainkan deskripsi tentang gambar.


Besok: dari komposit bebas awan sampai peta tutupan lahan dan berkas GeoTIFF yang siap masuk laporan. → Day 2 — Hands-on