Pour enregistrer uniquement la meilleure correspondance pour chaque élément d'une collection, utilisez un ee.Join.saveBest()
. La jointure saveBest()
fonctionne de manière équivalente à la jointure saveAll()
, sauf que pour chaque élément de la collection primary
, elle enregistre l'élément de la collection secondary
correspondant le mieux. Les éléments non mis en correspondance dans la collection principale sont supprimés. Supposons que l'objectif soit de trouver une image météorologique la plus proche possible de chaque image Landsat de la collection primary
. Pour effectuer cette jointure, ee.Filter
doit être redéfini pour une seule condition de jointure (les filtres combinés ne fonctionneront pas avec saveBest()
, car la façon de combiner les classements de plusieurs sous-filtres est ambiguë):
Éditeur de code (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)
Notez qu'une jointure saveBest()
définit le nom de la propriété avec laquelle stocker la meilleure correspondance (‘bestImage’
) et le nom de la propriété avec laquelle stocker la qualité de la métrique de correspondance (‘timeDiff’
). L'inspection des résultats indique qu'une image DAYMET correspondante a été ajoutée à la propriété bestImage
pour chaque scène Landsat de la collection primary
. Chacune de ces images DAYMET possède la propriété timeDiff
, qui indique la différence de temps en millisecondes entre l'image DAYMET et l'image Landsat, qui sera la plus faible parmi les images DAYMET répondant à la condition du filtre.