সেভ-অল জয়েন

আর্থ ইঞ্জিনে এক-থেকে-অনেক সম্পর্কের প্রতিনিধিত্ব করার একটি উপায় হল যোগদান সংরক্ষণ করা। একটি অভ্যন্তরীণ যোগদানের বিপরীতে, একটি সঞ্চয় যোগদান primary সংগ্রহের বৈশিষ্ট্যগুলির একটি নামযুক্ত সম্পত্তি হিসাবে secondary সংগ্রহ থেকে মেলে। এই ধরনের সমস্ত মিল সংরক্ষণ করতে, একটি ee.Join.saveAll() ব্যবহার করুন। যদি একটি থেকে একাধিক সম্পর্ক থাকে, একটি saveAll() যোগদান একটি ee.List হিসাবে সমস্ত মিলিত বৈশিষ্ট্য সংরক্ষণ করে। primary সংগ্রহে অতুলনীয় উপাদানগুলি বাদ দেওয়া হয়েছে। উদাহরণস্বরূপ, ধরুন একটি সংগ্রহে প্রতিটি ল্যান্ডস্যাট চিত্রের দুই দিনের মধ্যে সমস্ত MODIS চিত্র অর্জিত করার প্রয়োজন রয়েছে৷ এই উদাহরণটি সেই উদ্দেশ্যে একটি 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);

পাইথন সেটআপ

পাইথন এপিআই এবং ইন্টারেক্টিভ ডেভেলপমেন্টের জন্য geemap ব্যবহার করার জন্য পাইথন এনভায়রনমেন্ট পৃষ্ঠাটি দেখুন।

import ee
import geemap.core as geemap

Colab (পাইথন)

# 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 ল্যান্ডস্যাট সংগ্রহের সাথে কালানুক্রমিকভাবে অনুরূপ হওয়ার জন্য প্রি-ফিল্টার করা হয়েছে। ল্যান্ডস্যাট অধিগ্রহণের সময়কে MODIS যৌগিক সময়ের সাথে তুলনা করতে, যার একটি দৈনিক পরিসীমা রয়েছে, ফিল্টারটি চিত্রের টাইমস্ট্যাম্পের শেষ বিন্দুর সাথে তুলনা করে। প্রতিটি Landsat ইমেজ ( 'terra' ) এর জন্য ম্যাচের তালিকা সংরক্ষণ করতে ব্যবহৃত সম্পত্তির নামের সাথে যোগদানটি সংজ্ঞায়িত করা হয় এবং system:time_start সম্পত্তি

ফলাফলের পরিদর্শন ইঙ্গিত করে যে প্রাথমিক সংগ্রহের মধ্যে থাকা চিত্রগুলিতে terra বৈশিষ্ট্য যুক্ত রয়েছে যা মিলিত MODIS চিত্রগুলির একটি তালিকা সংরক্ষণ করে৷