Google Earth Engine & Machine Learning
Nur M. Farda | farda@[Link] | [Link]
Laboratorium Sistem Informasi Geografis
Departemen Sains Informasi Geografi
Fakultas Geografi
Universitas Gadjah Mada
Repositori kode: [Link]
DAFTAR ISI
DAFTAR ISI 0
// 01 SINTAK JAVASCRIPT 1
// 02 HELLO IMAGES 2
// 03 KOMPUTASI CITRA 3
// 04 IMAGE COLLECTIONS 3
// 05 IMAGE DIFFERENCE 4
// 06 IMAGE EXPRESSION 5
// 07 IMAGE CLASSIFICATION - MACHINE LEARNING 6
// 08 EXPORTS 9
// 09 ACCURACY ASSESSMENT 11
// 10 LAYOUT 13
// 11 TIME SERIES 17
REFERENSI 19
// ====================
// 01 SINTAK JAVASCRIPT
// ====================
// Hal pertama yang dilakukan dalam bahasa pemrograman apa pun:
print('Hello, World!');
// Komentar baris dimulai dengan dua garis miring ke depan (forward slash).
/* Komentar multi-baris dimulai dengan garis miring ke depan dan bintang,
dan akhiri dengan bintang dan garis miring. */
// Variabel digunakan untuk menyimpan objek, dan didefinisikan menggunakan kata kunci var.
var the_answer = 50;
// Objek string dimulai dan diakhiri dengan satu kutipan.
var my_variable = 'Saya adalah sebuah string';
// Objek string juga dapat dimulai dan diakhiri dengan tanda kutip ganda.
// Tapi jangan dicampur.
var my_other_variable = "Saya juga string";
// Pernyataan harus diakhiri dengan titik koma, atau editor akan memberi peringatan.
var test = 'Saya merasa tidak lengkap...'
// Kurung digunakan untuk meneruskan parameter ke fungsi.
print('String ini akan dicetak di tab Konsol.');
// Kurung kotak digunakan untuk memilih item dalam daftar.
// Indeks nol mengacu pada item pertama dalam daftar.
var my_list = ['terong', 'apel', 'gandum'];
print(my_list[0]);
// Kurung keriting (atau kurung kurawal) dapat digunakan untuk mendefinisikan kamus (kunci:
pasangan nilai)
var my_dict = {'makanan': 'roti', 'warna': 'merah', 'angka': the_answer};
// Kurung kotak dapat digunakan untuk mengakses item kamus dengan kunci.
print(my_dict['warna']);
// Atau Anda dapat menggunakan notasi titik untuk mendapatkan hasil yang sama.
print(my_dict.warna);
// Fungsi dapat didefinisikan sebagai cara untuk menggunakan kembali kode dan membuatnya
lebih mudah dibaca
nmfarda - 1
var my_hello_function = function(string) {
return 'Hello ' + string + '!';
};
print(my_hello_function('world'));
// ================
// 02 HELLO IMAGES
// ================
// Cari 'dsm' (model permukaan digital) dan temukan:
var image = [Link]('JAXA/ALOS/AW3D30_V1_1');
// Alamat citra dsm:
// [Link]
// Lakukan import dan beri nama 'dsm'.
// Perhatikan bahwa menempelkan ID ke konstruktor dan
// mengimpor setara.
// Print adalah teman Anda!
// Jelajahi objek yang dicetak di konsol.
// Perhatikan beberapa band. Jelajahi deskripsi dataset.
print(dsm);
// Tampilkan. (Hello_images.)
[Link](dsm, '', 'dsm pertama'); // Bad! Tiga band pertama RGB.
// Zoom ke area yang diminati.
// Jelajahi inspector.
// Jelajahi layer control dan stretches.
// Hardcode beberapa parameter.
// Tambahkan nama layer.
[Link]([Link]('AVE'), {min: 0, max: 500}, 'dsm');
// Tambahkan warna. (Saya jelas bukan seorang kartografer.)
var elevPalette = ['black', 'blue', 'green', 'red', 'white'];
var elevParams = {min: 0, max: 500, palette: elevPalette};
[Link]([Link]('AVE'), elevParams, 'dsm palettized');
nmfarda - 2
// ===================
// 03 KOMPUTASI CITRA
// ===================
// Cari 'dsm' (model permukaan digital) dan temukan:
var dsm = [Link]('JAXA/ALOS/AW3D30_V1_1');
// Dapatkan ketinggian dalam pita saluran meter.
var elev = [Link]('AVE');
// Perhitungan ini ('junk') hanyalah contoh matematika dengan citra.
var junk = [Link](3);
[Link](junk, {min: 0, max: 500}, 'junk');
// Operasi relasional pada citra. Temukan semua tempat
// ketinggian lebih dari 500 meter. Citra biner.
var elevGt500 = [Link](500);
// Ini adalah trik yang berguna. Setel semua nol piksel menjadi 'no data' (masked).
elevGt500 = [Link](elevGt500);
[Link](elevGt500, {palette: ['yellow']}, 'elevGt500');
// Gunakan metode statis untuk perhitungan yang lebih kompleks.
var terrain = [Link](elev);
// Cetak untuk mengetahui band apa yang ada di sana.
print('terrain', terrain);
[Link](terrain, {bands: ['hillshade']}, 'hillshade');
// =====================
// 04 IMAGE COLLECTIONS
// =====================
var l8sr = [Link]("LANDSAT/LC08/C01/T1_SR"),
geometry = /* color: #98ff00 */[Link]([108.85, -7.68]);
// Pusat peta
[Link](108.85,-7.68, 12); // Segara Anakan, Cilacap
//[Link](108.7752969,-6.8054676,12); // Tawangsari, Cirebon
// Cari 'landsat 8 surface reflectance' dan impor data tier 1.
// Beri nama l8sr.
// Perhatikan bahwa Anda dapat menambahkannya ke peta:
[Link](l8sr, {bands: ['B4', 'B3', 'B2'], min: 0, max: 3000}, 'l8sr');
nmfarda - 3
// Ini secara implisit memanggil mosaic () untuk komposit bernilai baru.
// Jelajahi koleksi dengan inspector.
// Gambar satu titik pada ROI Anda dengan alat geometri.
// Dapatkan citra dengan lokasi titik.
var spatialFiltered = [Link](geometry);
// Ada berapa citra?
print('Number of images at the point', [Link]());
// Jika ada kurang dari 5000, Anda dapat mencetaknya.
print('spatialFiltered', spatialFiltered);
// Dapatkan tanggal citra yang difilter pada saat itu.
var dateFiltered = spatialFiltered
.filterDate('2018-01-01', '2018-12-31');
print('dateFiltered', dateFiltered);
// Urutkan berdasarkan properti yang menarik.
var sorted = [Link]('CLOUD_COVER');
// Periksa citra pertama (berawan paling sedikit).
print('least cloudy image:', [Link]());
// ====================
// 05 IMAGE DIFFERENCE
// ====================
// Pusat peta
[Link](108.85,-7.68, 12); // Segara Anakan, Cilacap
//[Link](108.7752969,-6.8054676,12); // Tawangsari, Cirebon
// Muat dua komposit Landsat 7 5-tahunan.
var landsat1999 = [Link]('LANDSAT/LE7_TOA_5YEAR/1999_2003');
var landsat2008 = [Link]('LANDSAT/LE7_TOA_5YEAR/2008_2012');
// Hitung NDVI dengan cara yang sulit.
var ndvi1999 = [Link]('B4').subtract([Link]('B3'))
.divide([Link]('B4').add([Link]('B3')));
// Hitung NDVI dengan cara mudah.
var ndvi2008 = [Link](['B4', 'B3']);
nmfarda - 4
[Link](ndvi1999, '','ndvi1999');
[Link](ndvi2008, '', 'ndvi2008');
// Hitung citra perbedaan multi-band.
var diff = [Link](landsat1999);
[Link](diff,
{bands: ['B4', 'B3', 'B2'], min: -32, max: 32},
'difference');
// Hitung perbedaan kuadrat di setiap band.
var squaredDifference = [Link](2);
[Link](squaredDifference,
{bands: ['B4', 'B3', 'B2'], max: 1000},
'squared diff.');
// ====================
// 06 IMAGE EXPRESSION
// ====================
// Muat citra Landsat 8 dari hasil '04_Image_Collection".
var image = [Link]('LANDSAT/LC08/C01/T1_TOA/LC08_121065_20180816');
// Hitung EVI menggunakan ekspresi.
var evi = [Link](
'2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {
'NIR': [Link]('B5'),
'RED': [Link]('B4'),
'BLUE': [Link]('B2')
});
// Hitung NDVI menggunakan ekspresi.
var ndvi = [Link](
'((NIR - RED) / (NIR + RED))', {
'NIR': [Link]('B5'),
'RED': [Link]('B4')
});
[Link](image, 9);
[Link](evi, {min: -1, max: 1, palette: ['FF0000', '00FF00']}, 'evi');
[Link](ndvi, {min: -1, max: 1, palette: ['FF0000', '00FF00']}, 'ndvi');
nmfarda - 5
// ==========================================
// 07 IMAGE CLASSIFICATION - MACHINE LEARNING
// ==========================================
// SUPERVISED CLASSIFICATION - Geometry Imports
// Buat sampel kelas 'urban', 'vegetation', dan 'water' dalam point
// Buat region dalam polygon sebagai batas wilayah yang akan diekspor
// Muat Landsat 8 Surface Reflectance (SR) data
var l8sr = [Link]('LANDSAT/LC08/C01/T1_SR');
// Fungsi untuk cloud mask dari band Fmask data Landsat 8 SR.
function maskL8sr(image) {
// Bit 3 dan 5 masing-masing adalah cloud shadow dan cloud.
var cloudShadowBitMask = [Link](2).pow(3).int();
var cloudsBitMask = [Link](2).pow(5).int();
// Dapatkan band pixel QA (Quality Assessment)
// Landsat 8 SR mempunyai sr_aerosol band, pixel_qa band, dan radsat_qa band
var qa = [Link]('pixel_qa');
// Kedua 'flag' harus diatur ke 'nol', yang menunjukkan kondisi yang jelas (bebas awan dan
bayangan awan).
var mask = [Link](cloudShadowBitMask).eq(0)
.and([Link](cloudsBitMask).eq(0));
// Kembalikan nilai citra yang di-mask, diskalakan ke [0, 1].
return [Link](mask).divide(10000);
}
// Memetakan fungsi lebih dari satu tahun data dan mengambil median.
var image = [Link]('2016-01-01', '2016-12-31')
.map(maskL8sr)
.median();
// Tampilkan hasil image median
[Link](image, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, 'Image');
// Menggabungkan kelas-kelas sampel penutup lahan menjadi satu feature class.
var newfc = [Link](vegetation).merge(water);
// Print(newfc); // new feature class
[Link](newfc,11);
nmfarda - 6
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];
// Membuat variabel untuk menyimpan training
var training = [Link](bands).sampleRegions({
collection: newfc,
properties: ['landcover'],
scale: 30
});
// Print(training)
// CLASSIFIERS:
var classifier = [Link]().train({
features: training,
classProperty: 'landcover',
inputProperties: bands
});
print([Link]());
var classified = [Link](bands).classify(classifier);
[Link](classified, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'CART');
var classifier1 = [Link](10).train({
features: training,
classProperty: 'landcover',
inputProperties: bands,
});
var classifier2 = [Link]().train({
features: training,
classProperty: 'landcover',
inputProperties: bands,
});
var classifier3 = [Link]().train({
features: training,
classProperty: 'landcover',
inputProperties: bands,
});
var classifier4 = [Link]().train({
features: training,
classProperty: 'landcover',
inputProperties: bands,
nmfarda - 7
});
var classified1 = [Link](classifier1);
var classified2 = [Link](classifier2);
var classified3 = [Link](classifier3);
var classified4 = [Link](classifier4);
[Link](classified4, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'SVM');
[Link](classified3, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'GMO Maximum
Entropy');
[Link](classified2, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'Naive Bayes');
[Link](classified1, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'Random Forest');
var mode = [Link](classified2).addBands(classified3)
.reduce([Link]());
[Link](mode, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'Mode');
// Hasil CHART:
var options = {
lineWidth: 1,
pointSize: 2,
hAxis: {title: 'Classes'},
vAxis: {title: 'Area m^2'},
title: 'Area by class',
series: {
0: { color: 'red'},
1: { color: 'green'},
2: { color: 'blue'}
}
};
var areaChart = [Link]({
image: [Link]().addBands(classified),
classBand: 'classification',
region: region,
scale: 30,
reducer: [Link]()
}).setOptions(options)
.setSeriesNames(['urban', 'vegetation', 'water']);
print(areaChart);
=============
nmfarda - 8
// 08 EXPORTS
=============
// SUPERVISED CLASSIFICATION - Geometry Imports
// Buat sampel kelas 'urban', 'vegetation', dan 'water' dalam point
// Buat region dalam polygon
// Muat Landsat 8 surface reflectance data
var l8sr = [Link]('LANDSAT/LC08/C01/T1_SR');
// Fungsi untuk cloud mask dari band Fmask data Landsat 8 SR.
function maskL8sr(image) {
// Bit 3 dan 5 masing-masing adalah cloud shadow dan cloud.
var cloudShadowBitMask = [Link](2).pow(3).int();
var cloudsBitMask = [Link](2).pow(5).int();
// Dapatkan band pixel QA.
var qa = [Link]('pixel_qa');
// Kedua 'flag' harus diatur ke 'nol', yang menunjukkan kondisi yang jelas.
var mask = [Link](cloudShadowBitMask).eq(0)
.and([Link](cloudsBitMask).eq(0));
// Kembalikan nilai citra yang di-mask, diskalakan ke [0, 1].
return [Link](mask).divide(10000);
}
// Memetakan fungsi lebih dari satu tahun data dan mengambil median.
var image = [Link]('2016-01-01', '2016-12-31')
.map(maskL8sr)
.median();
// Tampilkan hasilnya.
[Link](image, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, 'image');
var newfc = [Link](vegetation).merge(water);
//print(newfc);
//[Link](newfc,11);
[Link](region, 11);
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];
var training = [Link](bands).sampleRegions({
nmfarda - 9
collection: newfc,
properties: ['landcover'],
scale: 30
});
// Print(training)
var classifier = [Link]().train({
features: training,
classProperty: 'landcover',
inputProperties: bands
});
print([Link]());
var classified = [Link](bands).classify(classifier);
//[Link](classified, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'CART');
// Clip dengan region
var clipimage = [Link](region);
print(clipimage);
[Link](clipimage, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'clipcart');
// RASTER TO VECTOR
// Convert clipimage to vectors.
var vectors = [Link](classified).reduceToVectors({
geometry: region,
crs: [Link](),
scale: 30,
geometryType: 'polygon',
eightConnected: true,
labelProperty: 'zone',
reducer: [Link]()
});
// EXPORT to SHP
// Make a display image for the vectors, add it to the map.
var display = [Link](0).updateMask(0).paint(vectors, 'black', 1);
[Link](display, {palette: 'black'}, 'vectors');
// Export the FeatureCollection to a SHP file.
[Link]({
collection: vectors,
nmfarda - 10
description:'L8_landcover',
fileFormat: 'SHP'
});
==========================
// 09 ACCURACY ASSESSMENT
==========================
// SUPERVISED CLASSIFICATION - Geometry Imports
// Buat sampel kelas 'urban', 'vegetation', dan 'water' dalam point
// Buat region dalam polygon
// Muat Landsat 8 surface reflectance data
var l8sr = [Link]('LANDSAT/LC08/C01/T1_SR');
// Fungsi untuk cloud mask dari band Fmask data Landsat 8 SR.
function maskL8sr(image) {
// Bit 3 dan 5 masing-masing adalah cloud shadow dan cloud.
var cloudShadowBitMask = [Link](2).pow(3).int();
var cloudsBitMask = [Link](2).pow(5).int();
// Dapatkan band pixel QA.
var qa = [Link]('pixel_qa');
// Kedua 'flag' harus diatur ke 'nol', yang menunjukkan kondisi yang jelas.
var mask = [Link](cloudShadowBitMask).eq(0)
.and([Link](cloudsBitMask).eq(0));
// Kembalikan nilai citra yang di-mask, diskalakan ke [0, 1].
return [Link](mask).divide(10000);
}
// Memetakan fungsi lebih dari satu tahun data dan mengambil median.
var image = [Link]('2016-01-01', '2016-12-31')
.map(maskL8sr)
.median();
// Tampilkan hasil image median.
[Link](image, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, 'image');
// Membuat feature class untuk training
var newfc = [Link](vegetation).merge(water);
nmfarda - 11
//print(newfc); // new feature class
//[Link](newfc,11);
[Link](region, 11);
// Membuat feature class untuk test/validasi
var newfc_validation = urban_validation.merge(vegetation_validation).merge(water_validation);
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];
var sample = [Link](bands).sampleRegions({
collection: newfc,
properties: ['landcover'],
scale: 30
});
// Print(sample)
var sample_validation = [Link](bands).sampleRegions({
collection: newfc_validation,
properties: ['landcover'],
scale: 30
});
// Print(sample_validation)
// Membagi sampel untuk training 80% dan validation 20%
sample = [Link]({ seed: 1 });
var training = [Link]([Link]('random', 0.8)); // 80%
var validation = [Link]([Link]('random', 0.8)); // 20%
var classifier = [Link]().train({ // coba ganti dengan libsvm, gmoMaxEnt
features: training,
classProperty: 'landcover',
inputProperties: bands
});
print([Link]());
var classified = [Link](bands).classify(classifier);
[Link](classified, {min: 0, max: 2, palette: ['red', 'green', 'blue']}, 'CART');
var trainAccuracy = [Link]().accuracy();
print('trainAccuracy', trainAccuracy); // 1.0
var testAccuracy = validation
.classify(classifier)
nmfarda - 12
.errorMatrix('landcover', 'classification')
.accuracy();
print('testAccuracy', testAccuracy); // 1.0
var testAccuracy2 = sample_validation // Menggunakan sample baru di luar sample training
.classify(classifier)
.errorMatrix('landcover', 'classification')
.accuracy();
print('testAccuracy2', testAccuracy2); // 1.0
// Hasil CHART:
var options = {
lineWidth: 1,
pointSize: 2,
hAxis: {title: 'Classes'},
vAxis: {title: 'Area m^2'},
title: 'Area by class',
series: {
0: { color: 'red'},
1: { color: 'green'},
2: { color: 'blue'}
}
};
var areaChart = [Link]({
image: [Link]().addBands(classified),
classBand: 'classification',
region: region,
scale: 30,
reducer: [Link]()
}).setOptions(options)
.setSeriesNames(['urban', 'vegetation', 'water']);
print(areaChart);
=============
// 10 LAYOUT
=============
// SUPERVISED CLASSIFICATION - Geometry Imports
// Buat sampel kelas 'urban', 'vegetation', dan 'water' dalam point
// Buat region dalam polygon
nmfarda - 13
// Muat Landsat 8 surface reflectance data
var l8sr = [Link]('LANDSAT/LC08/C01/T1_SR');
// Fungsi untuk cloud mask dari band Fmask data Landsat 8 SR.
function maskL8sr(image) {
// Bit 3 dan 5 masing-masing adalah cloud shadow dan cloud.
var cloudShadowBitMask = [Link](2).pow(3).int();
var cloudsBitMask = [Link](2).pow(5).int();
// Dapatkan band pixel QA.
var qa = [Link]('pixel_qa');
// Kedua 'flag' harus diatur ke 'nol', yang menunjukkan kondisi yang jelas.
var mask = [Link](cloudShadowBitMask).eq(0)
.and([Link](cloudsBitMask).eq(0));
// Kembalikan nilai citra yang di-mask, diskalakan ke [0, 1].
return [Link](mask).divide(10000);
}
// Memetakan fungsi lebih dari satu tahun data dan mengambil median.
var image = [Link]('2016-01-01', '2016-12-31')
.map(maskL8sr)
.median();
// Tampilkan hasilnya.
[Link](image, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, 'image');
var newfc = [Link](vegetation).merge(water);
//print(newfc); // new feature class
//[Link](newfc,11);
[Link](region, 11);
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];
var sample = [Link](bands).sampleRegions({
collection: newfc,
properties: ['landcover'],
scale: 30
});
// Print(sample)
// Membagi sampel untuk training 80% dan validation 20%
nmfarda - 14
sample = [Link]({ seed: 1 });
var training = [Link]([Link]('random', 0.8)); // 80%
var validation = [Link]([Link]('random', 0.8)); // 20%
var classifier = [Link]().train({ // coba ganti dengan libsvm, gmoMaxEnt
features: training,
classProperty: 'landcover',
inputProperties: bands
});
print([Link]());
var classified = [Link](bands).classify(classifier);
var landcoverVis = {
min: 0.0,
max: 2.0,
palette: ['FF0000', '00FF00', '0000FF'],
};
[Link](classified, landcoverVis, 'CART');
// Hasil CHART:
var options = {
lineWidth: 1,
pointSize: 2,
hAxis: {title: 'Classes'},
vAxis: {title: 'Area m^2'},
title: 'Area by class',
series: {
0: { color: 'FF0000'},
1: { color: '00FF00'},
2: { color: '0000FF'}
}
};
var areaChart = [Link]({
image: [Link]().addBands(classified),
classBand: 'classification',
region: region,
scale: 30,
reducer: [Link]()
}).setOptions(options)
.setSeriesNames(['urban', 'vegetation', 'water']);
nmfarda - 15
print(areaChart);
// Tetapkan ukuran dan letak legenda
var legend = [Link]({
style: {
position: 'bottom-left',
padding: '8px 15px'
}
});
// Membuat judul
var legendTitle = [Link]({
value: 'Legend:',
style: {
fontWeight: 'bold',
fontSize: '18px',
margin: '0 0 4px 0',
padding: '0'
}
});
// Menampilkan judul ke panel
[Link](legendTitle);
// Membuat style
var makeRow = function(color, name) {
// Mewarnai kotak simbol
var colorBox = [Link]({
style: {
backgroundColor: '#' + color,
// Gunakan padding untuk memberi ukuran panjang dan lebar kotak simbol.
padding: '8px',
margin: '0 0 4px 0'
}
});
// Membuat label
var description = [Link]({
value: name,
style: {margin: '0 0 4px 6px'}
});
nmfarda - 16
// Mengembalikan panel
return [Link]({
widgets: [colorBox, description],
layout: [Link]('horizontal')
});
};
// Memberi warna
var palette =['FF0000', '00FF00', '0000FF'];
// Menamai legenda
var names = ['Urban','Vegetation','Water'];
// Menambahkan warna dan nama
for (var i = 0; i < 3; i++) {
[Link](makeRow(palette[i], names[i]));
}
// Menambahkan legenda ke peta atau dapat juga di-print pada console
[Link](legend);
================
// 11 TIME SERIES
================
// Buat polygon (geometry) sebagai batas untuk analisis time series.
// Buat koleksi citra S-2 (Sentinel 2) untuk periode 2016-2019.
var S2 = [Link]('COPERNICUS/S2')
// filter tanggal mulai dan berakhir
.filterDate('2016-01-01', '2019-01-01')
// filter sesuai batas yang ditentukan
.filterBounds(geometry);
// Function untuk mask cloud dari built-in informasi kualitas saluran
// dari tutupan awan
var maskcloud1 = function(image) {
var QA60 = [Link](['QA60']);
return [Link]([Link](1));
};
nmfarda - 17
// Fungsi untuk menghitung dan menambahkan saluran NDVI
var addNDVI = function(image) {
return [Link]([Link](['B8', 'B4']));
};
// Menambahkan saluran NDVI ke koleksi citra
var S2 = [Link](addNDVI);
// Ekstrak saluarn NDVI dan membuat citra komposit median NDVI
var NDVI = [Link](['nd']);
var NDVImed = [Link](); //Hanya mengubah nama variabel ini ;)
// Membuat palettes untuk menampilkan NDVI
var ndvi_pal = ['#d73027', '#f46d43', '#fdae61', '#fee08b', '#d9ef8b',
'#a6d96a'];
// Membuat time series chart.
var plotNDVI = [Link](S2, geometry,[Link](),
'nd',500,'system:time_start', 'system:index')
.setChartType('LineChart').setOptions({
title: 'NDVI short-term time series',
hAxis: {title: 'Date'},
vAxis: {title: 'NDVI'}
});
// Display.
print(plotNDVI);
// Display hasil NDVI ke peta
[Link](geometry, 12);
[Link]([Link](geometry), {min:-0.5, max:0.9, palette: ndvi_pal}, 'NDVI');
// Parameter visualisasi.
var args = {
crs: 'EPSG:3857', // Maps Mercator
dimensions: '300',
region: geometry,
min: -1,
max: 1,
palette: ndvi_pal,
framesPerSecond: 4,
};
// Buat thumbnail video dan tambahkan ke peta.
nmfarda - 18
var thumb = [Link]({
// Menentukan koleksi "image", membuat animasi urutan "images".
image: NDVI,
params: args,
style: {
position: 'bottom-right',
width: '320px'
}});
[Link](thumb);
REFERENSI
[Link]
[Link]
[Link]
[Link]
nmfarda - 19