ইভেন্ট

ইভেন্টগুলি একটি উইজেটের সাথে ব্যবহারকারীর মিথস্ক্রিয়া বা একটি উইজেটে একটি প্রোগ্রাম্যাটিক পরিবর্তনের মাধ্যমে বহিস্কার করা হয়। ঘটনা ঘটলে কিছু করার জন্য, উইজেটে একটি কলব্যাক ফাংশন নিবন্ধন করুন onClick() ( ui.Map বা ui.Button এর জন্য) অথবা onChange() (অন্য সবকিছু) দিয়ে। আপনি কনস্ট্রাক্টরে একটি কলব্যাকও নির্দিষ্ট করতে পারেন। ইভেন্ট কলব্যাকের পরামিতিগুলি উইজেট এবং ইভেন্টের প্রকারের উপর নির্ভর করে পরিবর্তিত হয়। উদাহরণস্বরূপ, একটি ui.Textbox তার 'ক্লিক' ইভেন্ট কলব্যাক ফাংশনে বর্তমানে প্রবেশ করা স্ট্রিং মান পাস করে। প্রতিটি উইজেটের কলব্যাক ফাংশনে পাস করা প্যারামিটারের প্রকারের জন্য ডক্স ট্যাবে API রেফারেন্স পরীক্ষা করুন।

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

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

// Load some images.
var dem = ee.Image('NASA/NASADEM_HGT/001');
var veg = ee.Image('NOAA/VIIRS/001/VNP13A1/2022_06_02')
  .select(['EVI', 'EVI2', 'NDVI']);

// Make a drop-down menu of bands.
var bandSelect = ui.Select({
  placeholder: 'Select a band...',
  onChange: function(value) {
    var layer = ui.Map.Layer(imageSelect.getValue().select(value));
    // Use set() instead of add() so the previous layer (if any) is overwritten.
    Map.layers().set(0, layer);
  }
});

// Make a drop down menu of images.
var imageSelect = ui.Select({
  items: [
    {label: 'NASADEM', value: dem},
    {label: 'VIIRS Veg', value: veg}
  ],
  placeholder: 'Select an image...',
  onChange: function(value) {
    // Asynchronously get the list of band names.
    value.bandNames().evaluate(function(bands) {
      // Display the bands of the selected image.
      bandSelect.items().reset(bands);
      // Set the first band to the selected band.
      bandSelect.setValue(bandSelect.items().get(0));
    });
  }
});

print(imageSelect);
print(bandSelect);

নোট করুন যে ব্যবহারকারী যখন একটি ছবি নির্বাচন করেন, তখন ছবির ব্যান্ড নামের তালিকাটি bandSelect উইজেটে লোড হয়, প্রথম ব্যান্ডটি বর্তমান মান সেট করা হয় এবং bandSelect onChange ফাংশনটি স্বয়ংক্রিয়ভাবে চালু হয়। bandNames() দ্বারা প্রত্যাবর্তিত ComputedObject এর মান অ্যাসিঙ্ক্রোনাসভাবে পেতে evaluate() এর ব্যবহারও নোট করুন। অ্যাসিঙ্ক্রোনাস ইভেন্ট বিভাগে আরও জানুন।

শোনা যাচ্ছে না

unlisten() পদ্ধতি একটি উইজেটে নিবন্ধিত কলব্যাক ফাংশন অপসারণ করার ক্ষমতা প্রদান করে। এটি ট্রিগারিং ইভেন্টগুলি প্রতিরোধ করতে কার্যকর যা শুধুমাত্র একবার বা নির্দিষ্ট পরিস্থিতিতে ঘটতে হবে। onClick() বা onChange() এর রিটার্ন মান হল একটি আইডি যা unlisten() এ পাস করা যেতে পারে যাতে উইজেট ফাংশনটি কল করা বন্ধ করে দেয়। একটি নির্দিষ্ট ধরণের সমস্ত ইভেন্ট বা ইভেন্ট নিবন্ধনমুক্ত করতে, যথাক্রমে unlisten() কোন আর্গুমেন্ট বা একটি ইভেন্ট টাইপ (যেমন 'click' বা 'change' ) আর্গুমেন্ট ছাড়া কল করুন। নিম্নলিখিত উদাহরণটি একটি প্যানেল খোলা এবং বন্ধ করার সুবিধার্থে unlisten() প্রদর্শন করে:

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

// Create a panel, initially hidden.
var panel = ui.Panel({
  style: {
    width: '400px',
    shown: false
  },
  widgets: [
    ui.Label('Click on the map to collapse the settings panel.')
  ]
});

// Create a button to unhide the panel.
var button = ui.Button({
  label: 'Open settings',
  onClick: function() {
    // Hide the button.
    button.style().set('shown', false);
    // Display the panel.
    panel.style().set('shown', true);

    // Temporarily make a map click hide the panel
    // and show the button.
    var listenerId = Map.onClick(function() {
      panel.style().set('shown', false);
      button.style().set('shown', true);
      // Once the panel is hidden, the map should not
      // try to close it by listening for clicks.
      Map.unlisten(listenerId);
    });
  }
});

// Add the button to the map and the panel to root.
Map.add(button);
ui.root.insert(0, panel);

লক্ষ্য করুন যে প্যানেলটি ইতিমধ্যে বন্ধ হয়ে গেলে প্যানেলটি বন্ধ করতে ক্লিক ইভেন্টগুলির জন্য Map শোনা থেকে থামাতে unlisten() ব্যবহার করা হয়।

অ্যাসিঙ্ক্রোনাস ইভেন্ট

আপনি যদি একটি উইজেটে আর্থ ইঞ্জিনের ফলাফল (যেমন একটি হ্রাস থেকে সংখ্যাসূচক আউটপুট) ব্যবহার করেন, তাহলে আপনাকে সার্ভার থেকে মান পেতে হবে। (আর্থ ইঞ্জিনে ক্লায়েন্ট বনাম সার্ভার সম্পর্কে বিশদ বিবরণের জন্য এই পৃষ্ঠাটি দেখুন)। সেই মানটি গণনা করার সময় সমগ্র UI হ্যাং করা থেকে বিরত রাখতে, আপনি মানটি অ্যাসিঙ্ক্রোনাসভাবে পেতে evaluate() ফাংশন ব্যবহার করতে পারেন। evaluate() ফাংশনটি একটি মানের জন্য একটি অনুরোধ শুরু করে এবং যখন মানটি প্রস্তুত হয় তখন ফলাফলের সাথে কিছু করার জন্য একটি কলব্যাক ফাংশন কল করে। উদাহরণস্বরূপ, একটি বিন্দুতে একটি NDVI সময় সিরিজের গড় মান পেতে একটি অ্যাপ্লিকেশন বিবেচনা করুন:

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

// Load and display an NDVI image.
var ndvi = ee.ImageCollection('LANDSAT/COMPOSITES/C02/T1_L2_8DAY_NDVI')
    .filterDate('2014-01-01', '2015-01-01');
var vis = {min: 0, max: 1, palette: ['99c199', '006400']};
Map.addLayer(ndvi.median(), vis, 'NDVI');

// Configure the map.
Map.setCenter(-94.84497, 39.01918, 8);
Map.style().set('cursor', 'crosshair');

// Create a panel and add it to the map.
var inspector = ui.Panel([ui.Label('Click to get mean NDVI')]);
Map.add(inspector);

Map.onClick(function(coords) {
  // Show the loading label.
  inspector.widgets().set(0, ui.Label({
    value: 'Loading...',
    style: {color: 'gray'}
  }));

  // Determine the mean NDVI, a long-running server operation.
  var point = ee.Geometry.Point(coords.lon, coords.lat);
  var meanNdvi = ndvi.reduce('mean');
  var sample = meanNdvi.sample(point, 30);
  var computedValue = sample.first().get('NDVI_mean');

  // Request the value from the server.
  computedValue.evaluate(function(result) {
    // When the server returns the value, show it.
    inspector.widgets().set(0, ui.Label({
      value: 'Mean NDVI: ' + result.toFixed(2),
    }));
  });
});

যখন ব্যবহারকারী এই মানচিত্রে একটি পয়েন্টে ক্লিক করেন, তখন সার্ভারে একটি reduceRegion() কল ট্রিগার হয়। এই অপারেশন কিছু সময় লাগতে পারে. আর্থ ইঞ্জিন কম্পিউট করার সময় অ্যাপ্লিকেশনটিকে ব্লক করা থেকে আটকাতে, এই উদাহরণটি ফলাফলে একটি কলব্যাক ফাংশন নিবন্ধন করে, বিশেষভাবে computedValue.evaluate() । গণনা শেষ হলে, ফলাফল প্রদর্শিত হয়। ইতিমধ্যে, গণনা চলছে তা নির্দেশ করার জন্য একটি বার্তা প্রদর্শিত হয়।