圖片珍藏內容

圖像集是指一組 Earth Engine 圖像。舉例來說,所有 Landsat 8 影像的集合就是 ee.ImageCollection。與您使用的 SRTM 圖片一樣,圖片集也有 ID。與單一圖片一樣,您可以從程式碼編輯器搜尋 Earth Engine 資料目錄,然後查看資料集的詳細資料頁面,找出影像集合的 ID。舉例來說,搜尋「landsat 8 toa」,然後按一下第一個結果,這應該對應到 USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance 資料集。 使用「匯入」按鈕匯入該資料集,並將其重新命名為 l8,或將 ID 複製到圖片集合建構函式中:

程式碼編輯器 (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

篩選圖片集

請注意,這個集合代表所有收集到的 Landsat 8 影像,涵蓋全球各地。通常會擷取單一圖片或圖片子集,用來測試演算法。如要依時間或空間限制收藏內容,請進行篩選。舉例來說,如要將集合篩選為涵蓋特定位置的圖片,請先使用幾何圖形繪製工具,以點 (或線或多邊形) 定義感興趣的區域。平移至感興趣的區域,將滑鼠游標懸停在「幾何圖形匯入」 (如果您已定義一或多個幾何圖形),然後按一下「+ 新增圖層」 (如果您沒有任何匯入項目,請前往下一個步驟)。取得點繪製工具 (),並在感興趣的區域中繪製點。為匯入作業命名 point。現在,請篩選 l8 集合,取得與該點相交的圖片,然後新增第二個篩選器,將集合限制為僅包含 2015 年取得的圖片:

程式碼編輯器 (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

其中 filterBounds()filterDate() 是圖像集合上更通用的 filter() 方法的捷徑方法,會將 ee.Filter() 做為引數。如要進一步瞭解這些方法,請查看程式碼編輯器的「文件」分頁。filterBounds() 的引數是您數位化的點,filterDate() 的引數則是兩個以字串表示的日期。

請注意,您可以print()篩選後的集合。一次最多只能列印 5,000 個項目,因此無法列印整個「l8」收藏。執行 print() 方法後,您可以在控制台中檢查列印的集合。請注意,使用 zippy () 展開 ImageCollection,然後展開 features 清單時,您會看到圖片清單,每張圖片也都可以展開並檢查。這是找出個別圖片 ID 的其中一種方法。此外,您也可以透過程式輔助方式取得個別圖片進行分析,方法是排序集合,以取得相對於某些中繼資料屬性的最新、最舊或最佳圖片。舉例來說,檢查列印圖片集合中的圖片物件時,您可能會發現名為 CLOUD_COVER 的中繼資料屬性。您可以使用這項屬性,在感興趣的區域中取得 2015 年雲量最少的圖像:

程式碼編輯器 (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

現在可以顯示圖片了!

離題:顯示 RGB 圖片

將多波段影像新增至地圖時,Earth Engine 會選擇影像的前三個波段,並預設以紅色、綠色和藍色顯示,然後根據資料類型延展這些波段,如先前所述。通常這不會有作用。舉例來說,如果您將 Landsat 圖片 (上例中的 scene) 新增至地圖,結果會不盡理想:

程式碼編輯器 (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

請注意,地圖一開始會以縮放比例 9 為中心顯示圖片。然後,系統會顯示圖片,並針對 visParams 參數提供空白物件 ({}) (詳情請參閱 Map.addLayer() 文件)。因此,系統會以預設的視覺化效果顯示圖片:前三個頻帶分別對應 R、G、B,並因頻帶為 float 資料型別而延展至 [0, 1]。這表示沿海氣膠波段 (「B1」) 會以紅色算繪、藍色波段 (「B2」) 會以綠色算繪,而綠色波段 (「B3」) 則會以藍色算繪。如要將影像算繪為真實色彩合成影像,您需要告訴 Earth Engine 分別使用 Landsat 8 波段「B4」、「B3」和「B2」做為 R、G 和 B。使用 visParams 物件的 bands 屬性,指定要使用的頻帶。如要進一步瞭解 Landsat 波段,請參閱這份參考資料

您也需要提供適合顯示一般地球表面目標反射率的 minmax 值。雖然清單可用於為每個頻帶指定不同值,但這裡只要指定 0.3max,並將 min 參數的預設值設為零即可。將視覺化參數合併為一個物件並顯示:

程式碼編輯器 (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

結果應如圖 5 所示。請注意,這段程式碼會將視覺化參數物件指派給變數,以供日後使用。您很快就會發現,這個物件在視覺化呈現圖片集合時非常實用!

Tutorial_api_05_true_color.png
圖 5:Landsat 8 TOA 反射率影像,以真實色彩合成,並延展至 [0, 0.3]。

嘗試以不同波段呈現影像。另一個常用的組合是「B5」、「B4」和「B3」,稱為假色合成。如要瞭解其他有趣的假色合成影像,請參閱這篇文章

由於 Earth Engine 的設計宗旨是進行大規模分析,因此您不限於只能處理一個場景。現在,您可以將整個集合顯示為 RGB 合成影像!

顯示圖片集

在地圖上新增圖像集,與在地圖上新增圖像類似。舉例來說,使用 l8 集合中的 2016 年圖片和先前定義的 visParams 物件,

程式碼編輯器 (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

請注意,現在你可以縮小畫面,查看 Landsat 影像的連續鑲嵌畫面 (即陸地)。此外,請注意,使用「檢查器」分頁並點選圖片時,您會在「像素」部分看到像素值清單 (或圖表),並在檢查器的「物件」部分看到圖片物件清單。

如果縮小到一定程度,您可能會發現馬賽克中有一些雲朵。將 ImageCollection 新增至地圖時,系統會將其顯示為最近值複合項,也就是只顯示最近的像素 (例如對集合呼叫 mosaic())。因此,您可能會看到在不同時間取得的路徑之間出現不連續的情況。這也是許多區域可能呈現多雲的原因。在下一頁中,瞭解如何變更圖片的合成方式,擺脫這些惱人的雲朵!