Jointures "Tout enregistrer"

L'enregistrement de jointures est une façon de représenter des relations de type un à plusieurs dans Earth Engine. Contrairement à une jointure interne, une jointure d'enregistrement stocke les correspondances de la collection secondary en tant que propriété nommée des éléments géographiques de la collection primary. Pour enregistrer toutes ces correspondances, utilisez un ee.Join.saveAll(). En cas de relation de type un à plusieurs, une jointure saveAll() stocke toutes les entités correspondantes en tant que ee.List. Les éléments non mis en correspondance dans la collection primary sont supprimés. Par exemple, supposons que vous deviez obtenir toutes les images MODIS acquises dans les deux jours suivant chaque image Landsat d'une collection. Cet exemple utilise une jointure saveAll() à cette fin:

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

Configuration de Python

Consultez la page Environnement Python pour en savoir plus sur l'API Python et l'utilisation de geemap pour le développement interactif.

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)

Dans cet exemple, notez que la collection MODIS secondary est préfiltrée pour être chronologiquement semblable à la collection Landsat primary à des fins d'efficacité. Pour comparer l'heure d'acquisition Landsat à l'heure composite MODIS, qui a une plage quotidienne, le filtre compare les points de terminaison des codes temporels des images. La jointure est définie avec le nom de la propriété utilisée pour stocker la liste des correspondances pour chaque image Landsat (‘terra’) et un paramètre facultatif pour trier la liste des correspondances par propriété system:time_start.

L'inspection du résultat indique que les images de la collection principale ont la propriété terra ajoutée, qui stocke une liste des images MODIS correspondantes.