ذخیره اتصالات یکی از راه های نمایش روابط یک به چند در Earth Engine است. برخلاف اتصال داخلی ، یک پیوست ذخیره، مطابق با مجموعه secondary
را به عنوان یک ویژگی نامگذاری شده از ویژگی های مجموعه primary
ذخیره می کند. برای ذخیره همه این موارد، از ee.Join.saveAll()
استفاده کنید. اگر یک رابطه یک به چند وجود داشته باشد، یک saveAll()
join تمام ویژگی های منطبق را به عنوان ee.List
ذخیره می کند. عناصر بیهمتا در مجموعه primary
حذف میشوند. به عنوان مثال، فرض کنید که نیاز به دریافت تمام تصاویر MODIS در طی دو روز از هر تصویر Landsat در یک مجموعه وجود دارد. این مثال از یک join saveAll()
برای این منظور استفاده می کند:
ویرایشگر کد (جاوا اسکریپت)
// 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
کولب (پایتون)
# 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)
در این مثال، توجه داشته باشید که مجموعه secondary
MODIS از قبل فیلتر شده است تا از نظر زمانی مشابه مجموعه primary
Landsat برای کارایی باشد. برای مقایسه زمان اکتساب لندست با زمان ترکیبی MODIS که محدوده روزانه دارد، فیلتر نقاط پایانی مهرهای زمانی تصویر را مقایسه میکند. Join با نام خاصیت مورد استفاده برای ذخیره لیست منطبقات برای هر تصویر Landsat ( 'terra'
) و پارامتر اختیاری برای مرتب کردن لیست موارد مطابق با ویژگی system:time_start
تعریف می شود.
بررسی نتیجه نشان میدهد که تصاویر درون مجموعه اولیه دارای ویژگی terra
هستند که فهرستی از تصاویر MODIS منطبق را ذخیره میکند.