Save-Best Joins

برای ذخیره بهترین تطابق برای هر عنصر در یک مجموعه، از ee.Join.saveBest() استفاده کنید. تابع join saveBest() به روشی معادل join saveAll() عمل می کند، به جز هر عنصر در مجموعه primary ، عنصر را از مجموعه secondary با بهترین تطابق ذخیره می کند. عناصر بی‌همتا در مجموعه اولیه حذف می‌شوند. فرض کنید هدف یافتن تصویر هواشناسی از نظر زمانی نزدیک به هر تصویر Landsat در مجموعه primary است. برای انجام این اتصال، ee.Filter باید برای یک شرط اتصال مجدد تعریف شود (فیلترهای ترکیبی با saveBest() کار نمی‌کنند زیرا نحوه ترکیب رتبه‌ها از چندین فیلتر فرعی مبهم است:

ویرایشگر کد (جاوا اسکریپت)

// 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);

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

برای اطلاعات در مورد 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: 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)

توجه داشته باشید که یک join saveBest() نام خاصیتی را که بهترین تطابق را با آن ذخیره می کند ( 'bestImage' ) و نام خاصیتی را که با آن خوبی متریک مطابقت را ذخیره می کند ( 'timeDiff' ) تعریف می کند. بررسی نتایج نشان می‌دهد که یک تصویر DAYMET منطبق به ویژگی bestImage برای هر صحنه Landsat در مجموعه primary اضافه شده است. هر یک از این تصاویر DAYMET دارای ویژگی timeDiff هستند که نشان دهنده اختلاف زمانی بر حسب میلی ثانیه بین تصویر DAYMET و تصویر Landsat است که در بین تصاویر DAYMET که شرایط را در فیلتر عبور می دهند حداقل خواهد بود.