Menyimpan join adalah salah satu cara untuk merepresentasikan hubungan one-to-many di Earth Engine.
Tidak seperti inner join, join penyimpanan menyimpan kecocokan dari
koleksi secondary
sebagai properti bernama dari fitur dalam
koleksi primary
. Untuk menyimpan semua kecocokan tersebut, gunakan
ee.Join.saveAll()
. Jika ada hubungan satu-ke-banyak, join saveAll()
akan menyimpan semua fitur yang cocok sebagai ee.List
. Elemen yang tidak cocok dalam koleksi primary
akan
dihapus. Misalnya, Anda perlu mendapatkan semua citra MODIS yang diperoleh dalam waktu dua hari dari setiap citra Landsat dalam koleksi. Contoh ini menggunakan join saveAll()
untuk tujuan tersebut:
Editor Kode (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)
Dalam contoh ini, perhatikan bahwa koleksi MODIS secondary
difilter terlebih dahulu agar
secara kronologis mirip dengan koleksi Landsat primary
untuk efisiensi. Untuk
membandingkan waktu akuisisi Landsat dengan waktu gabungan MODIS, yang memiliki rentang harian,
filter membandingkan endpoint stempel waktu gambar. Penggabungan ditentukan dengan nama properti yang digunakan untuk menyimpan daftar kecocokan untuk setiap gambar Landsat (‘terra’
) dan parameter opsional untuk mengurutkan daftar kecocokan menurut properti system:time_start
Pemeriksaan hasil menunjukkan bahwa gambar dalam koleksi utama memiliki properti terra
tambahan yang menyimpan daftar gambar MODIS yang cocok.