Escala

Comprender cómo Earth Engine controla la escala es fundamental para interpretar los resultados científicos obtenidos de Earth Engine. Aquí, escala se refiere a la resolución de píxeles. A diferencia de otras plataformas de procesamiento de imágenes y SIG, la escala de análisis se determina a partir del resultado, en lugar de la entrada. Específicamente, cuando haces una solicitud de resultados, una imagen para mostrar o una estadística, por ejemplo, especificas la escala a la que se ingresan los datos en el análisis. Este concepto se ilustra en la Figura 1.

pirámides
Figura 1: Representación gráfica de un conjunto de datos de imágenes en Earth Engine. Las líneas discontinuas representan la política de piramidización para agregar bloques de 2 × 2 de 4 píxeles. Earth Engine usa la escala especificada por el resultado para determinar el nivel adecuado de la pirámide de imágenes que se usará como entrada.

Pirámides de imágenes

Los recursos de imagen en Earth Engine existen en varias escalas, en pirámides de imágenes. La política de piramidización (representada por líneas discontinuas en la Figura 1) determina cómo se calcula cada píxel en un nivel determinado de la pirámide a partir de la agregación de un bloque de píxeles de 2 × 2 en el nivel inferior. En el caso de las imágenes con valores continuos, los valores de píxeles de los niveles superiores de la pirámide son la media de los píxeles del siguiente nivel inferior. En el caso de las imágenes con valores discretos, los valores de píxeles de los niveles superiores de la pirámide son una muestra (por lo general, el píxel superior izquierdo) de los píxeles del siguiente nivel inferior.

El nivel más bajo de la pirámide de imágenes representa los datos de imagen con resolución nativa cuando se transfieren a Earth Engine. Durante la transferencia, los datos se agregan (según la política de piramidización) para crear niveles de pirámide más altos. Los datos se agregan hasta que la imagen completa cabe en una tarjeta de 256 x 256 píxeles. Cuando usas una imagen en tu código, Earth Engine elige un nivel de la pirámide con la escala más cercana inferior o igual a la escala especificada por tu análisis y vuelve a muestrear (con el vecino más cercano de forma predeterminada) según sea necesario.

Escala de análisis

La escala de análisis en Earth Engine se determina de forma "inductiva". La escala a la que se deben solicitar entradas para un procesamiento se determina a partir del resultado. Por ejemplo, si agregas una imagen al editor de código o al elemento de mapa de geemap, el nivel de zoom del mapa determina la escala a la que se solicitan las entradas de la pirámide de imágenes. Para otros cálculos, debes especificar scale como argumento. Por ejemplo, con la banda NIR de una imagen de Landsat, que tiene una resolución nativa de 30 metros:

var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select('B4');

var printAtScale = function(scale) {
  print('Pixel value at '+scale+' meters scale',
    image.reduceRegion({
      reducer: ee.Reducer.first(),
      geometry: image.geometry().centroid(),
      // The scale determines the pyramid level from which to pull the input
      scale: scale
  }).get('B4'));
};

printAtScale(10); // 0.10394100844860077
printAtScale(30); // 0.10394100844860077
printAtScale(50); // 0.09130698442459106
printAtScale(70); // 0.1150854229927063
printAtScale(200); // 0.102478988468647
printAtScale(500); // 0.09072770178318024

Consulta la página Entorno de Python para obtener información sobre la API de Python y el uso de geemap para el desarrollo interactivo.

import ee
import geemap.core as geemap
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select('B4')


def print_at_scale(scale):
  display(
      f'Pixel value at {scale} meters scale',
      image.reduceRegion(
          reducer=ee.Reducer.first(),
          geometry=image.geometry().centroid(),
          # The scale determines the pyramid level from which to pull the input
          scale=scale,
      ).get('B4'),
  )


print_at_scale(10)  # 0.10394100844860077
print_at_scale(30)  # 0.10394100844860077
print_at_scale(50)  # 0.09130698442459106
print_at_scale(70)  # 0.1150854229927063
print_at_scale(200)  # 0.102478988468647
print_at_scale(500)  # 0.09072770178318024

En este ejemplo, observa que el valor de píxeles en una ubicación constante (el centroide de la imagen) varía según la escala. Esto se debe a que se seleccionan diferentes niveles de pirámide para diferentes escalas. Para escalas similares, el remuestreo del vecino más cercano muestra el mismo valor de píxeles. El punto importante es que, al variar la escala, se solicitan diferentes entradas de imagen.

Cuando visualizas una imagen agregándola al mapa, Earth Engine determina la escala según el nivel de zoom. Considera el siguiente ejemplo simple, que solo muestra una imagen de Landsat:

var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');
Map.centerObject(image, 17);
Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.35}, 'image');

Consulta la página Entorno de Python para obtener información sobre la API de Python y el uso de geemap para el desarrollo interactivo.

import ee
import geemap.core as geemap
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')
m = geemap.Map()
m.center_object(image, 17)
m.add_layer(image, {'bands': ['B4', 'B3', 'B2'], 'max': 0.35}, 'image')
m

El mapa comienza con el zoom al máximo, de modo que los píxeles de resolución nativa se vean con claridad. Si alejas la imagen lo suficiente, no se mostrarán los mismos píxeles, sino niveles más altos de la pirámide de imágenes. También vale la pena señalar que el Editor de código y los mapas de geemap usan la proyección maps mercator (EPSG:3857), por lo que el nivel adecuado de la pirámide de imágenes también debe volver a proyectarse antes de mostrarse. Obtén más información sobre cómo Earth Engine maneja las proyecciones en el documento de proyecciones.