Salvar todas as junções

As junções de salvamento são uma maneira de representar relações de um para muitos no Earth Engine. Ao contrário de uma junção interna, uma união de economias armazena correspondências da coleção secondary como uma propriedade nomeada dos recursos na coleção primary. Para salvar todas essas correspondências, use um ee.Join.saveAll(). Se houver uma relação de um para muitos, um saveAll() vai armazenar todos os recursos correspondentes como um ee.List. Os elementos não correspondentes na coleção primary são descartados. Por exemplo, suponha que seja necessário receber todas as imagens do MODIS adquiridas em até dois dias após cada imagem do Landsat em uma coleção. Este exemplo usa uma união saveAll() para essa finalidade:

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

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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: 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)

Neste exemplo, a coleção MODIS secondary é pré-filtrada para ser cronologicamente semelhante à coleção Landsat primary para fins de eficiência. Para comparar o horário de aquisição do Landsat com o horário composto do MODIS, que tem um intervalo diário, o filtro compara os pontos finais dos carimbos de data/hora da imagem. A mesclagem é definida com o nome da propriedade usada para armazenar a lista de correspondências de cada imagem Landsat (‘terra’) e o parâmetro opcional para classificar a lista de correspondências pela propriedade system:time_start.

A inspeção do resultado indica que as imagens na coleção principal têm a propriedade terra adicionada, que armazena uma lista das imagens MODIS correspondentes.