縮放

如要解讀從 Earth Engine 取得的科學結果,就必須瞭解 Earth Engine 如何處理比例。這裡的「比例」指的是像素解析度。與其他 GIS 和影像處理平台不同,分析規模取決於輸出內容,而非輸入內容。具體來說,當您要求結果、要顯示的圖片或統計資料時,您會指定資料輸入分析的比例。如圖 1 所示。

金字塔
圖 1. 在 Earth Engine 中以圖形呈現圖片資料集。虛線代表用於匯總 4 個像素 2x2 區塊的金字塔政策。Earth Engine 會使用輸出內容指定的比例,判斷要用於輸入的圖像金字塔適當層級。

圖片金字塔

Earth Engine 中的圖像資產會以圖像金字塔的形式,以多種比例存在。金字塔政策 (圖 1 中以虛線表示) 會決定如何根據下一個較低層級的 2x2 像素區塊匯總結果,計算金字塔中特定層級的每個像素。對於連續值圖像,金字塔上層的像素值是下一層次像素的平均值。對於離散值圖片,金字塔上層的像素值是下一層次圖片的取樣值 (通常是左上方像素)。

圖像金字塔的最低層級代表擷取至 Earth Engine 時,原始解析度的圖像資料。在擷取期間,系統會根據金字塔政策匯總資料,以建立更高層級的金字塔。系統會匯總資料,直到整個圖片可放入 256x256 像素的圖塊為止。當您在程式碼中使用圖片時,Earth Engine 會選擇金字塔的某個層級,其縮放比例最接近且小於或等於分析作業指定的縮放比例,並視需要重新取樣 (預設使用最近鄰法)。

分析規模

Earth Engine 的分析規模取決於「拉取」的基礎。系統會根據輸出內容,決定要求運算作業輸入內容的規模。舉例來說,如果您在程式碼編輯器或 geemap 地圖元素中新增圖片,地圖的縮放等級會決定從圖片金字塔要求輸入內容的比例。如要執行其他運算,請將 scale 指定為引數。例如,使用 Landsat 圖像的 NIR 波段,其原始解析度為 30 公尺:

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

請參閱「 Python 環境」頁面,瞭解 Python API 和如何使用 geemap 進行互動式開發。

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

請注意,在本例中,固定位置 (圖片重心) 的像素值會因比例而異。這是因為不同比例會選取不同的金字塔層級。對於相似的比例,最鄰近重採樣結果會傳回相同的像素值。重要的是,變更比例時會要求不同的圖片輸入內容。

當您將圖片新增至地圖以進行視覺化時,Earth Engine 會根據縮放等級決定比例。請參考以下簡單範例,該範例只會顯示 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');

請參閱「 Python 環境」頁面,瞭解 Python API 和如何使用 geemap 進行互動式開發。

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

地圖會從最靠近原始解析度的縮放開始,讓您清楚看到原始解析度的像素。若縮放到足夠遠的距離,系統不會顯示相同的像素,而是會顯示圖像金字塔的較高層級。另外值得一提的是,程式碼編輯器和 geemap 地圖使用的是 maps mercator (EPSG:3857) 投影法,因此在顯示圖像金字塔之前,也需要重新投影。如要進一步瞭解 Earth Engine 如何處理投影,請參閱投影文件