Para guardar solo la mejor coincidencia para cada elemento de una colección, usa un ee.Join.saveBest()
. La unión saveBest()
funciona de una manera equivalente a la unión saveAll()
, excepto por cada elemento de la colección primary
, ya que guarda el elemento de la colección secondary
con la mejor coincidencia. Se descartan los elementos que no coinciden en la colección principal. Supongamos que la intención es encontrar una imagen meteorológica más cercana en el tiempo a cada imagen de Landsat en la colección primary
. Para realizar esta unión, se debe redefinir ee.Filter
para una sola condición de unión (los filtros combinados no funcionarán con saveBest()
, ya que es ambiguo cómo combinar las clasificaciones de varios subfiltros):
Editor de código (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)
Ten en cuenta que una unión saveBest()
define el nombre de la propiedad con la que se almacenará la mejor coincidencia (‘bestImage’
) y el nombre de la propiedad con la que se almacenará la calidad de la métrica de coincidencia (‘timeDiff’
). La inspección de los resultados indica que se agregó una imagen DAYMET coincidente a la propiedad bestImage
para cada escena de Landsat en la colección primary
. Cada una de estas imágenes de DAYMET tiene la propiedad timeDiff
que indica la diferencia de tiempo en milisegundos entre la imagen de DAYMET y la de Landsat, que será la mínima entre las imágenes de DAYMET que superen la condición del filtro.