برای ذخیره بهترین تطابق برای هر عنصر در یک مجموعه، از 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);
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 که شرایط را در فیلتر عبور می دهند حداقل خواهد بود.