Os eventos são acionados pela interação do usuário com um widget ou por uma mudança programática em um widget.  Para fazer algo quando o evento ocorrer, registre uma função de callback no
      widget com onClick() (para ui.Map ou
      ui.Button) ou onChange() (para todos os outros).  Também é possível
      especificar um callback no construtor.  Os parâmetros para callbacks de eventos variam
      de acordo com o widget e o tipo de evento.  Por exemplo, um ui.Textbox transmite
      o valor da string inserida no momento para as funções de callback do evento "click".  Verifique
      a referência da API na guia Docs para conferir o tipo de parâmetro transmitido para
      as funções de callback de cada widget.
O exemplo a seguir demonstra vários eventos originados de uma única ação do usuário de especificar uma imagem para exibição. Quando o usuário seleciona uma imagem, outro widget de seleção é atualizado com as faixas da imagem e exibe a primeira faixa no mapa:
Editor de código (JavaScript)
// 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);
Quando o usuário seleciona uma imagem, a lista de nomes de faixas da imagem é carregada
      no widget bandSelect, a primeira faixa é definida como o valor atual
      e a função onChange de bandSelect é acionada
      automaticamente.  Observe também o uso de evaluate() para receber de forma assíncrona o
      valor do ComputedObject retornado por bandNames().  Saiba mais na seção Eventos assíncronos.
Desfazer a escuta
O método unlisten() permite remover funções de callback
      registradas em um widget.  Isso é útil para evitar o acionamento de eventos que só devem
      ocorrer uma vez ou em determinadas circunstâncias.  O valor de retorno de onClick()
      ou onChange() é um ID que pode ser transmitido para unlisten() para
      fazer com que o widget pare de chamar a função.  Para cancelar o registro de todos os eventos ou de eventos de um tipo específico, chame unlisten() sem argumentos ou com um tipo de evento (por exemplo, 'click' ou 'change'), respectivamente.  O exemplo
      abaixo demonstra unlisten() para facilitar a abertura e o fechamento de um painel:
    
Editor de código (JavaScript)
// 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);
unlisten() é usado para impedir que Map detecte
      eventos de clique para fechar o painel quando ele já está fechado.
Eventos assíncronos
Se você usar um resultado do Earth Engine (como a saída numérica de uma redução) em um widget, será necessário extrair o valor do servidor.  Consulte esta página para saber mais sobre a diferença entre cliente e servidor no Earth Engine.  Para evitar que a interface inteira
      fique travada enquanto esse valor é calculado, use a função evaluate() para
      receber o valor de forma assíncrona.  A função evaluate() inicia uma solicitação
      para um valor e, quando o valor está pronto, chama uma função de callback para fazer algo
      com o resultado.  Por exemplo, considere um aplicativo para receber o valor médio de uma série temporal de NDVI em um ponto:
Editor de código (JavaScript)
// 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), })); }); });
Quando o usuário clica em um ponto no mapa, uma chamada reduceRegion() é acionada
      no servidor.  Essa operação pode levar algum tempo.  Para evitar que o aplicativo seja
      bloqueado enquanto o Earth Engine está computando, este exemplo registra uma função de callback
      no resultado, especificamente computedValue.evaluate().  Quando o cálculo
      terminar, o resultado será exibido.  Enquanto isso, uma mensagem é exibida para indicar que a computação está em andamento.