Mulai Menggunakan Earth Engine

Panduan Memulai ini dimaksudkan sebagai cara cepat untuk mulai memprogram dengan Earth Engine JavaScript API. Untuk melihat pengantar JavaScript dan latihan yang lebih mendalam dengan Earth Engine API, lihat tutorialnya. Untuk gaya coding JavaScript yang direkomendasikan, lihat Panduan Gaya JavaScript Google.

Google Earth Engine memungkinkan pengguna menjalankan algoritma pada gambar dan vektor georeferensi yang disimpan di infrastruktur Google. Google Earth Engine API menyediakan library fungsi yang dapat diterapkan ke data untuk ditampilkan dan dianalisis. Katalog data publik Earth Engine berisi sejumlah besar set data vektor dan citra yang tersedia untuk umum. Aset pribadi juga dapat dibuat di folder pribadi pengguna.

Cara menggunakan dokumen ini

Dokumentasi Earth Engine dirancang untuk orang yang memahami analisis data geospasial. Dokumen ini terutama disusun berdasarkan jenis data. Misalnya, navigasi sebelah kiri berisi link ke bagian atau halaman tentang jenis data penting seperti Image, ImageCollection, Feature, FeatureCollection, Geometry, Reducer, Chart, Join, dan Array. Panduan ini hanya menjelaskan jenis ini secukupnya untuk memulai. Ada juga bagian untuk machine learning, algoritma khusus atau khusus sensor (misalnya algoritma Landsat), aplikasi yang ditampilkan kepada publik, pengelolaan data (aset), dan detail penting tentang cara kerja internal Earth Engine. Sebelum mempelajari lebih lanjut, mulailah dari sini.

Editor Kode

Editor Kode adalah lingkungan interaktif untuk mengembangkan aplikasi Earth Engine (Gambar 1). Panel tengah menyediakan editor kode JavaScript. Di atas editor terdapat tombol untuk menyimpan skrip saat ini, menjalankannya, dan menghapus peta. Tombol Dapatkan Link akan membuat URL unik untuk skrip di kolom URL. Peta di panel bawah berisi lapisan yang ditambahkan oleh skrip. Di bagian atas terdapat kotak penelusuran untuk set data dan tempat. Panel kiri berisi contoh kode, skrip tersimpan, referensi API yang dapat ditelusuri, dan pengelola aset untuk data pribadi. Panel kanan memiliki inspector untuk membuat kueri peta, konsol output, dan pengelola untuk tugas yang berjalan lama. Tombol bantuan di kanan atas berisi link ke Panduan ini dan referensi lainnya untuk mendapatkan bantuan. Pelajari lebih lanjut dari panduan Editor Kode dan panduan Mendapatkan Bantuan.

Editor Kode
Gambar 1. Editor Kode Earth Engine di code.earthengine.google.com

Membuka dan menjalankan kode di Code Editor

Langkah-langkah di bawah menunjukkan cara membuka Earth Engine dan menjalankan skrip kustom yang menampilkan gambar. Untuk mendapatkan hasil terbaik, sebaiknya instal Chrome versi terbaru, browser web Google, yang tersedia di sini.

  1. Buka Editor Kode Earth Engine di sini: code.earthengine.google.com.
  2. Buka tab Skrip yang terletak di paling kiri Editor Kode. Di sana, Anda akan menemukan kumpulan contoh skrip yang mengakses, menampilkan, dan menganalisis data Earth Engine.
  3. Di bagian “Koleksi Gambar”, pilih contoh “Gabungan yang Difilter”. Anda akan melihat skrip muncul di konsol tengah. Tekan tombol Run untuk menjalankan skrip. Contoh Gabungan yang Difilter memilih gambar Landsat 7 yang bersimpangan atau berada dalam batas Colorado dan Utah. Kemudian, fitur ini akan menampilkan komposit warna sebenarnya dari gambar yang dipilih. Contoh ini memperkenalkan metode yang umum digunakan, seperti filter(), clip(), dan Map.addLayer().

Struktur data Earth Engine

Dua struktur data geografis yang paling mendasar di Earth Engine adalah Image dan Feature yang masing-masing sesuai dengan jenis data raster dan vektor. Gambar terdiri dari band dan kamus properti. Fitur terdiri dari Geometry dan kamus properti. Stack gambar (misalnya, deret waktu gambar) ditangani oleh ImageCollection. Kumpulan fitur ditangani oleh FeatureCollection. Struktur data fundamental lainnya di Earth Engine mencakup Dictionary, List, Array, Date, Number, dan String (pelajari lebih lanjut jenis data dasar dari tutorial ini. Perlu diingat bahwa semua ini adalah objek sisi server dan tidak dimanipulasi dengan cara yang sama seperti objek JavaScript sisi klien (pelajari lebih lanjut).

Algoritma Earth Engine

Ada beberapa cara untuk menjalankan operasi di API:

  • Memanggil metode yang dilampirkan ke objek.
  • Memanggil algoritma.
  • Memanggil fungsi khusus Editor Kode.
  • Menentukan fungsi baru.

Tab Dokumen di Code Editor mencantumkan metode dari setiap class API. Misalnya, class Image memiliki metode add():

var image3 = image1.add(image2);

Metode ini menambahkan band image2 ke band image1. Kategori ee.Algorithms berisi daftar algoritma yang saat ini didukung untuk pemrosesan khusus atau khusus domain. Misalnya, untuk membuat lapisan topografi dari input Digital Elevation Model (DEM):

var terrainImage = ee.Algorithms.Terrain(dem);

Fungsi khusus Editor Kode mencakup metode Map dan Export, yang mengontrol cara lapisan ditambahkan ke panel peta atau diekspor ke Google Drive. Fungsi juga dapat dibuat di JavaScript menggunakan

var myFunction = function(args) {
  // do something
  return something;
};

Seperti yang diilustrasikan di bagian Pemetaan, fungsi yang ditentukan pengguna berguna untuk membuat fungsi kustom atau mengubah elemen koleksi menggunakan:

var collection2 = collection1.map(aFunction);

Bagian berikut mengilustrasikan konsep ini untuk berbagai kasus penggunaan sederhana.

'Hello world!' JavaScript

Mencetak informasi ke konsol adalah tugas dasar untuk mendapatkan informasi tentang objek, menampilkan hasil numerik komputasi, menampilkan metadata objek, atau membantu proses debug. Contoh 'Hello World!' yang ikonik di Editor Kode adalah:

print('Hello world!');

Salin baris ini ke editor kode Editor Kode, lalu klik Run. Perhatikan bahwa output ditampilkan di tab Console, di sebelah kanan Code Editor. Untuk contoh yang lebih relevan dengan penginderaan jauh, kode berikut akan mencetak metadata gambar Landsat 8:

print(ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'));

Periksa output di konsol dengan cermat untuk melihat metadata yang tersedia untuk gambar Landsat.

Menambahkan data ke peta

Selain mencetak informasi ke konsol, menambahkan data ke Map adalah cara untuk memvisualisasikan data geografis. Gunakan Map.addLayer() untuk melakukannya. Dalam contoh berikut, Image dibuat instance-nya (cara menemukan gambar ini akan dibahas nanti) menggunakan ee.Image(), ditambahkan ke peta dengan Map.addLayer(), dan peta dipusatkan di atas gambar:

// Load an image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');

// Center the map on the image.
Map.centerObject(image, 9);

// Display the image.
Map.addLayer(image);

Parameter kedua Map.centerObject() adalah tingkat zoom, dengan angka yang lebih tinggi menunjukkan skala yang lebih besar (lebih diperbesar). Parameter untuk fungsi Map dijelaskan secara mendalam dalam referensi API yang dapat diakses dari tab Dokumen. Jika tampilan gambar tidak memuaskan, konfigurasikan parameter tampilan dengan argumen tambahan ke Map.addLayer(). Contoh:

// Load the image from the archive.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');

// Define visualization parameters in an object literal.
var vizParams = {bands: ['B5', 'B4', 'B3'], min: 0.02, max: 0.4, gamma: 1.3};

// Center the map on the image and display.
Map.centerObject(image, 9);
Map.addLayer(image, vizParams, 'Landsat 8 false color');

Perhatikan bahwa parameter visualisasi ditentukan oleh literal objek, yang mencakup daftar band yang akan ditampilkan, nilai refleksi minimum dan maksimum, serta nilai gamma. (Pelajari lebih lanjut band Landsat di sini. Pelajari visualisasi gambar lebih lanjut di sini).

Gunakan Map.addLayer() untuk menambahkan fitur dan koleksi fitur ke peta. Misalnya,

var counties = ee.FeatureCollection('TIGER/2018/Counties');
Map.addLayer(counties, {}, 'counties');

Menemukan gambar, koleksi gambar, dan koleksi fitur

Gambar, koleksi gambar, dan koleksi fitur dapat ditemukan dengan menelusuri Earth Engine Data Catalog. Misalnya, memasukkan 'Landsat 8' ke kolom penelusuran akan menghasilkan daftar set data raster. (Daftar lengkap set data Earth Engine ada di Earth Engine Data Catalog). Klik nama set data untuk mendapatkan deskripsi singkat, informasi tentang ketersediaan temporal, penyedia data, dan ID koleksi. Klik tombol Import untuk membuat bagian Imports secara otomatis di bagian atas skrip dengan variabel untuk koleksi ini.

Atau, salin ID koleksi dan tempelkan ke kode Anda. Misalnya, pilih hasil TOA Tingkat 1 dari penelusuran 'Landsat 8' dan salin ID-nya sebagai berikut:

var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

Karena ini adalah kumpulan banyak gambar yang mencakup permukaan daratan Bumi, menemukan gambar individual dalam koleksi memerlukan pemfilteran untuk mempersempit penelusuran. Atau, kumpulan gambar dapat dikurangi menjadi satu gambar menggunakan teknik komposisi dan mosaik. Selengkapnya tentang pemfilteran dan komposisi (lihat Mengurangi) di bagian berikutnya.

Koleksi fitur juga tersedia melalui Katalog Data. Representasinya lebih kecil dari koleksi gambar, tetapi Anda akan menemukan batas wilayah internasional, sensus, cekungan air, dan kawasan lindung, untuk beberapa nama. Pelajari lebih lanjut cara mengimpor set data vektor Anda sendiri di sini.

Pemfilteran dan Pengurutan

Sering kali Anda perlu memfilter koleksi menurut ruang dan/atau waktu untuk membatasi jumlah hasil. Misalnya, pertimbangkan tugas pengurutan koleksi scene Landsat 8 untuk menemukan scene bebas awan di San Francisco. Pertama, Anda perlu menentukan area minat. Titik sering kali berguna untuk itu. Aktifkan tab Inspector di sisi kanan Editor Kode, lalu klik di dekat pusat area minat Anda, salin koordinat dari tab Inspector, lalu buat Point menggunakan:

var point = ee.Geometry.Point(-122.262, 37.8719);

Buat tanggal mulai dan akhir:

var start = ee.Date('2014-06-01');
var finish = ee.Date('2014-10-01');

Filter koleksi Landsat 8 menggunakan titik dan tanggal, lalu urutkan menggunakan properti metadata (ditemukan selama pemeriksaan metadata scene Landsat 8):

var filteredCollection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterBounds(point)
  .filterDate(start, finish)
  .sort('CLOUD_COVER', true);

Koleksi ini dapat dicetak dan diperiksa dengan aman. (Jika koleksi memiliki terlalu banyak gambar, pencetakan akan sangat lambat, waktu tunggu habis, atau menampilkan error). Perhatikan bahwa gambar dalam koleksi adalah List yang disimpan di properti 'features' dari ImageCollection. ID gambar apa pun dalam koleksi dapat disalin ke konstruktor Image seperti di atas. Atau, dapatkan gambar pertama (penutupan awan terendah):

var first = filteredCollection.first();

Akses fungsi pemfilteran Earth Engine lengkap menggunakan filter() dengan ee.Filter sebagai argumen. (Metode filterBounds() dan filterDate() yang digunakan di atas adalah pintasan). Misalnya, kode berikut membuat Filter, menggunakannya untuk memfilter FeatureCollection, dan menampilkan hasilnya:

// Load a feature collection.
var featureCollection = ee.FeatureCollection('TIGER/2016/States');

// Filter the collection.
var filteredFC = featureCollection.filter(ee.Filter.eq('NAME', 'California'));

// Display the collection.
Map.setCenter(-119.604, 37.798, 6);
Map.addLayer(filteredFC, {}, 'California');

Matematika band

Lakukan operasi matematika pada gambar menggunakan metode Image. Hal ini dapat mencakup rekombinasi band (indeks spektral), perbedaan gambar, atau operasi matematika seperti perkalian dengan konstanta. Misalnya, hitung perbedaan antara gambar Normalized Difference Vegetation Index (NDVI) yang berbeda 20 tahun:

// This function gets NDVI from Landsat 5 imagery.
var getNDVI = function(image) {
  return image.normalizedDifference(['B4', 'B3']);
};

// Load two Landsat 5 images, 20 years apart.
var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604');
var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611');

// Compute NDVI from the scenes.
var ndvi1 = getNDVI(image1);
var ndvi2 = getNDVI(image2);

// Compute the difference in NDVI.
var ndviDifference = ndvi2.subtract(ndvi1);

Perhatikan penggunaan function yang ditentukan pengguna dalam contoh ini. Pelajari lebih lanjut fungsi di bagian berikutnya.

Pemetaan (apa yang harus dilakukan, bukan loop for)

Gunakan map() untuk melakukan iterasi pada item dalam koleksi. (Loop For BUKAN cara yang tepat untuk melakukannya di Earth Engine dan harus dihindari). Fungsi map() dapat diterapkan ke ImageCollection, FeatureCollection, atau List dan menerima function sebagai argumennya. Argumen fungsi adalah elemen koleksi tempat fungsi dipetakan. Hal ini berguna untuk mengubah setiap elemen koleksi dengan cara yang sama, misalnya menambahkan. Misalnya, kode berikut menambahkan band NDVI ke setiap gambar dalam ImageCollection:

// This function gets NDVI from Landsat 8 imagery.
var addNDVI = function(image) {
  return image.addBands(image.normalizedDifference(['B5', 'B4']));
};

// Load the Landsat 8 TOA data, filter by location and date.
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterBounds(ee.Geometry.Point(-122.262, 37.8719))
  .filterDate('2014-06-01', '2014-10-01');

// Map the function over the collection.
var ndviCollection = collection.map(addNDVI);

Tugas umum lainnya adalah menambahkan properti baru (atau 'atribut' atau 'kolom') ke fitur dalam FeatureCollection. Dalam contoh berikut, properti baru adalah komputasi yang melibatkan dua atribut yang ada:

// This function creates a new property that is the sum of two existing properties.
var addField = function(feature) {
  var sum = ee.Number(feature.get('property1')).add(feature.get('property2'));
  return feature.set({'sum': sum});
};

// Create a FeatureCollection from a list of Features.
var features = ee.FeatureCollection([
  ee.Feature(ee.Geometry.Point(-122.4536, 37.7403),
    {property1: 100, property2: 100}),
    ee.Feature(ee.Geometry.Point(-118.2294, 34.039),
    {property1: 200, property2: 300}),
]);

// Map the function over the collection.
var featureCollection = features.map(addField);

// Print a selected property of one Feature.
print(featureCollection.first().get('sum'));

// Print the entire FeatureCollection.
print(featureCollection);

Perhatikan transmisi ke ee.Number yang diperlukan agar nilai properti dikenali sebagai angka untuk menggunakan metode add()). Jenis koleksi dapat diubah oleh map(). Contoh:

// This function returns the image centroid as a new Feature.
var getGeom = function(image) {
  return ee.Feature(image.geometry().centroid(), {foo: 1});
};

// Load a Landsat 8 TOA collection.
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterBounds(ee.Geometry.Point(-122.262, 37.8719))
  .filterDate('2014-06-01', '2014-10-01');

// Map the function over the ImageCollection.
var featureCollection = ee.FeatureCollection(collection.map(getGeom));

// Print the collection.
print(featureCollection);

Perhatikan properti yang ditambahkan (foo) untuk setiap fitur yang dibuat dari sentroid gambar. Pada baris terakhir, transmisi membuat koleksi yang dihasilkan dapat dikenali sebagai FeatureCollection.

Mengurangi

Pengurangan adalah cara untuk menggabungkan data dari waktu, ruang, band, array, dan struktur data lainnya di Earth Engine. Ada berbagai metode untuk tujuan ini di API. Misalnya, untuk membuat gabungan ImageCollection, gunakan reduce() untuk mengurangi gambar dalam koleksi menjadi satu Gambar. Contoh sederhananya adalah membuat komposit median dari lima scene yang paling sedikit berawan dalam koleksi Landsat 8 yang ditentukan sebelumnya:

// Load a Landsat 8 TOA collection.
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  // Filter by date and location.
  .filterBounds(ee.Geometry.Point(-122.262, 37.8719))
  .filterDate('2014-01-01', '2014-12-31')
  // Sort by increasing cloudiness.
  .sort('CLOUD_COVER');

// Compute the median of each pixel for each band of the 5 least cloudy scenes.
var median = collection.limit(5).reduce(ee.Reducer.median());

Pengurangan juga merupakan cara untuk mendapatkan statistik gambar di wilayah yang ditentukan oleh Feature atau FeatureCollection. Misalkan tugasnya adalah menghitung nilai piksel rata-rata dalam area minat. Gunakan reduceRegion() untuk tujuan ini. Contoh:

// Load and display a Landsat TOA image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');
Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.3});

// Create an arbitrary rectangle as a region and display it.
var region = ee.Geometry.Rectangle(-122.2806, 37.1209, -122.0554, 37.2413);
Map.addLayer(region);

// Get a dictionary of means in the region.  Keys are bandnames.
var mean = image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region,
  scale: 30
});

Pelajari pengurangan lebih lanjut dari dokumen Pengurangan.

Penyamaran

Setiap piksel dalam ee.Image memiliki nilai dan mask yang berkisar dari 0 (tidak ada data) hingga 1. Piksel yang disamarkan (dengan mask==0) diperlakukan sebagai tidak ada data. Piksel dengan 0 < mask ≤ 1 memiliki nilai, tetapi bobotnya ditentukan oleh mask untuk komputasi numerik.

Anda dapat membuat piksel transparan atau mengecualikannya dari analisis menggunakan mask. Piksel disamarkan jika nilai mask adalah nol. Melanjutkan contoh perbedaan gambar, gunakan mask untuk menampilkan area NDVI yang meningkat dan menurun selama interval perbedaan:

// This function gets NDVI from Landsat 5 imagery.
var getNDVI = function(image) {
  return image.normalizedDifference(['B4', 'B3']);
};

// Load two Landsat 5 images, 20 years apart.
var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604');
var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611');

// Compute NDVI from the scenes.
var ndvi1 = getNDVI(image1);
var ndvi2 = getNDVI(image2);

// Compute the difference in NDVI.
var ndviDifference = ndvi2.subtract(ndvi1);
// Load the land mask from the SRTM DEM.
var landMask = ee.Image('CGIAR/SRTM90_V4').mask();

// Update the NDVI difference mask with the land mask.
var maskedDifference = ndviDifference.updateMask(landMask);

// Display the masked result.
var vizParams = {min: -0.5, max: 0.5, palette: ['FF0000', 'FFFFFF', '0000FF']};
Map.setCenter(-122.2531, 37.6295, 9);
Map.addLayer(maskedDifference, vizParams, 'NDVI difference');

Dalam contoh ini, perhatikan bahwa mask perbedaan NDVI diperbarui oleh mask lahan dengan updateMask(). Tindakan ini menetapkan mask piksel perbedaan NDVI ke mask lahan di mana pun mask perbedaan NDVI bukan nol.

Penyamaran juga berguna untuk mengecualikan data dari analisis. Pertimbangkan contoh reduceRegion() dari bagian Pengurangan. Misalkan tugasnya adalah menghitung NDVI rata-rata musiman untuk county Santa Clara, CA, tidak termasuk piksel berawan. Contoh berikut menunjukkan beberapa konsep: pemfilteran, pemetaan, pengurangan, dan penggunaan mask cloud:

// This function gets NDVI from a Landsat 8 image.
var addNDVI = function(image) {
  return image.addBands(image.normalizedDifference(['B5', 'B4']));
};

// This function masks cloudy pixels.
var cloudMask = function(image) {
  var clouds = ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']);
  return image.updateMask(clouds.lt(10));
};

// Load a Landsat collection, map the NDVI and cloud masking functions over it.
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterBounds(ee.Geometry.Point([-122.262, 37.8719]))
  .filterDate('2014-03-01', '2014-05-31')
  .map(addNDVI)
  .map(cloudMask);

// Reduce the collection to the mean of each pixel and display.
var meanImage = collection.reduce(ee.Reducer.mean());
var vizParams = {bands: ['B5_mean', 'B4_mean', 'B3_mean'], min: 0.02, max: 0.4};
Map.addLayer(meanImage, vizParams, 'mean');

// Load a region in which to compute the mean and display it.
var counties = ee.FeatureCollection('TIGER/2018/Counties');
var santaClara = ee.Feature(counties.filter(ee.Filter.eq('NAME', 'Santa Clara')).first());
Map.addLayer(santaClara);

// Get the mean of NDVI in the region.
var mean = meanImage.select(['nd_mean']).reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: santaClara.geometry(),
  scale: 30
});

// Print mean NDVI for the region.
mean.get('nd_mean').evaluate(function(val){
  print('Santa Clara spring mean NDVI:', val);
});