একটি ইমেজ সংগ্রহের উপর পুনরাবৃত্তি

যদিও map() একটি সংগ্রহের প্রতিটি ছবিতে একটি ফাংশন প্রয়োগ করে, ফাংশনটি সংগ্রহের প্রতিটি চিত্র স্বাধীনভাবে পরিদর্শন করে। উদাহরণ স্বরূপ, ধরুন আপনি একটি টাইম সিরিজ থেকে টাইম t এ একটি ক্রমবর্ধমান অসঙ্গতি ( A t ) গণনা করতে চান। A t = f( চিত্র t , A t-1 ) ফর্মের একটি পুনরাবৃত্তিমূলকভাবে সংজ্ঞায়িত সিরিজ পেতে, ম্যাপিং কাজ করবে না কারণ ফাংশন ( f ) পূর্ববর্তী ফলাফলের ( A t-1 ) উপর নির্ভর করে। উদাহরণস্বরূপ, ধরুন আপনি একটি বেসলাইনের সাথে সম্পর্কিত ক্রমবর্ধমান নর্মালাইজড ডিফারেন্স ভেজিটেশন ইনডেক্স (NDVI) অসঙ্গতি চিত্রগুলির একটি সিরিজ গণনা করতে চান। ধরুন A 0 = 0 এবং f(চিত্র t , A t-1 ) = চিত্র t + A t-1 যেখানে A t-1 হল t-1 সময় পর্যন্ত ক্রমবর্ধমান বিসংগতি এবং t সময়ে চিত্র t হল অসামঞ্জস্য। এই পুনরাবৃত্তভাবে সংজ্ঞায়িত ImageCollection তৈরি করতে imageCollection.iterate() ব্যবহার করুন। নিম্নলিখিত উদাহরণে, ফাংশন accumulate() দুটি পরামিতি নেয়: সংগ্রহে একটি চিত্র, এবং সমস্ত পূর্ববর্তী আউটপুটগুলির একটি তালিকা। iterate() এর প্রতিটি কলের সাথে, চলমান যোগফলের সাথে অসামঞ্জস্যতা যোগ করা হয় এবং ফলাফল তালিকায় যোগ করা হয়। ইমেজগুলির একটি নতুন ক্রম পেতে চূড়ান্ত ফলাফলটি ImageCollection কনস্ট্রাক্টরের কাছে পাঠানো হয়:

কোড এডিটর (জাভাস্ক্রিপ্ট)

// Load MODIS EVI imagery.
var collection = ee.ImageCollection('MODIS/006/MYD13A1').select('EVI');

// Define reference conditions from the first 10 years of data.
var reference = collection.filterDate('2001-01-01', '2010-12-31')
  // Sort chronologically in descending order.
  .sort('system:time_start', false);

// Compute the mean of the first 10 years.
var mean = reference.mean();

// Compute anomalies by subtracting the 2001-2010 mean from each image in a
// collection of 2011-2014 images. Copy the date metadata over to the
// computed anomaly images in the new collection.
var series = collection.filterDate('2011-01-01', '2014-12-31').map(function(image) {
    return image.subtract(mean).set('system:time_start', image.get('system:time_start'));
});

// Display cumulative anomalies.
Map.setCenter(-100.811, 40.2, 5);
Map.addLayer(series.sum(),
    {min: -60000, max: 60000, palette: ['FF0000', '000000', '00FF00']}, 'EVI anomaly');

// Get the timestamp from the most recent image in the reference collection.
var time0 = reference.first().get('system:time_start');

// Use imageCollection.iterate() to make a collection of cumulative anomaly over time.
// The initial value for iterate() is a list of anomaly images already processed.
// The first anomaly image in the list is just 0, with the time0 timestamp.
var first = ee.List([
  // Rename the first band 'EVI'.
  ee.Image(0).set('system:time_start', time0).select([0], ['EVI'])
]);

// This is a function to pass to Iterate().
// As anomaly images are computed, add them to the list.
var accumulate = function(image, list) {
  // Get the latest cumulative anomaly image from the end of the list with
  // get(-1).  Since the type of the list argument to the function is unknown,
  // it needs to be cast to a List.  Since the return type of get() is unknown,
  // cast it to Image.
  var previous = ee.Image(ee.List(list).get(-1));
  // Add the current anomaly to make a new cumulative anomaly image.
  var added = image.add(previous)
    // Propagate metadata to the new image.
    .set('system:time_start', image.get('system:time_start'));
  // Return the list with the cumulative anomaly inserted.
  return ee.List(list).add(added);
};

// Create an ImageCollection of cumulative anomaly images by iterating.
// Since the return type of iterate is unknown, it needs to be cast to a List.
var cumulative = ee.ImageCollection(ee.List(series.iterate(accumulate, first)));

// Predefine the chart titles.
var title = {
  title: 'Cumulative EVI anomaly over time',
  hAxis: {title: 'Time'},
  vAxis: {title: 'Cumulative EVI anomaly'},
};

// Chart some interesting locations.
var pt1 = ee.Geometry.Point(-65.544, -4.894);
print('Amazon rainforest:',
    ui.Chart.image.series(
      cumulative, pt1, ee.Reducer.first(), 500).setOptions(title));

var pt2 = ee.Geometry.Point(116.4647, 40.1054);
print('Beijing urbanization:',
    ui.Chart.image.series(
      cumulative, pt2, ee.Reducer.first(), 500).setOptions(title));

var pt3 = ee.Geometry.Point(-110.3412, 34.1982);
print('Arizona forest disturbance and recovery:',
    ui.Chart.image.series(
      cumulative, pt3, ee.Reducer.first(), 500).setOptions(title));

পাইথন সেটআপ

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

import ee
import geemap.core as geemap

Colab (পাইথন)

import altair as alt
# Load MODIS EVI imagery.
collection = ee.ImageCollection('MODIS/006/MYD13A1').select('EVI')

# Define reference conditions from the first 10 years of data.
reference = collection.filterDate('2001-01-01', '2010-12-31').sort(
    # Sort chronologically in descending order.
    'system:time_start',
    False,
)

# Compute the mean of the first 10 years.
mean = reference.mean()

# Compute anomalies by subtracting the 2001-2010 mean from each image in a
# collection of 2011-2014 images. Copy the date metadata over to the
# computed anomaly images in the new collection.
series = collection.filterDate('2011-01-01', '2014-12-31').map(
    lambda image: image.subtract(mean).set(
        'system:time_start', image.get('system:time_start')
    )
)

# Display cumulative anomalies.
m = geemap.Map()
m.set_center(-100.811, 40.2, 5)
m.add_layer(
    series.sum(),
    {'min': -60000, 'max': 60000, 'palette': ['FF0000', '000000', '00FF00']},
    'EVI anomaly',
)
display(m)

# Get the timestamp from the most recent image in the reference collection.
time_0 = reference.first().get('system:time_start')

# Use imageCollection.iterate() to make a collection of cumulative anomaly over time.
# The initial value for iterate() is a list of anomaly images already processed.
# The first anomaly image in the list is just 0, with the time_0 timestamp.
first = ee.List([
    # Rename the first band 'EVI'.
    ee.Image(0)
    .set('system:time_start', time_0)
    .select([0], ['EVI'])
])

# This is a function to pass to Iterate().
# As anomaly images are computed, add them to the list.
def accumulate(image, list):
  # Get the latest cumulative anomaly image from the end of the list with
  # get(-1).  Since the type of the list argument to the function is unknown,
  # it needs to be cast to a List.  Since the return type of get() is unknown,
  # cast it to Image.
  previous = ee.Image(ee.List(list).get(-1))
  # Add the current anomaly to make a new cumulative anomaly image.
  added = image.add(previous).set(
      # Propagate metadata to the new image.
      'system:time_start',
      image.get('system:time_start'),
  )
  # Return the list with the cumulative anomaly inserted.
  return ee.List(list).add(added)

# Create an ImageCollection of cumulative anomaly images by iterating.
# Since the return type of iterate is unknown, it needs to be cast to a List.
cumulative = ee.ImageCollection(ee.List(series.iterate(accumulate, first)))

# Predefine the chart titles.
title = 'Cumulative EVI anomaly over time'

# Chart some interesting locations.
def display_chart(region, collection):
  reduced = (
      collection.filterBounds(region)
      .sort('system:time_start')
      .map(
          lambda image: ee.Feature(
              None,
              image.reduceRegion(ee.Reducer.first(), region, 500).set(
                  'time', image.get('system:time_start')
              ),
          )
      )
  )
  reduced_dataframe = ee.data.computeFeatures(
      {'expression': reduced, 'fileFormat': 'PANDAS_DATAFRAME'}
  )
  alt.Chart(reduced_dataframe).mark_line().encode(
      alt.X('time:T').title('Time'),
      alt.Y('EVI:Q').title('Cumulative EVI anomaly'),
  ).properties(title=title).display()

pt_1 = ee.Geometry.Point(-65.544, -4.894)
display('Amazon rainforest:')
display_chart(pt_1, cumulative)

pt_2 = ee.Geometry.Point(116.4647, 40.1054)
display('Beijing urbanization:')
display_chart(pt_2, cumulative)

pt_3 = ee.Geometry.Point(-110.3412, 34.1982)
display('Arizona forest disturbance and recovery:')
display_chart(pt_3, cumulative)

এই সিকোয়েন্সগুলি চার্ট করা ইঙ্গিত করে যে NDVI আগের ব্যাঘাতের তুলনায় স্থিতিশীল হচ্ছে কিনা বা NDVI একটি নতুন রাজ্যে প্রবণতা করছে কিনা। চার্ট বিভাগ থেকে আর্থ ইঞ্জিনে চার্ট সম্পর্কে আরও জানুন।

পুনরাবৃত্ত ফাংশন এটি সঞ্চালন করতে পারে অপারেশন সীমিত. বিশেষ করে, এটি ফাংশনের বাইরে ভেরিয়েবল পরিবর্তন করতে পারে না; এটা কিছু মুদ্রণ করতে পারে না; এটি জাভাস্ক্রিপ্ট 'if' বা 'for' বিবৃতি ব্যবহার করতে পারে না। যে কোনো ফলাফল আপনি সংগ্রহ করতে চান বা মধ্যবর্তী তথ্য যা আপনি পরবর্তী পুনরাবৃত্তিতে নিয়ে যেতে চান তা অবশ্যই ফাংশনের রিটার্ন মান হতে হবে। শর্তসাপেক্ষ অপারেশন করতে আপনি `ee.Algorithms.If()` ব্যবহার করতে পারেন।