Unión de guardar todo

Guardar las uniones es una forma de representar relaciones de uno a varios en Earth Engine. A diferencia de una combinación interna, una combinación de ahorro almacena coincidencias de la colección secondary como una propiedad con nombre de los componentes de la colección primary. Para guardar todas esas coincidencias, usa un ee.Join.saveAll(). Si hay una relación de uno a varios, una unión saveAll() almacena todas las funciones coincidentes como una ee.List. Se descartan los elementos que no coinciden en la colección primary. Por ejemplo, supongamos que se necesita obtener todas las imágenes de MODIS adquiridas dentro de los dos días de cada imagen de Landsat en una colección. En este ejemplo, se usa una unión saveAll() para ese fin:

// 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: MODIS imagery.
var modSecondary = ee.ImageCollection('MODIS/006/MOD09GA')
    .filterDate('2014-03-01', '2014-07-01');

// Define an allowable time difference: two days in milliseconds.
var twoDaysMillis = 2 * 24 * 60 * 60 * 1000;

// Create a time filter to define a match as overlapping timestamps.
var timeFilter = ee.Filter.or(
  ee.Filter.maxDifference({
    difference: twoDaysMillis,
    leftField: 'system:time_start',
    rightField: 'system:time_end'
  }),
  ee.Filter.maxDifference({
    difference: twoDaysMillis,
    leftField: 'system:time_end',
    rightField: 'system:time_start'
  })
);

// Define the join.
var saveAllJoin = ee.Join.saveAll({
  matchesKey: 'terra',
  ordering: 'system:time_start',
  ascending: true
});

// Apply the join.
var landsatModis = saveAllJoin.apply(primary, modSecondary, timeFilter);

// Display the result.
print('Join.saveAll:', landsatModis);

Consulta la página Entorno de Python para obtener información sobre la API de Python y el uso de geemap para el desarrollo interactivo.

import ee
import geemap.core as geemap
# 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: MODIS imagery.
mod_secondary = ee.ImageCollection('MODIS/006/MOD09GA').filterDate(
    '2014-03-01', '2014-07-01'
)

# Define an allowable time difference: two days in milliseconds.
two_days_millis = 2 * 24 * 60 * 60 * 1000

# Create a time filter to define a match as overlapping timestamps.
time_filter = ee.Filter.Or(
    ee.Filter.maxDifference(
        difference=two_days_millis,
        leftField='system:time_start',
        rightField='system:time_end',
    ),
    ee.Filter.maxDifference(
        difference=two_days_millis,
        leftField='system:time_end',
        rightField='system:time_start',
    ),
)

# Define the join.
save_all_join = ee.Join.saveAll(
    matchesKey='terra', ordering='system:time_start', ascending=True
)

# Apply the join.
landsat_modis = save_all_join.apply(primary, mod_secondary, time_filter)

# Display the result.
display('Join.saveAll:', landsat_modis)

En este ejemplo, ten en cuenta que la colección de MODIS secondary está prefiltrada para ser similar a la colección de Landsat primary en términos cronológicos para mejorar la eficiencia. Para comparar el tiempo de adquisición de Landsat con el tiempo compuesto de MODIS, que tiene un rango diario, el filtro compara los extremos de las marcas de tiempo de las imágenes. La unión se define con el nombre de la propiedad que se usa para almacenar la lista de coincidencias de cada imagen de Landsat (‘terra’) y el parámetro opcional para ordenar la lista de coincidencias por la propiedad system:time_start.

La inspección del resultado indica que las imágenes de la colección principal tienen la propiedad terra agregada, que almacena una lista de las imágenes de MODIS coincidentes.