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 lokasi dan frekuensi kemunculan air permukaan selama seluruh periode waktu antara Maret 1984 dan Oktober 2015.

Bagian tutorial ini akan:

  1. menambahkan lapisan peta untuk memvisualisasikan keberadaan air permukaan,
  2. menunjukkan cara membuat kueri nilai lapisan peta,
  3. menambahkan gaya visual kustom untuk meningkatkan kualitas visualisasi,
  4. membuat lapisan masker air biner menggunakan nilai batas,
  5. memusatkan peta pada bagian dunia yang menarik, dan
  6. menunjukkan cara memfaktorkan ulang skrip agar lebih mudah dibaca dan dikelola.

Membuat Visualisasi Dasar

Mulai dengan menyalin pernyataan berikut ke dalam Editor Kode:

Code Editor (JavaScript)

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

Pernyataan pertama mereferensikan objek Gambar 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 kejadian 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 kejadian air permukaan global.

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

Memeriksa Nilai

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

tab pemeriksa
Gambar 2. Contoh output tab Inspector.

Dalam contoh di atas, nilai lapisan bernama value adalah 98. Satuannya adalah persentase poin, jadi sekitar 98% waktu lokasi diklasifikasikan sebagai tertutup air. Nilai ini adalah rata-rata dari setiap nilai kemunculan air permukaan bulanan, yang dinormalisasi terhadap variasi musiman, seperti yang dijelaskan dalam Panduan Pengguna Data (v2) .

Memfaktorkan Ulang untuk Meningkatkan Kualitas Kode Anda

Skrip kita hanya berisi dua pernyataan, tetapi kita sudah memiliki peluang untuk memfaktorkan ulang kode sehingga skrip akhir kita akan lebih mudah dibaca dan dikelola dari waktu ke waktu. Saat ini, pernyataan Map.addLayer() meneruskan satu argumen occurrence, yaitu 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, letakkan kursor setelah tanda kurung buka dan tekan pintasan keyboard untuk "Tampilkan saran kode" guna membuka 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 memfaktorkan ulang kode untuk menggunakan "argumen bernama" (eeObject dan name) yang diteruskan ke metode dari dalam struktur data JSON seperti yang ditunjukkan di bawah:

Code Editor (JavaScript)

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

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

Menambahkan Parameter Visualisasi

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

Code Editor (JavaScript)

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

Code Editor (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.

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

Area perairan kini berwarna biru. Progres!

Membuat Lapisan Batas

Gambar kemunculan air berisi informasi tentang seberapa sering air diperkirakan muncul 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 di atasnya lapisan GSW lainnya dapat ditempatkan. Pembuatan lapisan batas ini dapat dilakukan menggunakan pernyataan berikut, yang menggunakan nilai batas 90% untuk memisahkan air dan non-air.

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

Code Editor (JavaScript)

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

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

Code Editor (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.

Code Editor (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 Paraná Delta di dekat Buenos Aires.

Pergi ke Bagian Dunia yang Menarik

Menjelajahi dunia dengan menggeser dan melakukan zoom memang menyenangkan, tetapi dunia ini sangat luas dan terkadang kita perlu langsung membuka lokasi tertentu. Berikut serangkaian pernyataan yang memberikan sampel kecil lokasi menarik, dalam hal air permukaan. Cukup hapus komentar salah satu pernyataan dalam satu waktu, dan skrip Anda akan menuju ke lokasi tersebut saat dijalankan.

Code Editor (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 sampel kecil dari lokasi menarik. Jangan ragu untuk menambahkan milik Anda sendiri.

Pemfaktoran ulang, lagi...

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

Berikut adalah skrip yang telah difaktorkan ulang:

Code Editor (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 bagaimana perubahan kemunculan air dari waktu ke waktu.