先前您已瞭解如何取得個別 Landsat 場景,例如:
其中 l8
和 point
是代表 Landsat 8 TOA 集合和感興趣區域幾何的匯入項目:
程式碼編輯器 (JavaScript)
// Define a point of interest. Use the UI Drawing Tools to import a point // geometry and name it "point" or set the point coordinates with the // ee.Geometry.Point() function as demonstrated here. var point = ee.Geometry.Point([-122.292, 37.9018]); // Import the Landsat 8 TOA image collection. var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); // Get the least cloudy image in 2015. var image = ee.Image( l8.filterBounds(point) .filterDate('2015-01-01', '2015-12-31') .sort('CLOUD_COVER') .first() );
假設您現在要從 Landsat 影像計算常態化差異植被指數 (NDVI) 影像。植被會反射電磁波譜中近紅外線 (NIR) 部分的光線,並吸收紅色部分的光線 (進一步瞭解植被的 NIR 反射率)。NDVI 會使用這項資訊建立單一值,大致反映像素發生的光合作用活動。計算公式為 (NIR - red) / (NIR + red)。這會產生介於 1 和 -1 之間的數字,其中光合作用活動高的像素具有高 NDVI。以下是在 Earth Engine 中計算 NDVI 的其中一種方式:
程式碼編輯器 (JavaScript)
// Compute the Normalized Difference Vegetation Index (NDVI). var nir = image.select('B5'); var red = image.select('B4'); var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI'); // Display the result. Map.centerObject(image, 9); var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']}; Map.addLayer(ndvi, ndviParams, 'NDVI image');
結果應如圖 8 所示。請注意,我們會使用select()
您在前一節遮罩中學到的函式取得近紅外線和紅外線波段,然後使用您也在Image
數學一節中看過的圖片數學運算子計算 NDVI。最後,使用調色盤顯示圖片。這裡我們在調色盤中使用顏色名稱,而非十六進位字串。(詳情請參閱這份外部參考資料)。

正規化差異運算在遙測領域非常常見,因此 ee.Image
上有捷徑函式,可簡化上一個範例中的程式碼:
程式碼編輯器 (JavaScript)
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
將函式對應至集合
現在假設您想將 NDVI 新增至圖像集合中的每張圖像。在 Earth Engine 中,您可以使用 map()
函式處理集合。請勿將 map()
與 Map
物件混淆。前者是集合的方法,並以平行運算的意義使用 map,將函式套用至集合中的每個元素。這個函式會定義要套用至集合中每個元素的操作。您已在 JavaScript 教學課程中看過簡單函式,但現在我們要建立包含 Earth Engine 功能的函式。舉例來說,將先前的 NDVI 程式碼複製到函式中,並傳回含有 NDVI 頻帶的輸入圖片:
程式碼編輯器 (JavaScript)
var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; // Test the addNDVI function on a single image. var ndvi = addNDVI(image).select('NDVI');
這個程式碼可能無法有效計算單一圖片的 NDVI,但這個函式可用做 map()
的引數,將 NDVI 頻帶新增至集合中的每張圖片。通常先在單一圖片上測試函式,確認函式是否如預期運作,是很有用的做法。測試個別圖片上的函式,確認函式符合需求後,即可將函式對應至集合:
程式碼編輯器 (JavaScript)
var withNDVI = l8.map(addNDVI);
如要確認這確實是將 NDVI 頻帶放入這個集合中的每張圖片,您可以將 withNDVI
集合新增至地圖,並使用「檢查器」分頁查詢隨機位置。您應該會發現,集合中的每張圖片現在都有一個名為 NDVI
的樂團。
製作最綠的像素合成影像
現在您已建立圖片集合,其中每張圖片都有 NDVI 頻帶,我們可以探索製作合成圖片的新方法:qualityMosaic()
。 您可能已注意到,即使是中位數像素合成影像,Landsat 路徑之間仍有不連續性。部分原因可能是相鄰路徑的圖像是在不同時間 (具體來說是間隔 8 天) 收集,導致物候差異。如要盡量減少這類影響,可以嘗試在複合影像中,設定大致處於相同物候階段的像素值,例如植物最綠的時期 (葉子生長且光合作用活躍)。如果我們允許以 NDVI 最大值定義最大綠度,就可以使用 qualityMosaic()
製作複合影像,其中每個像素都包含集合中的 NDVI 最大像素。現在您可以在 withNDVI
集合中使用新增的 NDVI 頻帶:
程式碼編輯器 (JavaScript)
// Make a "greenest" pixel composite. var greenest = withNDVI.qualityMosaic('NDVI'); // Display the result. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; Map.addLayer(greenest, visParams, 'Greenest pixel composite');
這段程式碼的結果應類似圖 9。比較圖 9 與圖 6 中顯示的中位數複合,可發現最綠色的像素複合確實更綠。不過,仔細檢查水體後,應該會發現不同的問題。具體來說,水體現在會呈現多雲狀態。這是因為 qualityMosaic()
方法的運作方式:系統會檢查每個位置的整個時間序列,並將 NDVI 頻帶中具有最大值的像素設為合成值。由於雲層的 NDVI 高於水,因此水域會出現多雲像素,而植被區域則會呈現綠色,因為當像素中的植被處於光合作用活躍狀態時,NDVI 最高。

您已瞭解在 Earth Engine 中組合及拼接圖片的幾種方式。你可以根據時間和地點篩選圖片,或是使用集合中的所有圖片,製作近期值、中位數或最綠像素的合成圖片。您已學會如何對影像執行運算,以及如何擷取資訊。下一頁將介紹如何從 Earth Engine 取得資訊,例如圖表或匯出至 Google 雲端硬碟資料夾的資料集。