圖片珍藏內容

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

程式碼編輯器 (JavaScript)

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

篩選圖片珍藏內容

值得注意的是,這個集合代表全球收集到的所有 Landsat 8 景象。通常,擷取單一圖片或圖片子集來測試演算法,會很有幫助。如要依時間或空間限制集合,請篩選集合。舉例來說,如要篩選涵蓋特定位置的圖片,請先使用幾何圖形繪圖工具,以點 (或線條或多邊形) 定義感興趣的區域。平移至感興趣的區域,將滑鼠游標懸停在「Geometry Imports」 (如果您已定義一或多個幾何圖形),然後按一下「+new layer」 (如果沒有任何匯入項目,請前往下一個步驟)。取得點繪圖工具 (),並在感興趣的區域中建立點。將匯入作業命名為 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() 做為引數。如要進一步瞭解這些方法,請前往程式碼編輯器的「Docs」(文件) 分頁。filterBounds() 的引數是您數位化的點,filterDate() 的引數則是兩個日期,以字串表示。

請注意,您可以print()篩選後的珍藏內容。您一次最多只能列印 5000 個項目,因此無法列印整個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,並延伸至 [0, 1],因為波段是 float 資料類型。這表示沿海氣溶膠波段 (「B1」) 會以紅色顯示,藍色波段 (「B2」) 會以綠色顯示,綠色波段 (「B3」) 則會以藍色顯示。如要將圖片算繪為真實色彩合成,您必須指示 Earth Engine 分別使用 Landsat 8 波段「B4」、「B3」和「B2」做為 R、G 和 B。使用 visParams 物件的 bands 屬性,指定要使用的頻帶。如要進一步瞭解 Landsat 波段,請參閱這份參考資料。

您也必須提供適合顯示一般地球表面目標反射率的 min 和 max 值。雖然清單可用於為每個波段指定不同的值,但這裡只要將 0.3 指定為 max,並使用 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 圖像收集位置 (即陸地上) 的連續馬賽克。另請注意,當您使用「Inspector」分頁並點選圖片時,系統會在檢查器的「Pixels」部分顯示像素值清單 (或圖表),並在「Objects」部分顯示圖片物件清單。

如果縮小到一定程度,你可能會注意到鑲嵌圖中有一些雲。將 ImageCollection 新增至地圖時,系統會顯示為近期值複合,也就是只顯示最近的像素 (例如在集合上呼叫 mosaic())。因此,在不同時間取得的路徑之間,可能會出現不連續的情況。這也是許多區域看起來多雲的原因。在下一頁中,您將瞭解如何變更圖片合成方式,去除惱人的雲層!