Anda di halaman 1dari 20

Affina Dyan Setyawati

21/489570/PTK/14292

LAPORAN
PRAKTIKUM
Sistem Penginderaan Jauh

Magister Teknik Geomatika, Departemen Teknik Geodesi


Fakultas Teknik, Universitas Gadjah Mada
LAPORAN PRAKTIKUM MINGGU KEENAM

A. Mata Acara Praktikum


Mengenal Earth Engine API pada Google Earth Engine beserta
kemampuannya dalam analisis Penginderaan Jauh

B. Tujuan
Dapat melakukan analisis meliputi:
a) Visualizing Images and Image Bands
b) Computations using Images
c) Image Collections
d) Compositing, Masking, and Mosaicking
C. Waktu dan Tempat Pelaksanaan
Hari, tanggal : Kamis, 22 September 2022
Waktu : 13.00 - 15.30 WIB
Tempat : Departemen Teknik Geodesi FT UGM
D. Alat dan Bahan
Alat
Seperangkat laptop untuk mengolah data dan menyusun laporan
Microsoft Word 2016 untuk menyusun laporan
Google Earth Engine (GEE) untuk mengolah data dan melakukan analisis
Bahan
Model Ketinggian Digital yang diberdayakan secara Hidrologis (DEM-
H) diturunkan dari data SRTM yang diperoleh NASA pada Februari 2000.
Model tersebut telah dikondisikan secara hidrologis dan drainase telah
ditegakkan. DEM-H menangkap jalur aliran berdasarkan elevasi SRTM dan
garis aliran yang dipetakan, dan mendukung penggambaran daerah
tangkapan dan atribut hidrologi terkait. Produk ini menyediakan DEM yang
cocok untuk digunakan dalam analisis hidrologi seperti definisi daerah
tangkapan dan rute aliran. Ada beberapa daerah dengan nilai negatif yang
tidak terduga: dekat Canberra sekitar (150.443044, -35.355281) dengan nilai -
55 dan di Australia Barat sekitar (124.84, -16.44) dengan -43.

Landsat 8 Collection 2 Tier 1 terkalibrasi top-of-atmosphere (TOA)


reflektansi. Koefisien kalibrasi diekstraksi dari metadata gambar. Scene
Landsat dengan kualitas data tertinggi yang tersedia ditempatkan ke Tingkat
1 dan dianggap cocok untuk analisis pemrosesan deret waktu. Tier 1
mencakup data yang diproses Level-1 Precision Terrain (L1TP) yang memiliki
radiometri yang dicirikan dengan baik dan dikalibrasi di seluruh sensor
Landsat yang berbeda.
E. Langkah Kerja + Hasil & Pembahasan
a) Memastikan bahwa akun Google sudah terdaftar pada layanan
https://code.earthengine.google.com/, jika belum dapat melakukan sign
up terlebih dahulu
b) Menambahkan New Repository → New File untuk masing-masing
kelompok pemrosesan (ada 4 file)
c) Mencari dataset yang akan digunakan dalam praktikum → berupa image
dan image collection, dapat dicari pada Data Catalog dan untuk image
collection dapat dilakukan pada kolom pencarian GEE
1) Visualizing Images and Image Bands – Menampilkan visualisasi gambar
Script yang digunakan
// Instantiate an image with the Image constructor.
var image = ee.Image("AU/GA/DEM_1SEC/v10/DEM-H");

// Zoom to a location.
Map.setCenter(133.85, -23.90, 4);

// Display the image on the map.


Map.addLayer(image);

print('SRTM image', image);

Map.addLayer(image, {min: 0, max: 0.5}, 'custom visualization');

Map.addLayer(image, {min: 0, max: 1, palette: ['blue', 'green', 'red']},


'custom palette');
Variabel yang digunakan
var image: var adalah variabel dari perintah. Pernyataan ini ditulis
sebelum menuliskan sebuah script perintah, sedangkan image
merupakan nama dari variabel perintah. Variabel ini digunakan untuk
mendefinisikan variabel berupa image → selanjutnya “image” dianggap
sebagai nama variabel sehingga tidak di-italic
Map.setCenter: melakukan pengaturan titik tengah tampilan GEE,
urutan ketiga adalah pengaturan zooming
Map.addLayer: menambahkan layer tertentu yang merupakan hasil
analisis dari image yang telah dimasukkan, pada contoh di atas
ditambahkan layer hasil kustomisasi visualisasi dan kustomisasi palet
untuk mengubah tampilan awal image

Tanda petik ‘’ merupakan penanda jenis data string, bisa juga


menggunakan “” asalkan konsisten. Namun, GEE selalu memberikan
peringatan apabila ada penulisan script yang kurang tepat.
Titik koma ; digunakan sebagai akhir sebuah perintah.
Penggunaan // menjadikan kalimat setelahnya menjadi sebuah
komentar
Hasil running script
// Instantiate an image with the
Image constructor.
var image =
ee.Image('AU/GA/DEM_1SEC/v10/DEM
-H');

// Zoom to a location.
Map.setCenter(133.85, -23.90, 4);

// Display the image on the map.


Map.addLayer(image);
// Instantiate an image with the
Image constructor.
var image =
ee.Image('AU/GA/DEM_1SEC/v10/DEM
-H');

// Zoom to a location.
Map.setCenter(133.85, -23.90, 4);

// Display the image on the map.


Map.addLayer(image);

print('SRTM image', image);


// Instantiate an image with the
Image constructor.
var image =
ee.Image('AU/GA/DEM_1SEC/v10/DEM
-H');

// Zoom to a location.
Map.setCenter(133.85, -23.90, 4);

// Display the image on the map.


Map.addLayer(image);

print('SRTM image', image);

Map.addLayer(image, {min: 0, max:


1000}, 'custom visualization');
Jika dicobakan nilai max = 1

// Instantiate an image with the


Image constructor.
var image =
ee.Image('AU/GA/DEM_1SEC/v10/DEM
-H');

// Zoom to a location.
Map.setCenter(133.85, -23.90, 4);

// Display the image on the map.


Map.addLayer(image);

print('SRTM image', image);

Map.addLayer(image, {min: 0, max:


1000}, 'custom visualization');
Map.addLayer(image, {min: 0, max:
1000, palette: ['blue', 'green', 'red']},
'custom palette');

Jika dicobakan nilai max = 1

Pembahasan: DEM merupakan hasil turunan dari data SRTM yang


diperoleh NASA pada Februari 2000 yang telah dikondisikan secara
hidrologis dan terhadap drainase yang ada. Data ini cocok untuk analisis
hidrologi seperti definisi daerah tangkapan dan rute aliran. Hasil
visualisasi pada GEE menunjukkan bahwa DEM dapat ditampilkan dalam
beberapa tipe tampilan. Custom visualization memberikan alternatif
untuk menampilkan image dengan derajat keabuan yang berbeda. Dari
hasil running script diperoleh hasil bahwa semakin besar nilai max yang
diberikan, maka image akan semakin gelap, begitupun sebaliknya. Hal ini
juga berlaku untuk custom pallete yang menampilkan image dengan
cakupan warna RGB, semakin kecil nilai max, maka akan semakin sedikit
variasi yang dihasilkan. Fungsi print digunakan untuk menampilkan
history pemrosesan image di Console.
2) Computations using Images – Komputasi menggunakan gambar – bisa
menggunakan data yang sama karena merupakan SRTM
Script yang digunakan
// Load the SRTM image.
var srtm = ee.Image('AU/GA/DEM_1SEC/v10/DEM-H');

// Apply an algorithm to an image.


var slope = ee.Terrain.slope(srtm);
// Display the result.
Map.setCenter(133.85, -23.90, 4);
Map.addLayer(slope, {min: 0, max :60}, 'slope');

// Get the aspect (in degrees).


var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.


var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.


Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

// Compute the mean elevation in the polygon.


var meanDict = srtm.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: geometry,
scale: 90
});

// Get the mean from the dictionary and print it.


var mean = meanDict.get('elevation');

var scale = srtm.projection().nominalScale();


print('SRTM scale in meters', scale);
print('Mean elevation', mean);
Variabel yang digunakan
var srtm: var adalah variabel dari perintah. Pernyataan ini ditulis
sebelum menuliskan sebuah script perintah, sedangkan srtm
merupakan nama dari variabel perintah. Variabel ini digunakan untuk
mendefinisikan variabel berupa layer SRTM
var slope: digunakan untuk mendefinisikan variabel hasil perhitungan
slope dari srtm
Map.setCenter: melakukan pengaturan titik tengah tampilan GEE,
urutan ketiga adalah pengaturan zooming
Map.addLayer: menambahkan layer tertentu yang merupakan hasil
analisis dari image yang telah dimasukkan
var aspect: mendefinisikan variabel untuk melakukan perhitungan
aspect
var sinImage: variabel untuk melakukan konversi dari aspect menjadi
radians dengan menghitung nilai sin dari aspect
var meanDict: variabel untuk melakukan pengecekan region of interest
untuk mencegah kemungkinan kesalahan proses komputasi untuk area
yang sangat luas
var mean: variabel untuk menghitung rerata elevasi dari poligon
var scale: variabel untuk menghitung skala
Hasil running script
// Load the SRTM image.
var srtm =
ee.Image('AU/GA/DEM_1SEC/v10/DEM-
H');

// Apply an algorithm to an image.


var slope = ee.Terrain.slope(srtm);

// Display the result.


Map.setCenter(133.85, -23.90, 4);
Map.addLayer(slope, {min: 0, max :60},
'slope');
// Load the SRTM image.
var srtm =
ee.Image('AU/GA/DEM_1SEC/v10/DEM-
H');

// Apply an algorithm to an image.


var slope = ee.Terrain.slope(srtm);

// Display the result.


Map.setCenter(133.85, -23.90, 4);
Map.addLayer(slope, {min: 0, max :60},
'slope');

// Get the aspect (in degrees).


var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin


of the aspect.
var sinImage =
aspect.divide(180).multiply(Math.PI).sin
();

// Display the result.


Map.addLayer(sinImage, {min: -1, max:
1}, 'sin');
// Load the SRTM image.
var srtm =
ee.Image('AU/GA/DEM_1SEC/v10/DEM-
H');

// Apply an algorithm to an image.


var slope = ee.Terrain.slope(srtm);

// Display the result.


Map.setCenter(133.85, -23.90, 4);
Map.addLayer(slope, {min: 0, max :60},
'slope');

// Get the aspect (in degrees).


var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin


of the aspect.
var sinImage =
aspect.divide(180).multiply(Math.PI).sin
();

// Display the result.


Map.addLayer(sinImage, {min: -1, max:
1}, 'sin');

// Compute the mean elevation in the


polygon.
var meanDict = srtm.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: geometry,
scale: 90
});

// Get the mean from the dictionary


and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);
// Load the SRTM image.
var srtm =
ee.Image('AU/GA/DEM_1SEC/v10/DEM-
H');

// Apply an algorithm to an image.


var slope = ee.Terrain.slope(srtm);

// Display the result.


Map.setCenter(133.85, -23.90, 4);
Map.addLayer(slope, {min: 0, max :60},
'slope');

// Get the aspect (in degrees).


var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin


of the aspect.
var sinImage =
aspect.divide(180).multiply(Math.PI).sin
();

// Display the result.


Map.addLayer(sinImage, {min: -1, max:
1}, 'sin');

// Compute the mean elevation in the


polygon.
var meanDict = srtm.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: geometry,
scale: 90
});

// Get the mean from the dictionary


and print it.
var mean = meanDict.get('elevation');
var scale =
srtm.projection().nominalScale();
print('SRTM scale in meters', scale);
print('Mean elevation', mean);

Pembahasan: fungsi komputasi yang digunakan adalah perhitungan slope


untuk layer yang berupa DEM/SRTM, kemudian dari slope yang diperoleh
dapat dilanjutkan untuk dihitung aspect-nya dengan menghitung nilai sin
dari slope. Aspect menunjukkan arah kemiringan. Nilai setiap sel dalam
raster keluaran menunjukkan arah kompas yang menghadap permukaan
di lokasi itu, diukur searah jarum jam dalam satuan derajat. 00 dari utara
hingga 3600 kembali lagi ke utara. Daerah yang datar dan tidak memiliki
arah lereng memiliki nilai -1. Setelah berhasil menampilkan aspect,
selanjutnya dilakukan perhitungan terhadap nilai elevasi rerata pada
area yang ditandai dengan ROI berupa polygon. Hasil akan ditampilkan
pada Console.

Sempat terjadi error karena polygon belum didefinisikan. Geometry bisa


diubah namanya menjadi polygon, tetapi di sini tetap dibiarkan menjadi
“geometry”. Poligon dapat dibuat dengan fitur di bawah ini:
Berikut ini merupakan error yang diakibatkan oleh adanya metode
reduceRegion() sebagai langkah preventif untuk mencegah kemungkinan
kesalahan proses komputasi untuk area yang sangat luas. GEE akan
menanyakan kepada pengguna apakah benar akan menggunakan area
seluas itu, jika memang benar bisa diberikan parameter bestEffort: true.

GEE juga menyediakan fitur untuk melakukan stretching data seperti


berikut ini. Stretch dilakukan untuk memudahkan pengguna untuk
memahami data secara visual, untuk menajamkan fitur tertentu.

3) Image Collections – Koleksi gambar


Script yang digunakan
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var spatialFiltered = l8.filterBounds(geometry);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-


31');
print('temporalFiltered', temporalFiltered);

// This will sort from least to most cloudy.


var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.


var scene = sorted.first();

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};


Map.addLayer(scene, visParams, 'true-color composite');

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');
Variabel yang digunakan
var l8: variabel yang menjelaskan image collection berupa LANDSAT 8
var spatialFiltered: menjelaskan bahwa image yang ditampilkan
merupakan hasil seleksi secara spasial menggunakan fitur geometry
var temporalFiltered: image yang ditampilkan merupakan seleksi
secara temporal pada rentang waktu tertentu
var sorted: melakukan pengurutan data menggunakan parameter
tutupan awan mulai dari yang paling sedikit hingga paling banyak
tutupan awan
var scene: mewakili hasil tutupan awan paling sedikit
Map.addLayer: menambahkan layer tertentu yang merupakan hasil
analisis dari image yang telah dimasukkan
Hasil running script
var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
;

var spatialFiltered = l8.filterBounds(geometry);


print('spatialFiltered', spatialFiltered);

var temporalFiltered =
spatialFiltered.filterDate('2015-01-01', '2015-12-
31');
print('temporalFiltered', temporalFiltered);

// This will sort from least to most cloudy.


var sorted =
temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.


var scene = sorted.first();

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');
var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
;

var spatialFiltered = l8.filterBounds(geometry);


print('spatialFiltered', spatialFiltered);

var temporalFiltered =
spatialFiltered.filterDate('2015-01-01', '2015-12-
31');
print('temporalFiltered', temporalFiltered);

// This will sort from least to most cloudy.


var sorted =
temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.


var scene = sorted.first();

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};


Map.addLayer(scene, visParams, 'true-color
composite');
var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
;

var spatialFiltered = l8.filterBounds(geometry);


print('spatialFiltered', spatialFiltered);

var temporalFiltered =
spatialFiltered.filterDate('2015-01-01', '2015-12-
31');
print('temporalFiltered', temporalFiltered);

// This will sort from least to most cloudy.


var sorted =
temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.


var scene = sorted.first();

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};


Map.addLayer(scene, visParams, 'true-color
composite');

var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
;
var landsat2016 = l8.filterDate('2016-01-01', '2016-
12-31');
Map.addLayer(landsat2016, visParams, 'l8
collection');

Pembahasan: image collection digunakan untuk mencari image dengan


kriteria tertentu, seperti tutupan awan, rentang waktu tertentu, serta
wilayah cakupan. Fungsi ini sangat berguna untuk menampilkan citra
yang dibutuhkan tanpa harus mengunduhnya terlebih dahulu. Berikut ini
adalah proses penambahan 18 fitur titik untuk menandai wilayah yang
ingin dicek ketersediaan image-nya.
4) Compositing, Masking, and Mosaicking – Komposit, pembuatan mask, dan
mosaik
Script yang digunakan
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

// Get the median over time, in each band, in each pixel.


var median = l8.filterDate('2016-01-01', '2016-12-31').median();

// Make a handy variable of visualization parameters.


var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};

// Display the median composite.


Map.addLayer(median, visParams, 'median');

// Load or import the Hansen et al. forest change dataset.


var hansenImage =
ee.Image('UMD/hansen/global_forest_change_2015');

// Select the land/water mask.


var datamask = hansenImage.select('datamask');

// Create a binary mask.


var mask = datamask.eq(1);

// Update the composite mask with the water mask.


var maskedComposite = median.updateMask(mask);
Map.addLayer(maskedComposite, visParams, 'masked');
// Make a water image out of the mask.
var water = mask.not();

// Mask water with itself to mask all the zeros (non-water).


water = water.mask(water);

// Make an image collection of visualization images.


var mosaic = ee.ImageCollection([
median.visualize(visParams),
water.visualize({palette: '000044'}),
]).mosaic();

// Display the mosaic.


Map.addLayer(mosaic, {}, 'custom mosaic');
Variabel yang digunakan
var l8: variabel yang menjelaskan image collection berupa LANDSAT 8
var landsat2016: menunjukkan hasil filter temporal
var median: hasil median untuk setiap waktu dan setiap piksel
var visParams: variabel untuk visualisasi natural color sebagai hasil
komposit
Map.addLayer: menambahkan layer tertentu yang merupakan hasil
analisis dari image yang telah dimasukkan
var hansenImage: memuat dataset hansen berupa perubahan hutan
var datamask: memilih darat/laut
var mask: hasil masking
var maskedComposite: memperbarui hasil masking komposit dengan
masking air
var water: membuat air terpisah dari hasil masking
var mosaic: membuat koleksi visualisasi gambar-gambar yang
dihasilkan
Hasil running script
var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-
12-31');
Map.addLayer(landsat2016, visParams, 'l8
collection');

// Get the median over time, in each band, in each


pixel.
var median = l8.filterDate('2016-01-01', '2016-12-
31').median();

// Make a handy variable of visualization


parameters.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};

// Display the median composite.


Map.addLayer(median, visParams, 'median');
var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-
12-31');
Map.addLayer(landsat2016, visParams, 'l8
collection');

// Get the median over time, in each band, in each


pixel.
var median = l8.filterDate('2016-01-01', '2016-12-
31').median();

// Make a handy variable of visualization


parameters.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};

// Display the median composite.


Map.addLayer(median, visParams, 'median');

// Load or import the Hansen et al. forest change


dataset.
var hansenImage =
ee.Image('UMD/hansen/global_forest_change_2015
');

// Select the land/water mask.


var datamask = hansenImage.select('datamask');

// Create a binary mask.


var mask = datamask.eq(1);

// Update the composite mask with the water


mask.
var maskedComposite =
median.updateMask(mask);
Map.addLayer(maskedComposite, visParams,
'masked');
var l8 =
ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-
12-31');
Map.addLayer(landsat2016, visParams, 'l8
collection');

// Get the median over time, in each band, in each


pixel.
var median = l8.filterDate('2016-01-01', '2016-12-
31').median();

// Make a handy variable of visualization


parameters.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};

// Display the median composite.


Map.addLayer(median, visParams, 'median');

// Load or import the Hansen et al. forest change


dataset.
var hansenImage =
ee.Image('UMD/hansen/global_forest_change_2015
');

// Select the land/water mask.


var datamask = hansenImage.select('datamask');

// Create a binary mask.


var mask = datamask.eq(1);

// Update the composite mask with the water


mask.
var maskedComposite =
median.updateMask(mask);
Map.addLayer(maskedComposite, visParams,
'masked');

// Make a water image out of the mask.


var water = mask.not();

// Mask water with itself to mask all the zeros


(non-water).
water = water.mask(water);

// Make an image collection of visualization


images.
var mosaic = ee.ImageCollection([
median.visualize(visParams),
water.visualize({palette: '000044'}),
]).mosaic();

// Display the mosaic.


Map.addLayer(mosaic, {}, 'custom mosaic');

Pembahasan: proses compositing menghasilkan image komposit natural


color. Masking berguna untuk memisahkan antara darat dan laut, serta
mosaik digunakan untuk menggabungkan nilai masking perairan yang
divisualisasikan dengan warna sebenarnya (laut ~ biru) sehingga
memudahkan dalam pemahaman kartografi.
F. Kesimpulan
GEE dapat melakukan visualisasi berdasarkan derajat keabuan maupun RGB,
semakin kecil nilai max yang digunakan, maka akan semakin terang (untuk
derajat keabuan) dan beragam (untuk RGB) tampilan image-nya. Dalam
praktikum ini digunakan nilai max = 1 dan max = 1000 untuk membandingkan
hasilnya. GEE juga dapat melakukan komputasi untuk memperhitungkan
slope dan aspect menggunakan data DEM atau SRTM, kemudian menghitung
nilai rerata elevasi pada suatu wilayah dan menghitung skalanya. Berikut
merupakan hasil perhitungannya.

GEE juga dapat melakukan filtering koleksi image-nya berdasarkan lokasi


dan waktu tertentu. Hal ini bermanfaat untuk melakukan pengecekan
ketersediaan dan pencarian citra tanpa harus mengunduhnya terlebih
dahulu. Yang keempat, GEE juga mampu melakukan komposit, masking, dan
pembuatan mosaik yang berguna untuk berbagai keperluan analisis
Penginderaan Jauh.
Daftar Pustaka

https://desktop.arcgis.com/en/arcmap/10.3/tools/spatial-analyst-toolbox/how-
aspect-works.htm. Diakses pada 28 September 2022.

https://wahyu-ramadhan.medium.com/belajargee2-javascript-4eb9d5636130.
Diakses pada 28 September 2022.

https://developers.google.com/earth-engine/tutorials/tutorial_api_03. Diakses
pada 28 September 2022.

Anda mungkin juga menyukai