Zapisz wszystkie złączenia

Zapisane złączenia to jeden ze sposobów reprezentowania relacji jeden-do-wielu w Earth Engine. W przeciwieństwie do złączenia wewnętrznego złączanie oszczędzające przechowuje dopasowania z kolekcji secondary jako właściwości nazwane funkcji w kolekcji primary. Aby zapisać wszystkie takie dopasowania, użyj ee.Join.saveAll(). Jeśli istnieje relacja jeden-do-wielu, za pomocą funkcji saveAll() złącza się wszystkie pasujące atrybuty jako ee.List. Niedopasowane elementy w kolekcji primary zostaną usunięte. Załóżmy na przykład, że potrzebujesz wszystkich obrazów MODIS uzyskanych w ciągu 2 dni po każdym obrazie Landsat w kolekcji. W tym przykładzie do tego celu użyto złączenia saveAll():

Edytor kodu (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);

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

W tym przykładzie kolekcja MODIS secondary jest wstępnie przefiltrowana, aby była chronologicznie podobna do kolekcji Landsat primary. Aby porównać czas przechwycenia obrazu Landsat z czasem kompozytowym MODIS, który ma zakres dobowy, filtr porównuje punkty końcowe sygnałów czasowych obrazu. Złączenie jest zdefiniowane za pomocą nazwy usługi używanej do przechowywania listy dopasowań dla każdego obrazu Landsat (‘terra’) oraz opcjonalnego parametru służącego do sortowania listy dopasowań według właściwości system:time_start.

Sprawdzenie wyniku wskazuje, że obrazy w kolecji podstawowej mają dodaną właściwość terra, która przechowuje listę pasujących obrazów MODIS.