Escala

Entender como o Earth Engine lida com a escala é fundamental para interpretar os resultados científicos obtidos com ele. Aqui, "escala" significa resolução de pixels. Ao contrário de outras plataformas de SIG e processamento de imagens, a escala da análise é determinada pela saída, e não pela entrada. Especificamente, quando você faz uma solicitação de resultados, uma imagem a ser exibida ou uma estatística, por exemplo, você especifica a escala em que os dados são inseridos na análise. Esse conceito é ilustrado na Figura 1.

pirâmides
Figura 1. Uma representação gráfica de um conjunto de dados de imagens no Earth Engine. As linhas tracejadas representam a política de pirâmide para agregar blocos de 2 x 2 de 4 pixels. O Engine da Earth usa a escala especificada pela saída para determinar o nível adequado da pirâmide de imagens a ser usado como entrada.

Pirâmides de imagens

Os recursos de imagem no Earth Engine existem em várias escalas, em pirâmides de imagens. A política de pirâmide (representada por linhas tracejadas na Figura 1) determina como cada pixel em um determinado nível da pirâmide é calculado a partir da agregação de um bloco de 2x2 de pixels no nível abaixo. Para imagens com valores contínuos, os valores de pixel dos níveis superiores da pirâmide são a média dos pixels do próximo nível inferior. Para imagens com valores discretos, os valores de pixel dos níveis superiores da pirâmide são uma amostra (geralmente o pixel superior esquerdo) de pixels no próximo nível inferior.

O nível mais baixo da pirâmide de imagens representa os dados da imagem na resolução nativa, quando ela é transferida para o Earth Engine. Durante a transferência, os dados são agregados (de acordo com a política de pirâmide) para criar níveis mais altos. Os dados são agregados até que a imagem inteira caiba em um bloco de 256 x 256 pixels. Quando você usa uma imagem no código, o Earth Engine escolhe um nível da pirâmide com a escala mais próxima menor ou igual à especificada pela análise e faz novas amostragens (usando o vizinho mais próximo por padrão) conforme necessário.

Escala de análise

A escala da análise no Earth Engine é determinada por "pull". A escala em que as entradas de uma computação são solicitadas é determinada pela saída. Por exemplo, se você adicionar uma imagem ao editor de código ou ao elemento de mapa do geemap, o nível de zoom do mapa vai determinar a escala em que as entradas são solicitadas da pirâmide de imagens. Para outras computações, especifique scale como um argumento. Por exemplo, usando a banda NIR de uma imagem Landsat, que tem resolução nativa de 30 metros:

Editor de código (JavaScript)

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

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap

Colab (Python)

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

Neste exemplo, o valor do pixel em um local constante (o centroide da imagem) varia de acordo com a escala. Isso ocorre porque diferentes níveis da pirâmide são selecionados para diferentes escalas. Para escalas semelhantes, a reamostragem de vizinho mais próximo resulta no mesmo valor de pixel sendo retornado. O ponto importante é que, ao variar a escala, diferentes entradas de imagem são solicitadas.

Quando você visualiza uma imagem adicionando-a ao mapa, o Earth Engine determina a escala com base no nível de zoom. Considere o exemplo simples a seguir, que mostra uma imagem do Landsat:

Editor de código (JavaScript)

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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap

Colab (Python)

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

O mapa começa com o zoom máximo, de modo que os pixels da resolução nativa fiquem claramente visíveis. O zoom out não vai mostrar os mesmos pixels, mas vai mostrar níveis mais altos da pirâmide de imagens. Também é importante observar que o editor de código e os mapas do geemap usam a projeção maps mercator (EPSG:3857). Portanto, o nível adequado da pirâmide de imagens também precisa ser reprojetado antes da exibição. Saiba mais sobre como o Earth Engine processa as projeções no documento de projeções.