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