إنّ حفظ عمليات الدمج هي إحدى طرق تمثيل العلاقات بين عنصرَين أو أكثر في Earth Engine.
على عكس الربط الداخلي، يخزِّن الربط الحفظي المطابقات من مجموعة
secondary
كسمة مُسمّاة للعناصر في مجموعة
primary
. لحفظ جميع المطابقات هذه، استخدِم علامة
ee.Join.saveAll()
. في حال توفّر علاقة بين عنصرَين، يخزّن الانضمام
saveAll()
جميع السمات المطابقة كسلسلة
ee.List
. يتم طرح العناصر غير المطابقة في مجموعة primary
. على سبيل المثال، لنفترض أنّه يجب الحصول على جميع صور MODIS التي تم الحصول عليها
في غضون يومَين من كل صورة Landsat في مجموعة. يستخدم هذا المثال saveAll()
للدمج لهذا الغرض:
محرِّر الرموز البرمجية (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)
في هذا المثال، يُرجى العِلم أنّ مجموعة secondary
MODIS تمت فلترتها مسبقًا لتكون
مشابهة من الناحية الزمنية لمجموعة primary
Landsat من أجل تحسين الأداء. لمقارنة
وقت اكتساب بيانات Landsat بوقت مركبة MODIS الذي يتضمن نطاقًا يوميًا، مقارنةً
يقارن الفلتر نقاط نهاية الطوابع الزمنية للصور. يتمّ تحديد عملية الدمج باستخدام
اسم السمة المستخدَمة لتخزين قائمة المطابقات لكلّ صورة Landsat
(‘terra’
) ومعلّمة اختيارية لترتيب قائمة المطابقات حسب السمة
system:time_start
يشير فحص النتيجة إلى أنّ الصور ضمن المجموعة الأساسية تحتوي على
سمة terra
المُضافة التي تخزِّن قائمة بصور MODIS المطابقة.