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