Save-All Joins

ذخیره اتصالات یکی از راه های نمایش روابط یک به چند در 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);

راه اندازی پایتون

برای اطلاعات در مورد API پایتون و استفاده از geemap برای توسعه تعاملی به صفحه محیط پایتون مراجعه کنید.

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 منطبق را ذخیره می‌کند.