ইমেজ কালেকশন ভিজ্যুয়ালাইজেশন

একটি ImageCollection কম্পোজ করা ছবিগুলিকে একটি অ্যানিমেশন বা থাম্বনেইলের একটি সিরিজ হিসাবে "ফিল্মস্ট্রিপ" হিসাবে উল্লেখ করা যেতে পারে। এই পদ্ধতিগুলি একটি ImageCollection বিষয়বস্তুগুলির একটি দ্রুত মূল্যায়ন এবং স্থানিক পরিবর্তনের সাক্ষীর জন্য একটি কার্যকর মাধ্যম প্রদান করে (চিত্র 1)।

  • getVideoThumbURL() একটি অ্যানিমেটেড ইমেজ সিরিজ তৈরি করে
  • getFilmstripThumbURL() একটি থাম্বনেইল ইমেজ সিরিজ তৈরি করে

নিম্নলিখিত বিভাগগুলি বর্ণনা করে কিভাবে ভিজ্যুয়ালাইজেশনের জন্য একটি ImageCollection প্রস্তুত করতে হয়, প্রতিটি সংগ্রহের ভিজ্যুয়ালাইজেশন পদ্ধতির জন্য উদাহরণ কোড প্রদান করে এবং বেশ কয়েকটি উন্নত অ্যানিমেশন কৌশল কভার করে।


চিত্র 1. অ্যানিমেশন 2017 সালের সেপ্টেম্বরে আটলান্টিক হারিকেনের তিন দিনের অগ্রগতি দেখায়।

সংগ্রহ প্রস্তুতি

ফিল্টার, কম্পোজিট, বাছাই, এবং শৈলী চিত্রগুলিকে একটি সংগ্রহের মধ্যে শুধুমাত্র আগ্রহের বিষয়গুলি প্রদর্শন করতে বা একটি ঘটনাকে গুরুত্ব দিতে। যেকোন ImageCollection ভিজ্যুয়ালাইজেশন ফাংশন ইনপুট হিসাবে প্রদান করা যেতে পারে, তবে আন্তঃ এবং আন্তঃ-বার্ষিক তারিখের ব্যাপ্তি, পর্যবেক্ষণ ব্যবধান, আঞ্চলিক ব্যাপ্তি, গুণমান এবং উপস্থাপনা বিবেচনা করে একটি কিউরেটেড সংগ্রহ আরও ভাল ফলাফল অর্জন করতে পারে।

ফিল্টারিং

শুধুমাত্র প্রাসঙ্গিক ডেটা অন্তর্ভুক্ত করতে একটি চিত্র সংগ্রহ ফিল্টার করুন যা ভিজ্যুয়ালাইজেশনের উদ্দেশ্য সমর্থন করে। একটি প্রদত্ত ডেটাসেটের নির্দিষ্ট তারিখ, স্থানিক ব্যাপ্তি, গুণমান এবং অন্যান্য বৈশিষ্ট্য বিবেচনা করুন।

উদাহরণস্বরূপ, একটি সেন্টিনেল -2 পৃষ্ঠের প্রতিফলন সংগ্রহ ফিল্টার করুন:

একটি একক তারিখ পরিসীমা,

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterDate('2018-01-01', '2019-01-01');

বছরের একটি ধারাবাহিক দিন পরিসীমা,

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filter(ee.Filter.calendarRange(171, 242, 'day_of_year'));

আগ্রহের একটি অঞ্চল,

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(ee.Geometry.Point(-122.1, 37.2));

বা একটি চিত্র সম্পত্তি।

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 50));

চেইন একাধিক ফিল্টার.

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterDate('2018-01-01', '2019-01-01')
  .filterBounds(ee.Geometry.Point(-122.1, 37.2))
  .filter('CLOUDY_PIXEL_PERCENTAGE < 50');

কম্পোজিং

একটি সংগ্রহে ছবির সংখ্যা কমাতে এবং গুণমান উন্নত করতে কম্পোজিট আন্তঃ এবং আন্তঃ-বার্ষিক তারিখ ব্যাপ্তি। উদাহরণস্বরূপ, ধরুন আপনি আফ্রিকার জন্য বার্ষিক NDVI-এর একটি ভিজ্যুয়ালাইজেশন তৈরি করবেন। একটি বিকল্প হল সমস্ত 2018 পর্যবেক্ষণগুলি অন্তর্ভুক্ত করার জন্য একটি MODIS 16-দিনের NDVI সংগ্রহ ফিল্টার করা।

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

var ndviCol = ee.ImageCollection('MODIS/006/MOD13A2')
  .filterDate('2018-01-01', '2019-01-01')
  .select('NDVI');

ফিল্টার এবং হ্রাস দ্বারা আন্তঃবার্ষিক যৌগিক

উপরের সংগ্রহের ভিজ্যুয়ালাইজেশন বনাঞ্চলে যথেষ্ট শব্দ দেখায় যেখানে মেঘের আচ্ছাদন ভারী (চিত্র 2a)। MODIS সংগ্রহে সমস্ত বছর ধরে মধ্যম দ্বারা সিরিয়াল তারিখের সীমা হ্রাস করে একটি ভাল উপস্থাপনা অর্জন করা যেতে পারে।

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

// Make a day-of-year sequence from 1 to 365 with a 16-day step.
var doyList = ee.List.sequence(1, 365, 16);

// Import a MODIS NDVI collection.
var ndviCol = ee.ImageCollection('MODIS/006/MOD13A2').select('NDVI');

// Map over the list of days to build a list of image composites.
var ndviCompList = doyList.map(function(startDoy) {
  // Ensure that startDoy is a number.
  startDoy = ee.Number(startDoy);

  // Filter images by date range; starting with the current startDate and
  // ending 15 days later. Reduce the resulting image collection by median.
  return ndviCol
    .filter(ee.Filter.calendarRange(startDoy, startDoy.add(15), 'day_of_year'))
    .reduce(ee.Reducer.median());
});

// Convert the image List to an ImageCollection.
var ndviCompCol = ee.ImageCollection.fromImages(ndviCompList);

এই সংগ্রহের ফলে সৃষ্ট অ্যানিমেশনটি কম শোরগোলপূর্ণ, কারণ প্রতিটি চিত্র 20+ বছরের ডেটার জন্য 16-দিনের NDVI কম্পোজিটের মধ্যকার প্রতিনিধিত্ব করে (চিত্র 1b)। এই অ্যানিমেশন সম্পর্কে আরও তথ্যের জন্য এই টিউটোরিয়াল দেখুন।

চিত্র 2a. আন্তঃবার্ষিক সংমিশ্রণ ছাড়াই বার্ষিক NDVI। চিত্র 2 খ. আন্তঃবার্ষিক সংমিশ্রণ সহ বার্ষিক NDVI।

ফিল্টার এবং হ্রাস দ্বারা আন্তঃবার্ষিক যৌগিক

পূর্ববর্তী উদাহরণটি আন্তঃবার্ষিক সংমিশ্রণ প্রযোজ্য। আন্তঃবার্ষিক পর্যবেক্ষণের একটি সিরিজ সংমিশ্রণ করাও সহায়ক হতে পারে। উদাহরণস্বরূপ, ল্যান্ডস্যাট ডেটা প্রতি সেন্সর প্রতি একটি প্রদত্ত দৃশ্যের জন্য প্রতি ষোল দিনে সংগ্রহ করা হয়, তবে প্রায়শই চিত্রগুলির কিছু অংশ মেঘ দ্বারা অস্পষ্ট হয়। ক্লাউড আউট মাস্কিং এবং একই ঋতু থেকে বিভিন্ন ইমেজ সংমিশ্রণ একটি আরো ক্লাউড-মুক্ত উপস্থাপনা তৈরি করতে পারে. নিম্নলিখিত উদাহরণটি বিবেচনা করুন যেখানে জুলাই এবং আগস্টের ল্যান্ডস্যাট 5 চিত্রগুলি 1985 থেকে 2011 পর্যন্ত প্রতি বছরের জন্য মধ্যম ব্যবহার করে সংমিশ্রিত হয়েছে।

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

// Assemble a collection of Landsat surface reflectance images for a given
// region and day-of-year range.
var lsCol = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
  .filterBounds(ee.Geometry.Point(-122.9, 43.6))
  .filter(ee.Filter.dayOfYear(182, 243))
  // Add the observation year as a property to each image.
  .map(function(img) {
    return img.set('year', ee.Image(img).date().get('year'));
  });


// Define a function to scale the data and mask unwanted pixels.
function maskL457sr(image) {
  // Bit 0 - Fill
  // Bit 1 - Dilated Cloud
  // Bit 2 - Unused
  // Bit 3 - Cloud
  // Bit 4 - Cloud Shadow
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  var saturationMask = image.select('QA_RADSAT').eq(0);

  // Apply the scaling factors to the appropriate bands.
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBand = image.select('ST_B6').multiply(0.00341802).add(149.0);

  // Replace the original bands with the scaled ones and apply the masks.
  return image.addBands(opticalBands, null, true)
      .addBands(thermalBand, null, true)
      .updateMask(qaMask)
      .updateMask(saturationMask);
}

// Define a list of unique observation years from the image collection.
var years = ee.List(lsCol.aggregate_array('year')).distinct().sort();

// Map over the list of years to build a list of annual image composites.
var lsCompList = years.map(function(year) {
  return lsCol
    // Filter image collection by year.
    .filterMetadata('year', 'equals', year)
    // Apply cloud mask.
    .map(maskL457sr)
    // Reduce image collection by median.
    .reduce(ee.Reducer.median())
    // Set composite year as an image property.
    .set('year', year);
});

// Convert the image List to an ImageCollection.
var lsCompCol = ee.ImageCollection.fromImages(lsCompList);

যোগদান এবং হ্রাস দ্বারা আন্তঃ-বার্ষিক কম্পোজিট

উল্লেখ্য যে পূর্ববর্তী দুটি কম্পোজিটিং পদ্ধতি দিন এবং বছরের একটি List ম্যাপ করে ক্রমবর্ধমানভাবে ফিল্টার এবং কম্পোজিট ওভার করার জন্য নতুন তারিখগুলি সংজ্ঞায়িত করে৷ যোগদান প্রয়োগ করা এই অপারেশনটি অর্জনের জন্য আরেকটি পদ্ধতি। নিম্নলিখিত স্নিপেটে, একটি অনন্য বছরের সংগ্রহ সংজ্ঞায়িত করা হয়েছে এবং তারপর একটি প্রদত্ত বছরের সাথে সম্পর্কিত সমস্ত চিত্র সনাক্ত করতে একটি saveAll যোগ প্রয়োগ করা হয়েছে। একটি প্রদত্ত বছরের অন্তর্গত ছবিগুলিকে একটি List বস্তুতে গোষ্ঠীভুক্ত করা হয় যা স্বতন্ত্র বছরের সংগ্রহে সংশ্লিষ্ট বছরের প্রতিনিধির সম্পত্তি হিসাবে সংরক্ষণ করা হয়। এই তালিকাগুলি থেকে বার্ষিক কম্পোজিটগুলি তৈরি করা হয় তাদের দ্বারা সংজ্ঞায়িত ImageCollections কমিয়ে একটি স্বতন্ত্র বছরের সংগ্রহে ম্যাপ করা ফাংশনে।

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

// Assemble a collection of Landsat surface reflectance images for a given
// region and day-of-year range.
var lsCol = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
  .filterBounds(ee.Geometry.Point(-122.9, 43.6))
  .filter(ee.Filter.dayOfYear(182, 243))
  // Add the observation year as a property to each image.
  .map(function(img) {
    return img.set('year', ee.Image(img).date().get('year'));
  });

// Make a distinct year collection; one image representative per year.
var distinctYears = lsCol.distinct('year').sort('year');

// Define a join filter; one-to-many join on ‘year’ property.
var filter = ee.Filter.equals({leftField: 'year', rightField: 'year'});

// Define a join.
var join = ee.Join.saveAll('year_match');

// Apply the join; results in 'year_match' property being added to each distinct
// year representative image. The list includes all images in the collection
// belonging to the respective year.
var joinCol = join.apply(distinctYears, lsCol, filter);

// Define a function to scale the data and mask unwanted pixels.
function maskL457sr(image) {
  // Bit 0 - Fill
  // Bit 1 - Dilated Cloud
  // Bit 2 - Unused
  // Bit 3 - Cloud
  // Bit 4 - Cloud Shadow
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  var saturationMask = image.select('QA_RADSAT').eq(0);

  // Apply the scaling factors to the appropriate bands.
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBand = image.select('ST_B6').multiply(0.00341802).add(149.0);

  // Replace the original bands with the scaled ones and apply the masks.
  return image.addBands(opticalBands, null, true)
      .addBands(thermalBand, null, true)
      .updateMask(qaMask)
      .updateMask(saturationMask);
}

// Map over the distinct years collection to build a list of annual image
// composites.
var lsCompList = joinCol.map(function(img) {
  // Get the list of images belonging to the given year.
  return ee.ImageCollection.fromImages(img.get('year_match'))
    // Apply cloud mask.
    .map(maskL457sr)
    // Reduce image collection by median.
    .reduce(ee.Reducer.median())
    // Set composite year as an image property.
    .copyProperties(img, ['year']);
});

// Convert the image List to an ImageCollection.
var lsCompCol = ee.ImageCollection(lsCompList);

একই দিনে যোগদান এবং হ্রাস দ্বারা যৌগিক

কম্পোজিংয়ের জন্য একটি অতিরিক্ত ক্ষেত্রে স্থানিকভাবে সংলগ্ন চিত্র মোজাইক তৈরি করা। ধরুন আপনার আগ্রহের অঞ্চলটি একই পথের মধ্যে দুটি ল্যান্ডস্যাট সারি বিস্তৃত করে এবং আপনার উদ্দেশ্য হল 2017 এবং 2018 সালের প্রতিটি ল্যান্ডস্যাট 8 কক্ষপথের জন্য দুটি চিত্রের একটি চিত্র মোজাইক প্রদর্শন করা। এখানে, পথ এবং সারি দ্বারা সংগ্রহ ফিল্টার করার পরে, একই তারিখ থেকে ল্যান্ডস্যাট চিত্রগুলিকে মোজাইক করার জন্য একটি জয়েন অপারেশন ব্যবহার করা হয়।

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

var lsCol = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  .filterDate('2017-01-01', '2019-01-01')
  .filter('WRS_PATH == 38 && (WRS_ROW == 28 || WRS_ROW == 29)')
  .map(function(img) {
    var date = img.date().format('YYYY-MM-dd');
    return img.set('date', date);
  });

var distinctDates = lsCol.distinct('date').sort('date');
var filter = ee.Filter.equals({leftField: 'date', rightField: 'date'});
var join = ee.Join.saveAll('date_match');
var joinCol = join.apply(distinctDates, lsCol, filter);

var lsColMos = ee.ImageCollection(joinCol.map(function(col) {
  return ee.ImageCollection.fromImages(col.get('date_match')).mosaic();
}));

বাছাই

সঠিক কালানুক্রমিক ক্রম নিশ্চিত করতে সময় অনুসারে একটি সংগ্রহ বাছাই করুন, বা আপনার পছন্দের একটি সম্পত্তি দ্বারা অর্ডার করুন। ডিফল্টরূপে, ভিজ্যুয়ালাইজেশন ফ্রেম সিরিজ সংগ্রহের স্বাভাবিক ক্রমে সাজানো হয়। sort সংগ্রহ পদ্ধতি ব্যবহার করে সিরিজের বিন্যাস পরিবর্তন করা যেতে পারে, যার মাধ্যমে ঊর্ধ্বমুখী বা অবরোহ ক্রমে বাছাই করার জন্য একটি Image সম্পত্তি নির্বাচন করা হয়। উদাহরণস্বরূপ, পর্যবেক্ষণের সময় অনুসারে সাজানোর জন্য, সর্বব্যাপী system:time_start বৈশিষ্ট্য ব্যবহার করুন।

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(ee.Geometry.Point(-122.1, 37.2))
  .sort('system:time_start');

অথবা সম্ভবত সেন্টিনেল -2 চিত্রের এই ক্ষেত্রে যেমন ক্রমবর্ধমান মেঘলাতা দ্বারা সংজ্ঞায়িত করা উচিত।

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

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(ee.Geometry.Point(-122.1, 37.2))
  .sort('CLOUDY_PIXEL_PERCENTAGE');

অর্ডার একটি প্রাপ্ত সম্পত্তি দ্বারা সংজ্ঞায়িত করা যেতে পারে, যেমন গড় আঞ্চলিক NDVI। এখানে, আঞ্চলিক NDVI একটি ম্যাপ করা ফাংশনে প্রতিটি ছবিতে একটি বৈশিষ্ট্য হিসাবে যোগ করা হয়, তারপরে নতুন সম্পত্তিতে একটি সাজানো হয়।

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

// Define an area of interest geometry.
var aoi = ee.Geometry.Point(-122.1, 37.2).buffer(1e4);

// Filter MODIS NDVI image collection by a date range.
var ndviCol = ee.ImageCollection('MODIS/061/MOD13A1')
  .filterDate('2018-01-01', '2019-01-01')
  .select('NDVI')
  // Map over the image collection to calculate regional mean NDVI and add
  // the result to each image as a property.
  .map(function(img) {
    var meanNdvi = img.reduceRegion({
      reducer: ee.Reducer.mean(), geometry: aoi, scale: 500});
    return img.set('meanNdvi', meanNdvi.get('NDVI'));
  })
  // Sort the collection by descending regional mean NDVI.
  .sort('meanNdvi', false);

ইমেজ ভিজ্যুয়ালাইজেশন

ইমেজ ভিজ্যুয়ালাইজেশন সংখ্যাকে রঙে রূপান্তরিত করে। সংগ্রহের ভিজ্যুয়ালাইজেশন পদ্ধতিতে চিত্র ডেটা কীভাবে রঙ হিসাবে উপস্থাপন করা হয় তা নিয়ন্ত্রণ করার তিনটি উপায় রয়েছে:

  1. getVideoThumbURL এবং getFilmstripThumbURL এ সরাসরি ভিজ্যুয়ালাইজেশন আর্গুমেন্ট প্রদান করুন।
  2. getVideoThumbURL এবং getFilmstripThumbURL এর প্রয়োগের আগে চিত্র সংগ্রহের উপর visualize ইমেজ পদ্ধতি ম্যাপ করুন।
  3. getVideoThumbURL এবং getFilmstripThumbURL প্রয়োগ করার আগে চিত্র সংগ্রহের উপর sldStyle চিত্র পদ্ধতি ম্যাপ করুন। আরও তথ্যের জন্য স্টাইলড লেয়ার বর্ণনাকারী দেখুন।

এই গাইডের উদাহরণগুলি 1 এবং 2 বিকল্পগুলি ব্যবহার করে, যেখানে একটি মাল্টি-ব্যান্ড ইমেজের তিনটি ইমেজ ব্যান্ডকে রঙিন চ্যানেলে লাল, সবুজ এবং নীল বা একটি রঙের প্যালেট বরাবর রৈখিকভাবে একটি একক ব্যান্ডের গ্রেডিং মানগুলি ম্যাপ করে ভিজ্যুয়ালাইজেশন অর্জন করা হয়। ভিজ্যুয়ালাইজেশন পরামিতি অন্তর্ভুক্ত:

ভিজ্যুয়ালাইজেশন পরামিতি
প্যারামিটার বর্ণনা টাইপ
ব্যান্ড RGB-তে ম্যাপ করার জন্য তিনটি ব্যান্ডের নামের কমা দ্বারা সীমাবদ্ধ তালিকা তালিকা
মিনিট মান(গুলি) 0 তে মানচিত্র সংখ্যা বা তিনটি সংখ্যার তালিকা, প্রতিটি ব্যান্ডের জন্য একটি
সর্বোচ্চ মান(গুলি) মানচিত্র 255 সংখ্যা বা তিনটি সংখ্যার তালিকা, প্রতিটি ব্যান্ডের জন্য একটি
লাভ মান(গুলি) যার দ্বারা প্রতিটি পিক্সেল মান গুণ করতে হবে সংখ্যা বা তিনটি সংখ্যার তালিকা, প্রতিটি ব্যান্ডের জন্য একটি
পক্ষপাত প্রতিটি DN-এ যোগ করার জন্য মান(গুলি) সংখ্যা বা তিনটি সংখ্যার তালিকা, প্রতিটি ব্যান্ডের জন্য একটি
গামা গামা সংশোধন ফ্যাক্টর(গুলি) সংখ্যা বা তিনটি সংখ্যার তালিকা, প্রতিটি ব্যান্ডের জন্য একটি
প্যালেট CSS-স্টাইলের রঙের স্ট্রিংগুলির তালিকা (শুধুমাত্র একক-ব্যান্ডের ছবি) হেক্স স্ট্রিংগুলির কমা দ্বারা পৃথক করা তালিকা
অস্বচ্ছতা স্তরটির অস্বচ্ছতা (0.0 সম্পূর্ণ স্বচ্ছ এবং 1.0 সম্পূর্ণ অস্বচ্ছ) সংখ্যা

আপনি কল্পনা করতে চান এমন ব্যান্ড(গুলি) নির্বাচন করতে bands আর্গুমেন্ট ব্যবহার করুন। এক বা তিনটি ব্যান্ডের নামের একটি তালিকা প্রদান করুন। মাল্টি-ব্যান্ড ইমেজের ক্ষেত্রে, প্রথম তিনটি ব্যান্ড ডিফল্টরূপে নির্বাচিত হয়। ব্যান্ডের নাম অর্ডার রঙ নির্ধারণ করে; প্রথম, দ্বিতীয় এবং তৃতীয় তালিকাভুক্ত ব্যান্ডগুলি যথাক্রমে লাল, সবুজ এবং নীল রঙে ম্যাপ করা হয়েছে।

চিত্রগুলি কল্পনা করার সময় ডেটা পরিসীমা স্কেলিং একটি গুরুত্বপূর্ণ বিবেচনা। ডিফল্টরূপে, 0 এবং 1 (অন্তর্ভুক্ত) এর মধ্যে ফ্লোটিং পয়েন্ট ডেটা মান 0 এবং 255 (অন্তর্ভুক্ত) এর মধ্যে স্কেল করা হয়। এই সীমার বাইরের মানগুলিকে 0 এবং 255 তে বাধ্য করা হয় তারা যথাক্রমে 0-এর কম বা 1-এর বেশি কিনা তার উপর নির্ভর করে। পূর্ণসংখ্যা ডেটার ক্ষেত্রে, এর ধরন দ্বারা সংজ্ঞায়িত সম্পূর্ণ ক্ষমতা 0 এবং 255 এর মধ্যে স্কেল করা হয় (যেমন, স্বাক্ষরিত 16-বিট ডেটার পরিসীমা −32,768 থেকে 32,767, যা ডিফল্টরূপে [0, 255] পর্যন্ত স্কেল করে)। ডিফল্টগুলি গ্রহণ করার ফলে প্রায়শই চিত্রের বৈশিষ্ট্যগুলির মধ্যে সামান্য বা কোন বৈসাদৃশ্য নেই। বৈসাদৃশ্য উন্নত করতে এবং একটি নির্দিষ্ট ডেটা ব্যাপ্তির উপর জোর দিতে min এবং max ব্যবহার করুন। একটি ভাল নিয়ম হল আপনার আগ্রহের এলাকার মধ্যে ডেটার 2য় এবং 98তম শতাংশের প্রতিনিধিত্ব করে এমন মানগুলিতে min এবং max সেট করা। একটি ডিজিটাল উচ্চতা মডেলের জন্য এই মানগুলি গণনা করার নিম্নলিখিত উদাহরণটি দেখুন।

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

// Import SRTM global elevation model.
var demImg = ee.Image('USGS/SRTMGL1_003');

// Define a rectangular area of interest.
var aoi = ee.Geometry.Polygon(
  [[
    [-103.84153083119054, 49.083004219142886],
    [-103.84153083119054, 25.06838270664608],
    [-85.64817145619054, 25.06838270664608],
    [-85.64817145619054, 49.083004219142886]
  ]],
  null, false);

// Calculate the 2nd and 98th percentile elevation values from rescaled (to
// 500m) pixels intersecting the area of interest. A Dictionary is returned.
var percentClip = demImg.reduceRegion({
  reducer: ee.Reducer.percentile([2, 98]),
  geometry: aoi,
  scale: 500,
  maxPixels: 3e7
});

// Print the regional 2nd and 98th percentile elevation values. Get the
// dictionary keys and use them to get the values for each percentile summary.
var keys = percentClip.keys();
print('Set vis min to:', ee.Number(percentClip.get(keys.get(0))).round());
print('Set vis max to:', ee.Number(percentClip.get(keys.get(1))).round());

palette প্যারামিটার 8-বিট ভিজ্যুয়ালাইজেশন ইমেজ প্রতিনিধিত্ব করার জন্য রং সংজ্ঞায়িত করে। এটি শুধুমাত্র একক-ব্যান্ড উপস্থাপনের ক্ষেত্রে প্রযোজ্য; একটি মাল্টি-ব্যান্ড ইমেজ দিয়ে এটি নির্দিষ্ট করার ফলে একটি ত্রুটি দেখা দেয়। যদি ডেটা একক-ব্যান্ড হয় বা আপনি একটি মাল্টি-ব্যান্ড ইমেজ থেকে একটি একক ব্যান্ড কল্পনা করতে চান, তাহলে forceRgbOutput প্যারামিটারটিকে true সেট করুন ( palette আর্গুমেন্ট দেওয়া থাকলে অপ্রয়োজনীয়)। 0 এবং 255 এর মধ্যে রৈখিকভাবে স্কেল করার জন্য মানগুলির পরিসর নির্ধারণ করতে min এবং max পরামিতিগুলি ব্যবহার করুন৷

একটি একক-ব্যান্ড চিত্র সংগ্রহের উপর একটি ভিজ্যুয়ালাইজেশন ফাংশন ম্যাপ করার একটি উদাহরণ অনুসরণ করা হয়েছে। একটি MODIS NDVI সংগ্রহ আমদানি করা হয়, visualization পদ্ধতির জন্য ভিজ্যুয়ালাইজেশন আর্গুমেন্ট সেট করা হয়, এবং একটি ফাংশন যা মানগুলিকে RGB চিত্র উপস্থাপনায় রূপান্তর করে NDVI সংগ্রহের উপর ম্যাপ করা হয়।

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

// Filter MODIS NDVI image collection by a date range.
var ndviCol = ee.ImageCollection('MODIS/061/MOD13A1')
  .filterDate('2018-01-01', '2019-01-01')
  .select('NDVI');

// Define visualization arguments.
var visArgs = {
  min: 0,
  max: 9000,
  palette: [
    'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
    '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
    '012E01', '011D01', '011301'
  ]
};

// Define a function to convert an image to an RGB visualization image and copy
// properties from the original image to the RGB image.
var visFun = function(img) {
  return img.visualize(visArgs).copyProperties(img, img.propertyNames());
};

// Map over the image collection to convert each image to an RGB visualization
// using the previously defined visualization function.
var ndviColVis = ndviCol.map(visFun);

এখানে একটি মাল্টি-ব্যান্ড চিত্র সংগ্রহের উপর একটি ভিজ্যুয়ালাইজেশন ফাংশন ম্যাপ করার একটি উদাহরণ রয়েছে:

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

// Assemble a collection of Sentinel-2 surface reflectance images for a given
// region and date range.
var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(ee.Geometry.Point(-96.9037, 48.0395))
  .filterDate('2019-06-01', '2019-10-01');

// Define visualization arguments.
var visArgs = {bands: ['B11', 'B8', 'B3'], min: 300, max: 3500};

// Define a function to convert an image to an RGB visualization image and copy
// properties from the original image to the RGB image.
var visFun = function(img) {
  return img.visualize(visArgs).copyProperties(img, img.propertyNames());
};

// Map over the image collection to convert each image to an RGB visualization
// using the previously defined visualization function.
var s2colVis = s2col.map(visFun);

এই ক্ষেত্রে, কোন প্যালেট যুক্তি প্রদান করা হয় না কারণ তিনটি ব্যান্ড দেওয়া হয়, যা প্রতিটি RGB স্তরের জন্য তীব্রতা নির্ধারণ করে। নোট করুন যে উভয় উদাহরণই 8-বিট RGB ডেটার সীমাতে কোন মানগুলি প্রসারিত করা হয়েছে তা নিয়ন্ত্রণ করতে min এবং max পরামিতি ব্যবহার করে৷

ভিডিও থাম্ব

getVideoThumbURL() ফাংশন একটি ImageCollection সমস্ত ছবি থেকে একটি অ্যানিমেশন তৈরি করে যেখানে প্রতিটি ছবি একটি ফ্রেমের প্রতিনিধিত্ব করে। একটি অ্যানিমেশন তৈরির জন্য সাধারণ কর্মপ্রবাহ নিম্নরূপ:

  1. একটি Geometry সংজ্ঞায়িত করুন যার সীমা অ্যানিমেশনের আঞ্চলিক ব্যাপ্তি নির্ধারণ করে।
  2. একটি ImageCollection সংজ্ঞায়িত করুন।
  3. ইমেজ ভিজ্যুয়ালাইজেশন বিবেচনা করুন: হয় সংগ্রহের উপর একটি ইমেজ ভিজ্যুয়ালাইজেশন ফাংশন ম্যাপ করুন বা অ্যানিমেশন আর্গুমেন্টের সেটে ইমেজ ভিজ্যুয়ালাইজেশন আর্গুমেন্ট যোগ করুন।
  4. অ্যানিমেশন আর্গুমেন্ট সংজ্ঞায়িত করুন এবং getVideoThumbURL পদ্ধতিতে কল করুন।

getVideoThumbURL এর ফলাফল হল একটি URL। কনসোলে URLটি প্রিন্ট করুন এবং একটি নতুন ব্রাউজার ট্যাবে উড়তে থাকা অ্যানিমেশন তৈরি করে আর্থ ইঞ্জিন সার্ভারগুলি শুরু করতে এটিতে ক্লিক করুন৷ বিকল্পভাবে, সংগ্রহে ui.Thumbnail ফাংশন এবং এর সংশ্লিষ্ট অ্যানিমেশন আর্গুমেন্ট কল করে কোড এডিটর কনসোলে অ্যানিমেশন দেখুন। রেন্ডার করার পরে, অ্যানিমেশনটি ডাউনলোড করার জন্য এটিতে ডান ক্লিক করে এবং এর প্রসঙ্গ মেনু থেকে উপযুক্ত বিকল্পগুলি নির্বাচন করে উপলব্ধ।

নিম্নলিখিত উদাহরণটি 24 ঘন্টার মধ্যে বিশ্বব্যাপী তাপমাত্রাকে চিত্রিত করে একটি অ্যানিমেশন তৈরি করাকে চিত্রিত করে। মনে রাখবেন যে এই উদাহরণটিতে অ্যানিমেশন আর্গুমেন্টের সাথে ভিজ্যুয়ালাইজেশন আর্গুমেন্ট রয়েছে, যেমনটি ImageCollection এর উপরে একটি ভিজ্যুয়ালাইজেশন ফাংশন ম্যাপ করার বিপরীতে। এই স্ক্রিপ্টটি চালানোর পরে, চিত্র 3 এর অনুরূপ একটি অ্যানিমেশন কোড এডিটর কনসোলে উপস্থিত হওয়া উচিত।

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

// Define an area of interest geometry with a global non-polar extent.
var aoi = ee.Geometry.Polygon(
  [[[-179.0, 78.0], [-179.0, -58.0], [179.0, -58.0], [179.0, 78.0]]], null,
  false);

// Import hourly predicted temperature image collection for northern winter
// solstice. Note that predictions extend for 384 hours; limit the collection
// to the first 24 hours.
var tempCol = ee.ImageCollection('NOAA/GFS0P25')
  .filterDate('2018-12-22', '2018-12-23')
  .limit(24)
  .select('temperature_2m_above_ground');

// Define arguments for animation function parameters.
var videoArgs = {
  dimensions: 768,
  region: aoi,
  framesPerSecond: 7,
  crs: 'EPSG:3857',
  min: -40.0,
  max: 35.0,
  palette: ['blue', 'purple', 'cyan', 'green', 'yellow', 'red']
};

// Print the animation to the console as a ui.Thumbnail using the above defined
// arguments. Note that ui.Thumbnail produces an animation when the first input
// is an ee.ImageCollection instead of an ee.Image.
print(ui.Thumbnail(tempCol, videoArgs));

// Alternatively, print a URL that will produce the animation when accessed.
print(tempCol.getVideoThumbURL(videoArgs));


চিত্র 3. উত্তর শীতকালীন অয়নকালের জন্য প্রতি ঘন্টায় পৃষ্ঠের তাপমাত্রা একটি অ্যানিমেটেড GIF চিত্র হিসাবে উপস্থাপিত।

ফিল্মস্ট্রিপ

getFilmstripThumbUrl ফাংশনটি উত্তর-দক্ষিণ সিরিজে একটি ImageCollection সমস্ত চিত্রের সংমিশ্রণ উপস্থাপন করে একটি একক স্ট্যাটিক চিত্র তৈরি করে। ফিল্মস্ট্রিপ ফ্রেমের ক্রম সংগ্রহের স্বাভাবিক ক্রম অনুসরণ করে।

getFilmstripThumbUrl এর ফলাফল হল একটি URL। ইউআরএলটি কনসোলে প্রিন্ট করুন এবং আর্থ ইঞ্জিন সার্ভারগুলিকে একটি নতুন ব্রাউজার ট্যাবে ফ্লাইতে ইমেজ তৈরি করা শুরু করতে ক্লিক করুন। রেন্ডার করার পরে, ছবিটিতে ডান ক্লিক করে এবং এর প্রসঙ্গ মেনু থেকে উপযুক্ত বিকল্পগুলি নির্বাচন করে ডাউনলোড করার জন্য উপলব্ধ।

নিম্নলিখিত কোড স্নিপেট উপরের ভিডিও থাম্ব উদাহরণ হিসাবে একই সংগ্রহ ব্যবহার করে. এই স্ক্রিপ্টটি চালানোর পরে, চিত্র 4 এর মতো একটি ফিল্মস্ট্রিপ কোড এডিটর কনসোলে উপস্থিত হওয়া উচিত।

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

// Define an area of interest geometry with a global non-polar extent.
var aoi = ee.Geometry.Polygon(
  [[[-179.0, 78.0], [-179.0, -58.0], [179.0, -58.0], [179.0, 78.0]]], null,
  false);

// Import hourly predicted temperature image collection for northern winter
// solstice. Note that predictions extend for 384 hours; limit the collection
// to the first 24 hours.
var tempCol = ee.ImageCollection('NOAA/GFS0P25')
  .filterDate('2018-12-22', '2018-12-23')
  .limit(24)
  .select('temperature_2m_above_ground');

// Define arguments for the getFilmstripThumbURL function parameters.
var filmArgs = {
  dimensions: 128,
  region: aoi,
  crs: 'EPSG:3857',
  min: -40.0,
  max: 35.0,
  palette: ['blue', 'purple', 'cyan', 'green', 'yellow', 'red']
};

// Print a URL that will produce the filmstrip when accessed.
print(tempCol.getFilmstripThumbURL(filmArgs));


চিত্র 4. উত্তর শীতকালীন অয়নকালের জন্য প্রতি ঘন্টায় পৃষ্ঠের তাপমাত্রা একটি ফিল্মস্ট্রিপ PNG চিত্র হিসাবে উপস্থাপিত। উল্লেখ্য যে ফিল্মস্ট্রিপ প্রদর্শনের জন্য চারটি বিভাগে বিভক্ত করা হয়েছে; getFilmstripThumbURL এর ফলাফল হল উত্তর-দক্ষিণে যোগ করা ছবিগুলির একটি একক সিরিজ।

উন্নত কৌশল

নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে ক্লিপিং, অস্বচ্ছতা এবং লেয়ার কম্পোজিটিং ব্যবহার করে বহুভুজ সীমানা যুক্ত করে, আগ্রহের অঞ্চলগুলিতে জোর দিয়ে এবং একটি সংগ্রহের মধ্যে ছবিগুলির তুলনা করে ভিজ্যুয়ালাইজেশন উন্নত করতে হয়।

মনে রাখবেন যে এই বিভাগে নিম্নলিখিত সমস্ত উদাহরণ এখানে সংজ্ঞায়িত একই বেস ImageCollection ব্যবহার করে:

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

// Import hourly predicted temperature image collection for northern winter
// solstice. Note that predictions extend for 384 hours; limit the collection
// to the first 24 hours.
var tempCol = ee.ImageCollection('NOAA/GFS0P25')
  .filterDate('2018-12-22', '2018-12-23')
  .limit(24)
  .select('temperature_2m_above_ground');

// Define visualization arguments to control the stretch and color gradient
// of the data.
var visArgs = {
  min: -40.0,
  max: 35.0,
  palette: ['blue', 'purple', 'cyan', 'green', 'yellow', 'red']
};

// Convert each image to an RGB visualization image by mapping the visualize
// function over the image collection using the arguments defined previously.
var tempColVis = tempCol.map(function(img) {
  return img.visualize(visArgs);
});

// Import country features and filter to South American countries.
var southAmCol = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
  .filterMetadata('wld_rgn', 'equals', 'South America');

// Define animation region (South America with buffer).
var southAmAoi = ee.Geometry.Rectangle({
  coords: [-103.6, -58.8, -18.4, 17.4], geodesic: false});

ওভারলে

blend Image পদ্ধতি ব্যবহার করে একাধিক ছবি ওভারলেড করা যেতে পারে যেখানে দুটি ছবির ওভারল্যাপিং পিক্সেল তাদের মাস্ক (অস্বচ্ছতার) উপর ভিত্তি করে মিশ্রিত করা হয়।

ভেক্টর ওভারলে

একটি ছবিতে প্রশাসনিক সীমানা বহুভুজ এবং অন্যান্য জ্যামিতি যোগ করা মূল্যবান স্থানিক প্রসঙ্গ প্রদান করতে পারে। উপরের বিশ্বব্যাপী দৈনিক পৃষ্ঠের তাপমাত্রা অ্যানিমেশন বিবেচনা করুন (চিত্র 3)। ভূমি এবং মহাসাগরের মধ্যে সীমানা কিছুটা স্পষ্ট, তবে দেশগুলির বহুভুজ ওভারলে যুক্ত করে সেগুলিকে স্পষ্ট করা যেতে পারে।

ভেক্টর ডেটা ( Features ) paint পদ্ধতি প্রয়োগ করে চিত্রগুলিতে আঁকা হয়। বৈশিষ্ট্যগুলি একটি বিদ্যমান ছবিতে আঁকা যেতে পারে, তবে ভাল অভ্যাস হল সেগুলিকে একটি ফাঁকা ছবিতে আঁকা, এটি স্টাইল করুন এবং তারপরে অন্যান্য স্টাইল করা চিত্র স্তরগুলির সাথে ফলাফলটি মিশ্রিত করুন। একটি ভিজ্যুয়ালাইজেশন স্ট্যাকের প্রতিটি স্তরকে স্বাধীনভাবে চিকিত্সা করা স্টাইলিং এর উপর আরো নিয়ন্ত্রণ প্রদান করে।

নিচের উদাহরণটি দেখায় যে দক্ষিণ আমেরিকার দেশের সীমানা একটি ফাঁকা Image আঁকা এবং ফলাফলকে বিশ্বব্যাপী দৈনিক তাপমাত্রা সংগ্রহের প্রতিটি Image সাথে মিশ্রিত করা (চিত্র 5)। আচ্ছাদিত দেশের সীমানা জল থেকে ভূমিকে আলাদা করে এবং তাপমাত্রার নিদর্শনগুলির প্রসঙ্গ প্রদান করে।

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

// Define an empty image to paint features to.
var empty = ee.Image().byte();

// Paint country feature edges to the empty image.
var southAmOutline = empty
  .paint({featureCollection: southAmCol, color: 1, width: 1})
  // Convert to an RGB visualization image; set line color to black.
  .visualize({palette: '000000'});

// Map a blend operation over the temperature collection to overlay the country
// border outline image on all collection images.
var tempColOutline = tempColVis.map(function(img) {
  return img.blend(southAmOutline);
});

// Define animation arguments.
var videoArgs = {
  dimensions: 768,
  region: southAmAoi,
  framesPerSecond: 7,
  crs: 'EPSG:3857'
};

// Display the animation.
print(ui.Thumbnail(tempColOutline, videoArgs));


চিত্র 5. স্থানিক প্রসঙ্গ প্রদান করতে একটি সংগ্রহে চিত্রগুলিতে ভেক্টর ওভারলে যুক্ত করুন।

ইমেজ ওভারলে

একটি পছন্দসই শৈলী অর্জনের জন্য বেশ কয়েকটি ছবি ওভারলেড করা যেতে পারে। ধরুন আপনি আগ্রহের একটি অঞ্চলের উপর জোর দিতে চান। আপনি একটি বেস লেয়ার হিসাবে একটি ইমেজ ভিজ্যুয়ালাইজেশনের একটি নিঃশব্দ কপি তৈরি করতে পারেন এবং তারপরে মূল ভিজ্যুয়ালাইজেশনের একটি ক্লিপ করা সংস্করণকে ওভারলে করতে পারেন। পূর্ববর্তী উদাহরণের উপর ভিত্তি করে, নিম্নলিখিত স্ক্রিপ্টটি চিত্র 6 তৈরি করে।

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

// Define an empty image to paint features to.
var empty = ee.Image().byte();

// Paint country feature edges to the empty image.
var southAmOutline = empty
  .paint({featureCollection: southAmCol, color: 1, width: 1})
  // Convert to an RGB visualization image; set line color to black.
  .visualize({palette: '000000'});

// Map a blend operation over the temperature collection to overlay the country
// border outline image on all collection images.
var tempColOutline = tempColVis.map(function(img) {
  return img.blend(southAmOutline);
});

// Define a partially opaque grey RGB image to dull the underlying image when
// blended as an overlay.
var dullLayer = ee.Image.constant(175).visualize({
  opacity: 0.6, min: 0, max: 255, forceRgbOutput: true});

// Map a two-part blending operation over the country outline temperature
// collection for final styling.
var finalVisCol = tempColOutline.map(function(img) {
  return img
    // Blend the dulling layer with the given country outline temperature image.
    .blend(dullLayer)
    // Blend a clipped copy of the country outline temperature image with the
    // dulled background image.
    .blend(img.clipToCollection(southAmCol));
});

// Define animation arguments.
var videoArgs = {
  dimensions: 768,
  region: southAmAoi,
  framesPerSecond: 7,
  crs: 'EPSG:3857'
};

// Display the animation.
print(ui.Thumbnail(finalVisCol, videoArgs));


চিত্র 6. ছবিটিকে ক্লিপ করে এবং একটি নিঃশব্দ অনুলিপিতে এটিকে ওভারলে করে আগ্রহের একটি এলাকায় জোর দিন।

আপনি ভূখণ্ড নির্দেশ করতে এবং ভিজ্যুয়ালাইজেশনকে কিছুটা গভীরতা দিতে একটি হিলশেড বেস লেয়ারের সাথে চিত্র ডেটা মিশ্রিত করতে পারেন (চিত্র 7)।

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

// Define a hillshade layer from SRTM digital elevation model.
var hillshade = ee.Terrain.hillshade(ee.Image('USGS/SRTMGL1_003')
  // Exaggerate the elevation to increase contrast in hillshade.
  .multiply(100))
  // Clip the DEM by South American boundary to clean boundary between
  // land and ocean.
  .clipToCollection(southAmCol);

// Map a blend operation over the temperature collection to overlay a partially
// opaque temperature layer on the hillshade layer.
var finalVisCol = tempColVis.map(function(img) {
  return hillshade
    .blend(img.clipToCollection(southAmCol).visualize({opacity: 0.6}));
});

// Define animation arguments.
var videoArgs = {
  dimensions: 768,
  region: southAmAoi,
  framesPerSecond: 7,
  crs: 'EPSG:3857'
};

// Display the animation.
print(ui.Thumbnail(finalVisCol, videoArgs));


চিত্র 7. পাহাড়ের ছায়া স্তরে আংশিকভাবে স্বচ্ছ চিত্র ডেটা ওভারলে করে ভূখণ্ড দেখান।

রূপান্তর

অ্যানিমেশন তৈরি করতে একটি চিত্র সংগ্রহ কাস্টমাইজ করুন যা ফেইড, ফ্লিকার এবং স্লাইড ট্রানজিশন ব্যবহার করে একটি সংগ্রহের মধ্যে দুটি চিত্রের মধ্যে পার্থক্য প্রকাশ করে৷ নিম্নলিখিত উদাহরণগুলির প্রত্যেকটি নিম্নলিখিত স্ক্রিপ্ট দ্বারা উত্পন্ন একই বেস ভিজ্যুয়ালাইজেশন ব্যবহার করে:

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

// Define an area of interest geometry with a global non-polar extent.
var aoi = ee.Geometry.Polygon(
  [[[-179.0, 78.0], [-179.0, -58.0], [179.0, -58.0], [179.0, 78.0]]], null,
  false);

// Import hourly predicted temperature image collection.
var temp = ee.ImageCollection('NOAA/GFS0P25')

// Define a northern summer solstice temperature image.
var summerSolTemp = temp
  .filterDate('2018-06-21', '2018-06-22')
  .filterMetadata('forecast_hours', 'equals', 12)
  .first()
  .select('temperature_2m_above_ground');

// Define a northern winter solstice temperature image.
var winterSolTemp = temp
  .filterDate('2018-12-22', '2018-12-23')
  .filterMetadata('forecast_hours', 'equals', 12)
  .first()
  .select('temperature_2m_above_ground');

// Combine the solstice images into a collection.
var tempCol = ee.ImageCollection([
  summerSolTemp.set('season', 'summer'),
  winterSolTemp.set('season', 'winter')
]);

// Import international boundaries feature collection.
var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');

// Define visualization arguments.
var visArgs = {
  min: -40.0,
  max: 35.0,
  palette: ['blue', 'purple', 'cyan', 'green', 'yellow', 'red']
};

// Convert the image data to RGB visualization images.
// The clip and unmask combination sets ocean pixels to black.
var tempColVis = tempCol.map(function(img) {
  return img
    .visualize(visArgs)
    .clipToCollection(countries)
    .unmask(0)
    .copyProperties(img, img.propertyNames());
});

ফ্লিকার

একটি সংগ্রহে শুধুমাত্র দুটি চিত্রের সাথে, যেমনটি এখানে রয়েছে, সংগ্রহ অ্যানিমেশনের উপর ফ্লিকার হল ডিফল্ট উপস্থাপনা৷ ফ্লিকার রেট গতি বাড়ানোর জন্য framesPerSecond অ্যানিমেশন আর্গুমেন্ট সামঞ্জস্য করুন। উপরের সংগ্রহে প্রয়োগ করা নিম্নলিখিত ভিজ্যুয়ালাইজেশন আর্গুমেন্টগুলি চিত্র 8 তৈরি করে।

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

// Define arguments for animation function parameters.
var videoArgs = {
  dimensions: 768,
  region: aoi,
  framesPerSecond: 2,
  crs: 'EPSG:3857'
};

// Display animation to the Code Editor console.
print(ui.Thumbnail(tempColVis, videoArgs));


চিত্র 8. উত্তর এবং শীতকালীন অয়নকালের জন্য 12pm GMT পৃষ্ঠের তাপমাত্রার মধ্যে ঝিকিমিকির উদাহরণ।

বিবর্ণ

দুটি স্তরের মধ্যে একটি ফেইড ট্রানজিশন একই সাথে একটি স্তরের অস্বচ্ছতা হ্রাস করার মাধ্যমে অর্জন করা হয় এবং অপরটির অস্বচ্ছতা 0 থেকে 1 এর কাছাকাছি বৃদ্ধির ক্রম অনুসারে অস্বচ্ছতা বৃদ্ধি করে (চিত্র 9)।

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

// Define a sequence of decreasing opacity increments. Note that opacity cannot
// be 0, so near 1 and 0 are used. Near 1 is needed because a compliment is
// calculated in a following step that can result in 0 if 1 is an element of the
// list.
var opacityList = ee.List.sequence({start: 0.99999, end: 0.00001, count: 20});

// Filter the summer and winter solstice images from the collection and set as
// image objects.
var summerImg = tempColVis.filter(ee.Filter.eq('season', 'summer')).first();
var winterImg = tempColVis.filter(ee.Filter.eq('season', 'winter')).first();

// Map over the list of opacity increments to iteratively adjust the opacity of
// the two solstice images. Returns a list of images.
var imgList = opacityList.map(function(opacity) {
  var opacityCompliment = ee.Number(1).subtract(ee.Number(opacity));
  var winterImgFade = winterImg.visualize({opacity: opacity});
  var summerImgFade = summerImg.visualize({opacity: opacityCompliment});
  return summerImgFade.blend(winterImgFade).set('opacity', opacity);
});

// Convert the image list to an image collection; the forward phase.
var fadeForward = ee.ImageCollection.fromImages(imgList);

// Make a copy of the collection that is sorted by ascending opacity to
// represent the reverse phase.
var fadeBackward = fadeForward.sort({property: 'opacity'});

// Merge the forward and reverse phase frame collections.
var fadeCol = fadeForward.merge(fadeBackward);

// Define animation arguments.
var videoArgs = {
  dimensions: 768,
  region: aoi,
  framesPerSecond: 25,
  crs: 'EPSG:3857'
};

// Display the animation.
print(ui.Thumbnail(fadeCol, videoArgs));


চিত্র 9. গ্রীষ্ম এবং শীতকালীন অয়নকালের জন্য 12pm GMT পৃষ্ঠের তাপমাত্রার মধ্যে বিবর্ণ হওয়ার উদাহরণ।

স্লাইডার

একটি স্লাইডার ট্রানজিশন ধীরে ধীরে অন্তর্নিহিত চিত্র স্তরটি দেখায় এবং লুকিয়ে রাখে। এটি দ্রাঘিমাংশের একটি পরিসর জুড়ে ওভারলাইং ইমেজের অস্বচ্ছতাকে পুনরাবৃত্তিমূলকভাবে সামঞ্জস্য করে অর্জন করা হয় (চিত্র 10)।

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

// Define a sequence of longitude increments. Start and end are defined by the
// min and max longitude of the feature to be provided to the region parameter
// of the animation arguments dictionary.
var lonSeq = ee.List.sequence({start: -179, end: 179, count: 20});

// Define a longitude image.
var longitude = ee.Image.pixelLonLat().select('longitude');

// Filter the summer and winter solstice images from the collection and set as
// image objects.
var summerImg = tempColVis.filter(ee.Filter.eq('season', 'summer')).first();
var winterImg = tempColVis.filter(ee.Filter.eq('season', 'winter')).first();

// Map over the list of longitude increments to iteratively adjust the mask
// (opacity) of the overlying image layer. Returns a list of images.
var imgList = lonSeq.map(function(lon) {
  lon = ee.Number(lon);
  var mask = longitude.gt(lon);
  return summerImg.blend(winterImg.updateMask(mask)).set('lon', lon);
});

// Convert the image list to an image collection; concealing phase.
var sliderColForward = ee.ImageCollection.fromImages(imgList);

// Make a copy of the collection that is sorted by descending longitude to
// represent the revealing phase.
var sliderColbackward = sliderColForward
  .sort({property: 'lon', ascending: false});

// Merge the forward and backward phase frame collections.
var sliderCol = sliderColForward.merge(sliderColbackward);

// Define animation arguments.
var videoArgs = {
  dimensions: 768,
  region: aoi,
  framesPerSecond: 25,
  crs: 'EPSG:3857'
};

// Display the animation.
print(ui.Thumbnail(sliderCol, videoArgs));


চিত্র 10. গ্রীষ্ম এবং শীতকালীন অয়নকালের জন্য 12pm GMT পৃষ্ঠের তাপমাত্রার মধ্যে একটি স্লাইডিং ট্রানজিশনের উদাহরণ।