Save-Best Joins

Untuk hanya menyimpan kecocokan terbaik untuk setiap elemen dalam koleksi, gunakan ee.Join.saveBest(). Fungsi join saveBest() berfungsi dengan cara yang setara dengan join saveAll(), kecuali untuk setiap elemen dalam koleksi primary, fungsi ini menyimpan elemen dari koleksi secondary dengan kecocokan terbaik. Elemen yang tidak cocok dalam koleksi utama akan dihapus. Misalkan tujuannya adalah menemukan gambar meteorologi yang paling dekat waktunya dengan setiap gambar Landsat dalam koleksi primary. Untuk melakukan join ini, ee.Filter harus ditentukan ulang untuk satu kondisi join (filter gabungan tidak akan berfungsi dengan saveBest() karena cara menggabungkan peringkat dari beberapa sub-Filter tidak jelas):

Editor Kode (JavaScript)

// Load a primary collection: Landsat imagery.
var primary = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
    .filterDate('2014-04-01', '2014-06-01')
    .filterBounds(ee.Geometry.Point(-122.092, 37.42));

// Load a secondary collection: GRIDMET meteorological data
var gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET');

// Define a max difference filter to compare timestamps.
var maxDiffFilter = ee.Filter.maxDifference({
  difference: 2 * 24 * 60 * 60 * 1000,
  leftField: 'system:time_start',
  rightField: 'system:time_start'
});

// Define the join.
var saveBestJoin = ee.Join.saveBest({
  matchKey: 'bestImage',
  measureKey: 'timeDiff'
});

// Apply the join.
var landsatMet = saveBestJoin.apply(primary, gridmet, maxDiffFilter);

// Print the result.
print(landsatMet);

Penyiapan Python

Lihat halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

import ee
import geemap.core as geemap

Colab (Python)

# Load a primary collection: Landsat imagery.
primary = (
    ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
    .filterDate('2014-04-01', '2014-06-01')
    .filterBounds(ee.Geometry.Point(-122.092, 37.42))
)

# Load a secondary collection: GRIDMET meteorological data
gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET')

# Define a max difference filter to compare timestamps.
max_diff_filter = ee.Filter.maxDifference(
    difference=2 * 24 * 60 * 60 * 1000,
    leftField='system:time_start',
    rightField='system:time_start',
)

# Define the join.
save_best_join = ee.Join.saveBest(matchKey='bestImage', measureKey='timeDiff')

# Apply the join.
landsat_met = save_best_join.apply(primary, gridmet, max_diff_filter)

# Print the result.
display(landsat_met)

Perhatikan bahwa join saveBest() menentukan nama properti yang akan digunakan untuk menyimpan kecocokan terbaik (‘bestImage’) dan nama properti yang akan digunakan untuk menyimpan kualitas metrik kecocokan (‘timeDiff’). Pemeriksaan hasil menunjukkan bahwa gambar DAYMET yang cocok telah ditambahkan ke properti bestImage untuk setiap scene Landsat dalam koleksi primary. Setiap gambar DAYMET ini memiliki properti timeDiff yang menunjukkan perbedaan waktu dalam milidetik antara gambar DAYMET dan gambar Landsat, yang akan minimum di antara gambar DAYMET yang lulus kondisi dalam filter.