GIS

Tutorial Google Earth Engine - Analisis Perubahan Lahan Pakai Citra Sentinel-2

Pertama kali saya coba Google Earth Engine (GEE), tujuannya simpel: mau lihat perubahan lahan di daerah rumah saya selama 5 tahun terakhir. Ternyata, prosesnya jauh lebih mudah dari yang saya bayangkan. GEE punya koleksi citra satelit yang massive, dan kita bisa akses semuanya lewat browser tanpa download ratusan GB data.

Kalau kamu pernah penasaran gimana caranya monitor deforestasi, perubahan urbanisasi, atau analisis vegetasi pakai citra satelit, tutorial ini cocok banget. Kita akan pakai JavaScript API dari GEE dan citra Sentinel-2 dari ESA (European Space Agency) yang gratis dan berresolusi 10 meter.

Apa itu Google Earth Engine?

Google Earth Engine adalah platform cloud computing yang dikembangkan Google khusus untuk analisis geospasial. Bayangkan punya superkomputer yang sudah diisi petabytes data citra satelit, dan kamu bisa query data itu pakai kode sederhana. Itu intinya GEE.

Keunggulan utama GEE:

  • Data gratis - Sentinel-2, Landsat, MODIS, dan banyak lagi sudah tersedia di server Google
  • Processing di cloud - Tidak perlu download data, semua komputasi terjadi di server Google
  • Time-series analysis - Bandingkan citra dari waktu ke waktu dengan mudah
  • Export hasil - Simpan hasil analisis ke Google Drive, Asset, atau langsung download

Untuk mulai, buka code.earthengine.google.com dan login pakai akun Google. Kalau belum terdaftar, daftar dulu di earthengine.google.com/signup - biasanya disetujui dalam 1-2 hari.

Kenalan dengan Citra Sentinel-2

Sentinel-2 adalah satelit observasi bumi dari program Copernicus ESA. Ada dua satelit (Sentinel-2A dan 2B) yang mengorbit bumi setiap 5 hari. Resolusi spasionalnya 10 meter untuk band visible dan NIR, cocok banget untuk analisis lahan.

Band yang sering dipakai:

  • B2 (Blue) - 490 nm, resolusi 10m
  • B3 (Green) - 560 nm, resolusi 10m
  • B4 (Red) - 665 nm, resolusi 10m
  • B8 (NIR) - 842 nm, resolusi 10m - penting untuk hitung vegetasi
  • B11 (SWIR) - 1610 nm, resolusi 20m - deteksi air dan kelembaban

Di GEE, dataset Sentinel-2 tersedia sebagai COPERNICUS/S2_SR_HARMONIZED (Surface Reflectance). Selalu pakai yang SR (Surface Reflectance) karena sudah dikoreksi atmosfer, bukan yang TOA (Top of Atmosphere).

Step 1: Setup Area of Interest (AOI)

Pertama, kita definisikan area yang mau dianalisis. Saya pakai contoh area di Jakarta Selatan yang mengalami urbanisasi cepat. Kamu bisa ganti koordinat sesuai kebutuhan.

// Definisikan area of interest (Jakarta Selatan)
var jakarta = ee.Geometry.Rectangle([106.75, -6.35, 106.90, -6.20]);

// Center map ke AOI
Map.centerObject(jakarta, 12);
Map.addLayer(jakarta, {color: 'red'}, 'AOI - Jakarta Selatan');

Kalau mau pakai polygon dari shapefile, upload dulu ke GEE Asset, lalu import sebagai ee.FeatureCollection. Untuk tutorial ini, kita pakai Rectangle sederhana.

Step 2: Filter dan Load Citra Sentinel-2

Kita mau bandingkan kondisi lahan di 2020 vs 2025. Filter berdasarkan tanggal, area, dan cloud cover. Citra dengan cloud cover tinggi bikin analisis tidak akurat, jadi kita filter yang di bawah 10%.

// Function untuk mask cloud (SCL band)
function maskS2clouds(image) {
  var scl = image.select('SCL');
  // Shadow, cloud medium/high, cirrus = mask out
  var mask = scl.neq(3).and(scl.neq(8)).and(scl.neq(9)).and(scl.neq(10));
  return image.updateMask(mask).divide(10000);
}

// Load Sentinel-2 SR - Tahun 2020
var s2_2020 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterDate('2020-01-01', '2020-12-31')
  .filterBounds(jakarta)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
  .map(maskS2clouds)
  .median()
  .clip(jakarta);

// Load Sentinel-2 SR - Tahun 2025
var s2_2025 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterDate('2025-01-01', '2025-06-30')
  .filterBounds(jakarta)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
  .map(maskS2clouds)
  .median()
  .clip(jakarta);

// Visualisasi True Color
var visParams = {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3};
Map.addLayer(s2_2020, visParams, 'Sentinel-2 2020');
Map.addLayer(s2_2025, visParams, 'Sentinel-2 2025');

Fungsi maskS2clouds menggunakan band SCL (Scene Classification Layer) untuk menghapus piksel cloud, shadow, dan cirrus. .median() mengambil nilai tengah dari semua citra dalam periode tersebut, efektif menghapus cloud yang tersisa.

Untuk monitoring vegetasi, kamu juga bisa memanfaatkan pendekatan query spasial di PostGIS untuk menyimpan dan mengelola hasil analisis di database.

Step 3: Hitung NDVI (Normalized Difference Vegetation Index)

NDVI adalah indeks paling umum untuk mengukur kesehatan vegetasi. Rumusnya simpel:

NDVI = (NIR - Red) / (NIR + Red)

Nilai NDVI berkisar dari -1 sampai +1. Nilai mendekati +1 menunjukkan vegetasi hijau yang sehat, sedangkan nilai negatif menunjukkan air atau area terbangun.

// Hitung NDVI untuk kedua tahun
var ndvi_2020 = s2_2020.normalizedDifference(['B8', 'B4']).rename('NDVI');
var ndvi_2025 = s2_2025.normalizedDifference(['B8', 'B4']).rename('NDVI');

// Palet warna untuk NDVI
var ndviPalette = {
  min: -0.2,
  max: 0.8,
  palette: ['#d73027', '#fc8d59', '#fee08b', '#d9ef8b', '#91cf60', '#1a9850']
};

Map.addLayer(ndvi_2020, ndviPalette, 'NDVI 2020');
Map.addLayer(ndvi_2025, ndviPalette, 'NDVI 2025');

Warna merah = area terbangun/tanah kosong, hijau = vegetasi lebat. Dengan membandingkan 2020 vs 2025, kamu bisa langsung lihat di mana vegetasi berkurang atau bertambah.

Step 4: Deteksi Perubahan Lahan (Change Detection)

Ini bagian paling menarik. Kita selisihkan NDVI 2025 dengan NDVI 2020 untuk melihat area mana yang mengalami perubahan signifikan.

// Hitung perubahan NDVI
var ndviChange = ndvi_2025.subtract(ndvi_2020).rename('NDVI_Change');

// Klasifikasi perubahan
var decrease = ndviChange.lt(-0.15);  // Vegetasi berkurang signifikan
var stable = ndviChange.gte(-0.15).and(ndviChange.lte(0.15));  // Stabil
var increase = ndviChange.gt(0.15);  // Vegetasi bertambah

// Palet perubahan
var changePalette = {
  min: -0.5,
  max: 0.5,
  palette: ['#d7191c', '#fdae61', '#ffffbf', '#a6d96a', '#1a9641']
};

Map.addLayer(ndviChange, changePalette, 'NDVI Change 2020-2025');

// Tambah layer klasifikasi
Map.addLayer(decrease.selfMask(), {palette: 'red'}, 'Vegetasi Berkurang');
Map.addLayer(increase.selfMask(), {palette: 'green'}, 'Vegetasi Bertambah');

Threshold -0.15 dan +0.15 adalah angka umum yang dipakai di literatur remote sensing. Kamu bisa sesuaikan tergantung sensitivitas yang diinginkan. Threshold lebih kecil = lebih sensitif terhadap perubahan kecil.

Step 5: Hitung Statistik Area Perubahan

Mau tahu berapa hektar lahan yang berubah? Kita bisa hitung pakai reduceRegion:

// Hitung luas area perubahan (dalam meter persegi)
var areaDecrease = decrease.multiply(ee.Image.pixelArea())
  .reduceRegion({
    reducer: ee.Reducer.sum(),
    geometry: jakarta,
    scale: 10,
    maxPixels: 1e9
  });

var areaIncrease = increase.multiply(ee.Image.pixelArea())
  .reduceRegion({
    reducer: ee.Reducer.sum(),
    geometry: jakarta,
    scale: 10,
    maxPixels: 1e9
  });

// Konversi ke hektar
var haDecrease = ee.Number(areaDecrease.get('NDVI_Change')).divide(10000);
var haIncrease = ee.Number(areaIncrease.get('NDVI_Change')).divide(10000);

print('Area vegetasi berkurang (ha):', haDecrease);
print('Area vegetasi bertambah (ha):', haIncrease);

Hasilnya muncul di Console panel GEE. Scale 10 berarti menggunakan resolusi 10 meter per piksel. maxPixels: 1e9 meningkatkan batas default untuk area yang luas.

Step 6: Export Hasil ke Google Drive

Setelah analisis selesai, export hasil untuk dipakai di GIS desktop atau web mapping:

// Export NDVI Change ke Google Drive
Export.image.toDrive({
  image: ndviChange,
  description: 'NDVI_Change_Jakarta_2020_2025',
  folder: 'GEE_Exports',
  region: jakarta,
  scale: 10,
  crs: 'EPSG:4326',
  maxPixels: 1e9
});

// Export klasifikasi perubahan
Export.image.toDrive({
  image: decrease.add(increase.multiply(2)).toByte(),
  description: 'LandChange_Classification',
  folder: 'GEE_Exports',
  region: jakarta,
  scale: 10,
  crs: 'EPSG:4326',
  maxPixels: 1e9
});

File GeoTIFF yang di-export bisa dibuka di QGIS, ArcGIS, atau bahkan di-load ke PostGIS untuk analisis lebih lanjut. Kalau kamu tertarik integrasi dengan database spasial, baca juga tutorial PostGIS spatial query untuk aplikasi web.

Step 7: Time Series Chart (Bonus)

Mau lihat tren NDVI dari waktu ke waktu? Buat chart time-series:

// Load semua data 2020-2025
var s2_all = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterDate('2020-01-01', '2025-06-30')
  .filterBounds(jakarta)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
  .map(maskS2clouds)
  .map(function(image) {
    return image.addBands(
      image.normalizedDifference(['B8', 'B4']).rename('NDVI')
    );
  });

// Buat chart
var chart = ui.Chart.image.series({
  imageCollection: s2_all.select('NDVI'),
  region: jakarta,
  reducer: ee.Reducer.mean(),
  scale: 100,
  xProperty: 'system:time_start'
}).setOptions({
  title: 'Trend NDVI - Jakarta Selatan (2020-2025)',
  hAxis: {title: 'Tanggal'},
  vAxis: {title: 'NDVI Rata-rata'},
  lineWidth: 2,
  pointSize: 3,
  series: {0: {color: '#1a9850'}}
});

print(chart);

Chart ini menunjukkan fluksi musiman NDVI (hijau di musim hujan, turun di musim kemarau) dan tren jangka panjang. Kalau garis tren menurun, artinya ada deforestasi atau urbanisasi di area tersebut.

Tips Praktis untuk Analisis GEE

  • Pakai image composite - Jangan pakai single image, gunakan .median() atau .mean() untuk mengurangi efek cloud
  • Perhatikan skala - Scale parameter mempengaruhi kecepatan processing. Pakai 10m untuk detail, 100m untuk overview cepat
  • Manfaatkan SCL band - Sentinel-2 punya Scene Classification Layer yang lebih akurat dari QA60 untuk masking cloud
  • Export ke Asset - Kalau hasil intermediate mau diproses lagi, export ke GEE Asset (lebih cepat dari Google Drive)
  • Gunakan Map.setOptions - Tambah satellite basemap untuk konteks visual: Map.setOptions('SATELLITE')

Kesimpulan

Google Earth Engine mengubah cara kita analisis citra satelit. Yang dulu butuh superkomputer dan download data berhari-hari, sekarang bisa selesai dalam hitungan menit lewat browser. Dengan Sentinel-2 dan NDVI, kamu bisa monitor perubahan lahan di area manapun di bumi.

Mulai dari yang simpel: pilih area yang kamu kenal, bandingkan 2 tahun yang berbeda, dan lihat perubahannya. Dari situ, kembangkan ke analisis yang lebih kompleks seperti klasifikasi lahan atau prediksi tren. Kalau ada pertanyaan soal GEE atau remote sensing, drop komentar di bawah!


You may also like


0 Comments


Leave a Reply

Comments with links or spam keywords will be rejected.
Scroll to Top