Join salva-migliori

Per salvare solo la migliore corrispondenza per ogni elemento di una raccolta, utilizza un ee.Join.saveBest(). L'unione saveBest() funziona in modo equivalente all'unione saveAll(), tranne per il fatto che per ogni elemento della raccolta primary salva l'elemento della raccolta secondary con la corrispondenza migliore. Gli elementi non corrispondenti nella raccolta principale vengono eliminati. Supponiamo che l'intenzione sia trovare un'immagine meteorologica più vicina nel tempo a ogni immagine Landsat della raccolta primary. Per eseguire questa unione, il valore ee.Filter deve essere ridefinito per una singola condizione di unione (i filtri combinati non funzioneranno con saveBest() poiché non è chiaro come combinare i ranking di più sottofiltri):

Editor di codice (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);

Configurazione di Python

Per informazioni sull'API Python e sull'utilizzo di geemap per lo sviluppo interattivo, consulta la pagina Ambiente Python.

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)

Tieni presente che un'unione saveBest() definisce il nome della proprietà con cui memorizzare la corrispondenza migliore (‘bestImage’) e il nome della proprietà con cui memorizzare la bontà della metrica di corrispondenza (‘timeDiff’). L'esame dei risultati indica che un'immagine DAYMET corrispondente è stata aggiunta alla proprietà bestImage per ogni scena Landsat nella raccolta primary. Ciascuna di queste immagini DAYMET ha la proprietà timeDiff che indica la differenza di tempo in millisecondi tra l'immagine DAYMET e l'immagine Landsat, che sarà minima tra le immagini DAYMET che soddisfano la condizione nel filtro.