Join salva tutto

Le unioni salvate sono un modo per rappresentare le relazioni one-to-many in Earth Engine. A differenza di un join interno, un join di salvataggio memorizza le corrispondenze della raccolta secondary come proprietà denominata delle funzionalità nella raccolta primary. Per salvare tutte queste corrispondenze, utilizza un ee.Join.saveAll(). Se esiste una relazione one-to-many, un join saveAll() memorizza tutte le funzionalità corrispondenti come un ee.List. Gli elementi non corrispondenti nella raccolta primary vengono eliminati. Ad esempio, supponiamo che sia necessario acquisire tutte le immagini MODIS acquisite entro due giorni da ogni immagine Landsat di una raccolta. Questo esempio utilizza un join saveAll() a questo scopo:

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

Configurazione di Python

Per informazioni sull'API Python e sull'utilizzo di geemap per lo sviluppo interattivo, consulta la pagina Ambiente Python.

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)

In questo esempio, tieni presente che la raccolta secondary MODIS è prefiltrata in modo da essere simile dal punto di vista cronologico alla raccolta primary Landsat per motivi di efficienza. Per confrontare l'ora di acquisizione di Landsat con l'ora composita di MODIS, che ha un intervallo giornaliero, il filtro confronta i punti di terminazione dei timestamp delle immagini. L'unione è definita con il nome della proprietà utilizzata per memorizzare l'elenco delle corrispondenze per ogni immagine Landsat (‘terra’) e il parametro facoltativo per ordinare l'elenco delle corrispondenze in base alla proprietà system:time_start

L'ispezione del risultato indica che alle immagini all'interno della raccolta principale è stata aggiunta la proprietà terra che memorizza un elenco delle immagini MODIS corrispondenti.