Save-Best Joins

لحفظ أفضل مطابقة فقط لكل عنصر في مجموعة، استخدِم ee.Join.saveBest(). تعمل دالة الربط saveBest() بطريقة مماثلة لدالة الربط saveAll()، باستثناء كل عنصر في مجموعة primary، حيث تحفظ العنصر من مجموعةsecondary الذي يمثّل أفضل مطابقة. يتم طرح العناصر غير المطابقة في المجموعة الأساسية. لنفترض أنّ الهدف هو العثور على صورة مناخية أقرب زمنيًا إلى كل صورة Landsat في مجموعة primary. لإجراء هذا الدمج، يجب إعادة تعريف ee.Filter ليكون شرطًا واحدًا للدمج (لن تعمل الفلاتر المدمجة مع saveBest() لأنّه من غير الواضح كيفية دمج الترتيبات من فلاتر فرعية متعددة):

محرِّر الرموز البرمجية (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: GRIDMET meteorological data
var gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET');

// Define a max difference filter to compare timestamps.
var maxDiffFilter = ee.Filter.maxDifference({
  difference: 2 * 24 * 60 * 60 * 1000,
  leftField: 'system:time_start',
  rightField: 'system:time_start'
});

// Define the join.
var saveBestJoin = ee.Join.saveBest({
  matchKey: 'bestImage',
  measureKey: 'timeDiff'
});

// Apply the join.
var landsatMet = saveBestJoin.apply(primary, gridmet, maxDiffFilter);

// Print the result.
print(landsatMet);

إعداد لغة Python

اطّلِع على صفحة بيئة Python للحصول على معلومات عن واجهة برمجة التطبيقات Python API واستخدام IDE geemap لتطوير التطبيقات التفاعلي.

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: GRIDMET meteorological data
gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET')

# Define a max difference filter to compare timestamps.
max_diff_filter = ee.Filter.maxDifference(
    difference=2 * 24 * 60 * 60 * 1000,
    leftField='system:time_start',
    rightField='system:time_start',
)

# Define the join.
save_best_join = ee.Join.saveBest(matchKey='bestImage', measureKey='timeDiff')

# Apply the join.
landsat_met = save_best_join.apply(primary, gridmet, max_diff_filter)

# Print the result.
display(landsat_met)

يُرجى العِلم أنّ عملية الربط saveBest() تحدِّد اسم السمة التي يتم تخزين أفضل مطابقة بها (‘bestImage’) واسم السمة التي يتم تخزين مقياس جودة المطابقة بها (‘timeDiff’). يشير فحص النتائج إلى أنّه تمت إضافة صورة DAYMET مطابقة إلى السمة bestImage لكلّ مشهد Landsat في مجموعة primary. تحتوي كل من صور DAYMET هذه على السمة timeDiff التي تشير إلى اختلاف الوقت بالمللي ثانية بين صورة DAYMET وصورة Landsat، وسيكون الحد الأدنى بين صور DAYMET التي تستوفي الشرط في الفلتر.