Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

LAND-COVER-CLASSIFICATION-RANDOM-FOREST-MULTI-INDEX

Skrip ini melakukan klasifikasi tutupan lahan terbimbing (supervised) di Google Earth Engine (GEE) menggunakan citra Sentinel-2 Surface Reflectance dan pengklasifikasi Random Forest.

Repositori di GitHub

Google Earth Engine · Sentinel-2 SR · Random Forest · Indeks Spektral

GEE Sentinel-2 Language License: MIT


👤 Informasi Penulis

PenulisDefani Arman Alfitriansyah
InstitusiFakultas Kehutanan dan Lingkungan, Universitas Kuningan
Tanggal11 Maret 2026
Bahasa PemrogramanJavaScript (Google Earth Engine Code Editor)

📋 Gambaran Umum

Skrip ini melakukan klasifikasi tutupan lahan terbimbing (supervised) di Google Earth Engine (GEE) menggunakan citra Sentinel-2 Surface Reflectance dan pengklasifikasi Random Forest. Skrip mengintegrasikan band multispektral dengan sembilan indeks spektral turunan untuk membedakan empat kelas tutupan lahan pada wilayah kajian yang ditentukan pengguna.

Alur kerja mencakup seluruh pipeline klasifikasi: masking awan → komposit citra → komputasi indeks spektral → stratifikasi sampel → pelatihan model → klasifikasi → visualisasi → ekspor.


🗂️ Struktur Repositori

├── script.txt          # Skrip klasifikasi GEE utama
├── README.md           # Dokumentasi ini
└── Link GEE            # Link project GEE

🌏 Skrip Kode : Klik di ini!


⚙️ Parameter

Seluruh parameter yang dapat dikonfigurasi dideklarasikan di bagian atas skrip untuk mendukung reprodusibilitas dan transparansi.

Parameter Temporal & Penyaringan

ParameterNilai DefaultKeterangan
START_DATE'2024-01-01'Tanggal awal koleksi citra (format ISO 8601)
END_DATE'2026-03-02'Tanggal akhir koleksi citra (format ISO 8601)
CLOUD_LIMIT30Persentase tutupan awan maksimum yang diizinkan per scene (%)
TRAIN_SPLIT0.7Proporsi sampel untuk pelatihan (sisanya digunakan untuk validasi)
CLASS_FIELD'lc'Nama properti yang menyimpan label kelas pada koleksi fitur latih

Skema Kelas Tutupan Lahan

Indeks KelasNama KelasWarna HexKeterangan
0Hutan#005F02Hutan kanopi rapat (vegetasi berkayu padat)
1Semak#6D9E51Semak belukar / vegetasi terbuka
2Lahan Terbuka#C0B87ALahan gundul / tanah terbuka / lahan bera
3Air#0992C2Badan air (sungai, danau, kolam)

🛰️ Data Masukan

Koleksi Sentinel-2 SR Harmonized

Band Spektral yang Digunakan

BandBand Sentinel-2Panjang Gelombang Tengah (nm)Resolusi Asli (m)
B2Biru49010
B3Hijau56010
B4Merah66510
B5Red-Edge 170520
B6Red-Edge 274020
B7Red-Edge 378320
B8NIR84210
B8ANIR Sempit86520
B11SWIR-1161020
B12SWIR-2219020

☁️ Masking Awan

Masking awan diterapkan menggunakan Scene Classification Layer (SCL) yang disediakan bersama produk Sentinel-2 L2A. Kelas SCL berikut dikeluarkan dari analisis:

Nilai SCLLabel Kelas
3Bayangan awan
8Awan, probabilitas sedang
9Awan, probabilitas tinggi
10Cirrus tipis
11Salju / es
function maskS2(img) {
  var scl  = img.select('SCL');
  var mask = scl.neq(3).and(scl.neq(8)).and(scl.neq(9))
                        .and(scl.neq(10)).and(scl.neq(11));
  return img.updateMask(mask).divide(10000);
}

Catatan: Pendekatan berbasis SCL umumnya lebih disarankan dibandingkan bitmask QA60 untuk produk S2 SR, karena memberikan diskriminasi yang lebih rinci terhadap jenis awan dan bayangan (Baetens et al., 2019).


📉 Indeks Spektral

Sembilan indeks spektral dihitung dan ditambahkan ke dalam tumpukan fitur. Indeks-indeks ini merepresentasikan struktur vegetasi, kandungan air, keterbukaan lahan, dan tingkat gangguan kebakaran — secara kolektif meningkatkan separabilitas antar kelas tutupan lahan.

🌳Indeks Vegetasi

IndeksRumusReferensi
NDVI(B8 − B4) / (B8 + B4)Rouse et al. (1974)
EVI2,5 × (B8 − B4) / (B8 + 6·B4 − 7,5·B2 + 1)Huete et al. (2002)
SAVI[(B8 − B4) / (B8 + B4 + 0,5)] × 1,5Huete (1988)
IRECI(B8 − B4) / (B5 / B6)Frampton et al. (2013)

🌊 Indeks Air & Kelembaban

IndeksRumusReferensi
NDWI(B3 − B8) / (B3 + B8)Gao (1996)
NDMI(B8 − B11) / (B8 + B11)Hunt & Rock (1989)

🧱 Indeks Lahan Terbangun & Tanah

IndeksRumusReferensi
NDBI(B11 − B8) / (B11 + B8)Zha et al. (2003)
BSI[(B11 + B4) − (B8 + B2)] / [(B11 + B4) + (B8 + B2)]Rikimaru et al. (2002)

🔥 Indeks Kebakaran / Gangguan Lahan

IndeksRumusReferensi
NBR(B8 − B12) / (B8 + B12)Key & Benson (2006)

Catatan tentang IRECI: Inverted Red-Edge Chlorophyll Index memanfaatkan band red-edge Sentinel-2 (B5, B6) dan sangat sensitif terhadap konsentrasi klorofil pada kanopi rapat, sehingga efektif untuk membedakan hutan dari vegetasi yang terdegradasi (Frampton et al., 2013).


Pengklasifikasi Random Forest

Pengklasifikasi smile Random Forest dilatih dengan hiperparameter berikut:

ParameterNilaiAlasan Pemilihan
numberOfTrees500Jumlah pohon yang cukup untuk konvergensi galat out-of-bag yang stabil
variablesPerSplit4Approx. √19 fitur — heuristik standar untuk Random Forest
bagFraction0,7Pengambilan sampel bootstrap 70% per pohon, sesuai Breiman (2001)
seed42Seed tetap untuk menjamin reprodusibilitas hasil

Pengklasifikasi dilatih menggunakan 19 fitur: 10 band Sentinel-2 (S2_BANDS) + 9 indeks spektral (INDEX_BANDS).


🏷️ Data Latih & Pengambilan Sampel

Sampel latih disediakan sebagai empat objek FeatureCollection terpisah di GEE:

Seluruh koleksi digabung, lalu kolom acak ditambahkan melalui .randomColumn(). Sampel dengan nilai random < 0.7 digunakan untuk pelatihan; sisanya (30%) digunakan untuk validasi independen.

Ekstraksi fitur dilakukan pada skala 10 m menggunakan .sampleRegions(), mengekstraksi nilai piksel untuk seluruh 19 band fitur pada setiap titik sampel.

⚠️ Penting: Sampel latih harus didigitasi secara manual atau bersumber dari survei lapangan / citra resolusi tinggi. Keterwakilan spasial dan kemurnian spektral sampel secara langsung menentukan kinerja pengklasifikasi. Ketidakseimbangan kelas (class imbalance) perlu diperiksa sebelum pelatihan dilakukan.


📊 Keluaran yang Diharapkan

KeluaranFormatSkalaKeterangan
RF_TutupanLahanGeoTIFF10 mRaster tutupan lahan terklasifikasi (nilai integer 0–3)

Konfigurasi Ekspor

Export.image.toDrive({
  image       : classified,
  description : 'RF_TutupanLahan',
  folder      : 'GEE',
  region      : geometry,
  scale       : 10,
  fileFormat  : 'GeoTIFF',
  maxPixels   : 1e13
});

🚀 Cara Memulai

Prasyarat

  1. Akun Google Earth Engine (gratis untuk keperluan riset)

  2. Wilayah kajian yang didefinisikan sebagai objek geometry di GEE (digambar secara interaktif atau diimpor sebagai aset)

  3. Objek FeatureCollection sampel latih yang telah diunggah ke GEE Assets dengan properti lc yang menyimpan nilai integer kelas (0–3)

Langkah Penggunaan

  1. Buka GEE Code Editor

  2. Buat sampel latih untuk setiap kelas dan impor sebagai aset dengan nama:

    • Hutan, Semak, LahanTerbuka, Air

  3. Definisikan poligon wilayah kajian sebagai variabel geometry

  4. Tempel skrip ke dalam Code Editor

  5. Sesuaikan START_DATE, END_DATE, dan CLOUD_LIMIT sesuai kebutuhan

  6. Klik Run

  7. Jalankan tugas ekspor dari panel Tasks

Penyesuaian Rentang Tanggal

Untuk hasil optimal, pertimbangkan untuk mempersempit rentang tanggal pada musim kemarau di wilayah kajian guna meminimalkan kontaminasi awan residual dan variasi fenologi musiman. Rentang minimum 3–6 bulan umumnya direkomendasikan untuk memastikan jumlah observasi valid yang cukup per piksel dalam membentuk komposit median yang stabil.


📏 Penilaian Akurasi

Skrip ini tidak menyertakan modul penilaian akurasi otomatis. Sangat disarankan untuk melakukan langkah pasca-klasifikasi berikut:

  1. Matriks konfusi — dihitung menggunakan 30% sampel validasi yang disisihkan:

    var validation = samples.filter(ee.Filter.gte('random', TRAIN_SPLIT));
    var validated  = featureImage.select(FEATURE_BANDS).sampleRegions({
      collection : validation,
      properties : [CLASS_FIELD],
      scale      : 10
    });
    var testResult  = validated.classify(classifier);
    var errorMatrix = testResult.errorMatrix(CLASS_FIELD, 'classification');
    print('Matriks Konfusi:', errorMatrix);
    print('Akurasi Keseluruhan:', errorMatrix.accuracy());
    print('Koefisien Kappa:', errorMatrix.kappa());
  2. Kepentingan fitur (feature importance) — untuk memeriksa kontribusi setiap band:

    var importance = ee.Dictionary(classifier.explain().get('importance'));
    print('Kepentingan Variabel:', importance);
  3. Validasi independen — apabila memungkinkan, lakukan validasi terhadap data lapangan kontemporer atau citra resolusi tinggi untuk menghindari artefak autokorelasi spasial yang melekat pada evaluasi split-sampel.


⚠️ Keterbatasan yang Diketahui


📚 Daftar Pustaka


📄 Lisensi

Proyek ini dilisensikan di bawah Lisensi MIT. Lihat LICENSE untuk detail selengkapnya.


Skrip ini ditulis sepenuhnya dalam bahasa JavaScript menggunakan lingkungan Google Earth Engine Code Editor. Seluruh pemrosesan citra, komputasi indeks spektral, pelatihan model, dan ekspor hasil dilakukan secara server-side di infrastruktur GEE tanpa memerlukan instalasi perangkat lunak lokal.

References
  1. Baetens, L., Desjardins, C., & Hagolle, O. (2019). Validation of Copernicus Sentinel-2 Cloud Masks Obtained from MAJA, Sen2Cor, and FMask Processors Using Reference Cloud Masks Generated with a Supervised Active Learning Procedure. Remote Sensing, 11(4), 433. 10.3390/rs11040433
  2. Breiman, L. (2001). Random Forests. Machine Learning, 45(1), 5–32. 10.1023/a:1010933404324