Tüm birleştirme işlemlerini kaydetme

Birleştirmeleri kaydetme, Earth Engine'da bire çok ilişkileri temsil etmenin bir yoludur. İç birleştirme'den farklı olarak, kayıt birleştirme, secondary koleksiyonundaki eşleşmeleri primary koleksiyonundaki özelliklerin adlandırılmış bir özelliği olarak depolar. Bu tür eşleşmelerin tümünü kaydetmek için ee.Join.saveAll() kullanın. Bire çok ilişki varsa saveAll() birleştirme işlemi, eşleşen tüm özellikleri ee.List olarak depolar. primary koleksiyonundaki eşleşmeyen öğeler atlanır. Örneğin, bir koleksiyondaki her Landsat görüntüsünden sonraki iki gün içinde elde edilen tüm MODIS görüntülerinin alınması gerektiğini varsayalım. Bu örnekte, bu amaç için bir saveAll() birleştirme kullanılmaktadır:

Kod Düzenleyici (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);

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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)

Bu örnekte, secondary MODIS koleksiyonunun verimlilik için primary Landsat koleksiyonuna zamansal olarak benzer olacak şekilde önceden filtrelendiğini unutmayın. Filtre, Landsat edinme zamanını günlük aralığı olan MODIS birleşik zamanıyla karşılaştırmak için resim zaman damgalarının uç noktalarını karşılaştırır. Birleştirme, her Landsat görüntüsünün eşleşme listesini depolamak için kullanılan mülkün adıyla (‘terra’) ve eşleşme listesini system:time_start mülküne göre sıralamak için isteğe bağlı parametreyle tanımlanır.

Sonuç incelendiğinde, birincil koleksiyondaki resimlerde eşleşen MODIS resimlerinin listesini depolayan terra mülkünün eklenmiş olduğu görülüyor.