了解 Earth Engine 如何处理比例对于解读从 Earth Engine 获取的科学结果至关重要。在这里,比例是指像素分辨率。与其他 GIS 和图像处理平台不同,分析规模取决于输出,而不是输入。具体而言,当您请求获取结果、要显示的图片或统计信息时,您需要指定将数据输入分析的比例。此概念如图 1 所示。

图片金字塔
Earth Engine 中的图片资产以多种尺度存在于图片金字塔中。 金字塔政策(在图 1 中用虚线表示)决定了如何根据下一级更低级别的 2x2 像素块的汇总来计算金字塔给定级别的每个像素。对于连续值图像,金字塔上层的像素值是下一个较低层级像素的平均值。对于离散值图像,金字塔上层的像素值是下一个较低层像素的样本(通常是左上角像素)。
图片金字塔的最低级表示在将图片数据提取到 Earth Engine 时,图片数据的原始分辨率。在提取过程中,系统会(根据金字塔政策)汇总数据,以创建更高级别的金字塔。系统会对数据进行汇总,直到整个图片都适合放入 256x256 像素的图块中。当您在代码中使用图片时,Earth Engine 会选择与分析中指定的比例最接近且不大于该比例的金字塔级别,并根据需要重新采样(默认使用最近邻方法)。
分析规模
Earth Engine 中的分析规模是根据“拉取”方式确定的。请求计算输入的比例取决于输出。例如,如果您向 Code Editor 或 geemap 地图元素添加图片,地图的缩放级别将决定从图片金字塔请求输入的比例。对于其他计算,您可以将 scale
指定为实参。例如,使用具有 30 米原生分辨率的 Landsat 图像的 NIR 波段:
Code Editor (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
请注意,在此示例中,固定位置(图像重心)的像素值会因缩放而异。这是因为,对于不同的规模,选择的金字塔级别不同。对于类似的缩放比例,最近邻重新采样会导致返回相同的像素值。重要的是,通过调整缩放比例,系统会请求不同的图片输入。
当您通过将图像添加到地图来直观呈现图像时,Earth Engine 会根据缩放级别确定比例。请考虑以下简单示例,该示例仅显示 Landsat 图像:
Code Editor (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
地图开始全屏放大,以便原生分辨率像素清晰可见。缩小到足够远的程度后,系统不会显示相同的像素,而是会显示图像金字塔的更高级别。另请注意,代码编辑器和 geemap 地图使用 maps mercator (EPSG:3857) 投影,因此在显示之前,还需要重新投影图片金字塔的适当级别。如需详细了解 Earth Engine 如何处理投影,请参阅“投影”文档。