Kemunculan Air (1984-2015)

Set data GSW berisi banyak lapisan data yang menyajikan data air permukaan dengan berbagai cara. Kita akan mulai dengan memvisualisasikan lapisan kemunculan air, yang memberikan ringkasan tentang tempat dan frekuensi kemunculan air permukaan selama seluruh jangka waktu antara Maret 1984 dan Oktober 2015.

Bagian tutorial ini akan:

  1. menambahkan lapisan peta untuk memvisualisasikan kemunculan air permukaan,
  2. menunjukkan cara membuat kueri nilai lapisan peta,
  3. menambahkan gaya kustom untuk meningkatkan visualisasi,
  4. membuat lapisan masker air biner menggunakan nilai minimum,
  5. memusatkan peta pada bagian dunia yang menarik, dan
  6. tunjukkan cara melakukan refaktorisasi skrip agar lebih mudah dibaca dan dikelola.

Membuat Visualisasi Dasar

Mulailah dengan menyalin pernyataan berikut ke Editor Kode:

Editor Kode (JavaScript)

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');
Map.addLayer(occurrence);

Pernyataan pertama mereferensikan objek Image Earth Engine untuk set data GSW, dan menyimpannya dalam variabel bernama gsw. Pernyataan kedua memilih satu lapisan set data GSW, dan menyimpannya dalam variabel bernama occurrence. Pernyataan ketiga menambahkan gambar kemunculan ke peta interaktif Editor Kode.

Klik tombol "Run" di Editor Kode, dan setelah beberapa detik, Anda akan melihat peta dengan warna abu-abu di sepanjang garis pantai, mirip dengan Gambar 1.

visualisasi default
Gambar 1. Visualisasi default lapisan data kemunculan air permukaan global.

Di sebagian besar area, set data GSW tampak transparan, karena lokasi tempat gambar Landsat tidak dikumpulkan (yaitu, area laut) atau tempat air tidak terdeteksi oleh pengamatan apa pun dalam 32 tahun disamarkan.

Memeriksa Nilai

Untuk mempelajari nilai lapisan kemunculan air, kita akan menggunakan tab inspector di Editor Kode. Pertama, klik tab inspector, lalu klik peta untuk memilih lokasi. Tab inspector akan menampilkan informasi tentang setiap lapisan yang ada di tempat Anda mengklik.

tab inspector
Gambar 2. Contoh output tab Inspector.

Pada contoh di atas, nilai lapisan bernama value adalah 98. Satuannya adalah poin persentase, sehingga sekitar 98% dari waktu tersebut, lokasi diklasifikasikan sebagai tertutup air. Nilainya adalah rata-rata dari setiap nilai kemunculan air permukaan bulanan, yang menormalisasi variasi musiman, seperti yang dijelaskan dalam Panduan Pengguna Data (v2) .

Melakukan Refaktorisasi untuk Meningkatkan Kualitas Kode Anda

Skrip kita hanya berisi dua pernyataan, tetapi kita sudah memiliki peluang untuk merefaktorisasi kode sehingga skrip akhir kita akan lebih mudah dibaca dan dikelola seiring waktu. Saat ini, pernyataan Map.addLayer() meneruskan satu argumen occurrence, yang merupakan objek gambar Earth Engine yang ingin kita tampilkan di peta. Namun, metode Map.addLayer() juga memungkinkan argumen tambahan diteruskan ke metode tersebut. Untuk melihat argumen yang tersedia dengan cepat, tempatkan kursor setelah tanda kurung buka dan tekan pintasan keyboard untuk "Tampilkan saran kode" guna menampilkan dokumen bantuan untuk metode addLayer. (Pintasan keyboard dapat dilihat dengan memilih menu Bantuan -> Pintasan.)

Argumen Map.addLayer
Gambar 3. Screenshot yang menampilkan argumen metode addLayer.

Pintasan keyboard menunjukkan bahwa ada lima argumen yang dapat diteruskan ke Map.addLayer: eeObject, visParams, name, shown, dan opacity. Dalam skrip saat ini, kita meneruskan satu variabel occurrence yang ditafsirkan sebagai argumen pertama, eeObject. Untuk meneruskan objek variabel dan argumen tambahan yang memberi nama lapisan, kita dapat merefaktorisasi kode untuk menggunakan "argumen bernama" (eeObject dan name) yang diteruskan ke dalam metode dari dalam struktur data JSON seperti yang ditunjukkan di bawah:

Editor Kode (JavaScript)

Map.addLayer({eeObject: occurrence, name: 'Water Occurrence (1984-2015)'});

Jalankan lagi kode untuk memastikan kode masih berfungsi setelah perubahan refaktorisasi. Peta yang dihasilkan tidak boleh berubah.

Menambahkan Parameter Visualisasi

Selanjutnya, kita akan meningkatkan parameter visualisasi default, yang membuat air tampak berwarna abu-abu. Tambahkan pernyataan baru yang membuat variabel VIS_OCCURRENCE dan teruskan sebagai argumen tambahan ke metode addLayer.

Editor Kode (JavaScript)

var VIS_OCCURRENCE = {
  min: 0,
  max: 100,
  palette: ['red', 'blue']
};

Editor Kode (JavaScript)

Map.addLayer({
  eeObject: occurrence.updateMask(occurrence.divide(100)),
  name: 'Water Occurrence (1984-2015)',
  visParams: VIS_OCCURRENCE
});

Parameter visualisasi yang disimpan dalam struktur JSON VIS_OCCURRENCE menunjukkan bahwa warna merah harus digunakan untuk nilai minimum 0% dan warna biru untuk nilai maksimum 100%. Penambahan .updateMask(occurrence.divide(100)) menyebabkan opasitas/transparansi piksel ditetapkan berdasarkan nilai kemunculan.

Jalankan skrip lagi, dan lihat hasil yang direvisi dari perubahan gaya kita.

Kemunculan Air Permukaan
Gambar 4. Screenshot kemunculan air untuk Delta Paraná di dekat Buenos Aires, menggunakan warna merah transparan untuk endpoint nilai minimum 0% dan warna biru solid untuk endpoint nilai maksimum.

Area perairan sekarang berwarna biru. Progres!

Membuat Lapisan Ambang Batas

Gambar kemunculan air berisi informasi tentang seberapa sering air diperkirakan ada menggunakan rentang nilai dari 0 hingga 100%. Namun, sering kali berguna untuk menentukan lapisan air biner (yaitu, "air" vs. "non-air") berdasarkan persentase kemunculan tertentu (yaitu, nilai minimum). Kita akan menggunakan lapisan biner sederhana ini sebagai lapisan latar belakang yang bersih, yang dapat digunakan untuk menempatkan lapisan GSW lainnya. Pembuatan lapisan nilai minimum ini dapat dilakukan menggunakan pernyataan berikut, yang menggunakan nilai minimum 90% untuk memisahkan air dan non-air.

Pertama, kita tentukan variabel visualisasi baru VIS_WATER_MASK untuk menyimpan informasi gaya visual untuk masker air:

Editor Kode (JavaScript)

var VIS_WATER_MASK = {
  palette: ['white', 'black']
};

Kemudian, kita menghitung lapisan masker air menggunakan operator perbandingan lebih besar dari .gt(90), lalu menetapkan area yang sebelumnya dimasker ke nol menggunakan metode .unmask():

Editor Kode (JavaScript)

// Create a water mask layer, and set the image mask so that non-water areas
// are opaque.
var water_mask = occurrence.gt(90).unmask(0);

Terakhir, tambahkan lapisan ke peta. Agar lapisan ini dirender di bawah semua lapisan lainnya, tempatkan pernyataan berikut sebelum pernyataan Map.addLayer lainnya.

Editor Kode (JavaScript)

Map.addLayer({
  eeObject: water_mask,
  visParams: VIS_WATER_MASK,
  name: '90% occurrence water mask'
});
Masker air 90%
Gambar 5. Screenshot masker air 90% untuk Delta Paraná di dekat Buenos Aires.

Menjelajahi Tempat-Tempat Menarik di Dunia

Menjelajahi dunia dengan menggeser dan memperbesar memang menyenangkan, tetapi dunia ini luas dan terkadang akan membantu jika Anda langsung beralih ke lokasi tertentu. Berikut adalah serangkaian pernyataan yang memberikan contoh kecil lokasi menarik, dalam hal air permukaan. Cukup hapus tanda komentar pada salah satu pernyataan, dan skrip Anda akan membuka lokasi tersebut saat dijalankan.

Editor Kode (JavaScript)

// Uncomment one of the following statements to center the map.
// Map.setCenter(-90.162, 29.8597, 10);   // New Orleans, USA
// Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico
// Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA
// Map.setCenter(149.412, -35.0789, 11);  // Lake George, Australia
// Map.setCenter(105.26, 11.2134, 9);     // Mekong River Basin, SouthEast Asia
// Map.setCenter(90.6743, 22.7382, 10);   // Meghna River, Bangladesh
// Map.setCenter(81.2714, 16.5079, 11);   // Godavari River Basin Irrigation Project, India
// Map.setCenter(14.7035, 52.0985, 12);   // River Oder, Germany & Poland
// Map.setCenter(-59.1696, -33.8111, 9);  // Buenos Aires, Argentina
Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru

Ini hanyalah sebagian kecil dari lokasi menarik. Jangan ragu untuk menambahkan milik Anda sendiri.

Refaktorisasi, lagi...

Sebelum beralih ke lapisan berikutnya dari set data GSW, kita akan melakukan sedikit refaktorisasi kode lagi. Secara khusus, kita akan mengelompokkan pernyataan yang serupa, dan menambahkan beberapa komentar yang akan membagi kode menjadi beberapa bagian untuk aset, konstanta, penghitungan, pemusatan peta, dan penambahan lapisan peta.

Berikut adalah skrip akhir yang telah direfaktorisasi:

Editor Kode (JavaScript)

//////////////////////////////////////////////////////////////
// Asset List
//////////////////////////////////////////////////////////////

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');

//////////////////////////////////////////////////////////////
// Constants
//////////////////////////////////////////////////////////////

var VIS_OCCURRENCE = {
  min: 0,
  max: 100,
  palette: ['red', 'blue']
};
var VIS_WATER_MASK = {
  palette: ['white', 'black']
};

//////////////////////////////////////////////////////////////
// Calculations
//////////////////////////////////////////////////////////////

// Create a water mask layer, and set the image mask so that non-water areas
// are opaque.
var water_mask = occurrence.gt(90).unmask(0);

//////////////////////////////////////////////////////////////
// Initialize Map Location
//////////////////////////////////////////////////////////////

// Uncomment one of the following statements to center the map.
// Map.setCenter(-90.162, 29.8597, 10);   // New Orleans, USA
// Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico
// Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA
// Map.setCenter(149.412, -35.0789, 11);  // Lake George, Australia
// Map.setCenter(105.26, 11.2134, 9);     // Mekong River Basin, SouthEast Asia
// Map.setCenter(90.6743, 22.7382, 10);   // Meghna River, Bangladesh
// Map.setCenter(81.2714, 16.5079, 11);   // Godavari River Basin Irrigation Project, India
// Map.setCenter(14.7035, 52.0985, 12);   // River Oder, Germany & Poland
// Map.setCenter(-59.1696, -33.8111, 9);  // Buenos Aires, Argentina
Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru

//////////////////////////////////////////////////////////////
// Map Layers
//////////////////////////////////////////////////////////////

Map.addLayer({
  eeObject: water_mask,
  visParams: VIS_WATER_MASK,
  name: '90% occurrence water mask',
  shown: false
});
Map.addLayer({
  eeObject: occurrence.updateMask(occurrence.divide(100)),
  name: 'Water Occurrence (1984-2015)',
  visParams: VIS_OCCURRENCE
});

Di bagian berikutnya, Anda akan mempelajari perubahan kemunculan air dari waktu ke waktu.