Koleksiyondaki her öğe için yalnızca en iyi eşleşmeyi kaydetmek isterseniz ee.Join.saveBest()
kullanın. saveBest()
birleştirme işlevi, saveAll()
birleştirme işlevine eşdeğer bir şekilde çalışır. Bununla birlikte, primary
koleksiyonundaki her öğe için en iyi eşleşmeye sahip secondary
koleksiyonundaki öğeyi kaydeder. Birincil koleksiyondaki eşleşmeyen öğeler atlanır. Amaç, primary
koleksiyonundaki her Landsat görüntüsüne en yakın zamanlı bir meteorolojik görüntü bulmak olsun. Bu birleştirme işlemini gerçekleştirmek için ee.Filter
, tek bir birleştirme koşulu için yeniden tanımlanmalıdır (birden fazla alt filtredeki sıralamaların nasıl birleştirileceği belirsiz olduğundan birleşik filtreler saveBest()
ile çalışmaz):
Kod Düzenleyici (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);
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()
birleştirme işleminin, en iyi eşleşmeyi (‘bestImage’
) ve eşleşme metriğinin iyiliğini (‘timeDiff’
) depolamak için kullanılacak mülkün adını tanımladığını unutmayın. Sonuçların incelenmesi, primary
koleksiyonundaki her Landsat sahnesi için bestImage
mülküne eşleşen bir DAYMET resminin eklendiğini gösterir. Bu DAYMET resimlerinin her biri, DAYMET resmi ile Landsat resmi arasındaki milisaniye cinsinden zaman farkını belirten timeDiff
özelliğine sahiptir. Bu özellik, filtredeki koşulu karşılayan DAYMET resimleri arasında minimum değere sahiptir.