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);
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.