Earth Engine 中的 Hansen 等人 (2013 年)
全球森林變化資料集,以 30 公尺的解析度呈現 2000 年至 2014 年間的全球森林變化。首先,請將 Hansen 等人的資料新增至地圖。您可以匯入全球森林變化資料 (進一步瞭解如何搜尋及匯入資料集),方法是搜尋「Hansen forest」並將匯入內容命名為 gfc2014
,也可以將下列程式碼複製到程式碼編輯器:
程式碼編輯器 (JavaScript)
var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); Map.addLayer(gfc2014);
按一下程式碼編輯器頂端的「執行」按鈕,畫面應會顯示類似圖 1 的內容。

別擔心,很快就能讓它看起來更美觀。(進一步瞭解 Earth Engine 中的預設圖像視覺化效果)。本節結束時,您會得到類似圖 2 的圖片,其中綠色代表研究在 2000 年偵測到的森林,紅色代表研究期間估計的森林損失,藍色代表該期間的森林增長,洋紅色代表森林損失和增長的區域,非森林區域則會遮蓋。

請注意,將多波段影像新增至地圖時,系統會分別選擇影像的前三個波段做為紅色、綠色和藍色,並根據每個波段的資料類型進行延展。圖片呈現紅色的原因是前三個波段分別是 treecover2000
、loss
和 gain
。treecover2000
頻帶以百分比表示,值遠高於二進位 ({0, 1}) 的 loss
(綠色) 和 gain
(藍色)。因此,圖片會顯示為以紅色為主。
全球森林變化資料中的波段如下:
樂團名稱 | 說明 | 範圍 |
---|---|---|
treecover2000 | 像素中的樹木覆蓋百分比。 | 0 - 100 |
損失 | 1 (如果研究期間曾發生損失)。 | 0 或 1 |
增加 | 1,如果研究期間曾發生體重增加的情況。 | 0 或 1 |
lossyear | 發生損失的年份 (從 2001 年開始以 1 為索引),如果沒有發生損失,則為零。 | 0 - 12 |
first_b30 | 以 2000 年 (或更早,如果 2000 年沒有有效像素) 的第一個有效像素建構的 Landsat 7 紅色波段。 | 0 到 255 |
first_b40 | 2000 年第一個有效像素建構的 Landsat 7 近紅外線波段。 | 0 到 255 |
first_b50 | 這是 2000 年首批有效像素建構而成的 Landsat 7 短波紅外線波段。 | 0 到 255 |
first_b70 | 第二個 Landsat 7 短波紅外線波段,是根據 2000 年的第一個有效像素建立。 | 0 到 255 |
last_b30 | 這是 2012 年的 Landsat 7 紅外線波段,由最新的有效像素組成。 | 0 到 255 |
last_b40 | 以 2012 年最新的有效像素建構的 Landsat 7 近紅外線波段。 | 0 到 255 |
last_b50 | 第一張 Landsat 7 短波紅外線波段影像,是根據 2012 年最新的有效像素所建構。 | 0 到 255 |
last_b70 | 第二個 Landsat 7 短波紅外線波段,是根據 2012 年最新的有效像素建立。 | 0 到 255 |
datamask | 無資料 (0)、已繪製地圖的陸地表面 (1) 和永久水體 (2)。 | 0、1、2 |
如要以灰階圖片顯示 2000 年的森林覆蓋率,可以使用 treecover2000
頻帶,並在 Map.addLayer()
的第二個引數中指定:
程式碼編輯器 (JavaScript)
Map.addLayer(gfc2014, {bands: ['treecover2000']}, 'treecover2000');
這樣一來,產生的圖片應該會與圖 3 類似。

下圖使用 3 個波段,即 2015 年的 Landsat 波段 5、4 和 3。這個波段組合會將健康的植被顯示為綠色,土壤則顯示為紫紅色:
程式碼編輯器 (JavaScript)
Map.addLayer( gfc2014, {bands: ['last_b50', 'last_b40', 'last_b30']}, 'false color');
結果應如圖 4 所示。

全球森林變化資料集的一項實用視覺化功能,是以綠色顯示 2000 年的森林面積、紅色顯示森林損失,以及藍色顯示森林增長。具體來說,請建立loss
第一個頻帶 (紅色)、treecover2000
第二個頻帶 (綠色) 和gain
第三個頻帶 (藍色):
程式碼編輯器 (JavaScript)
Map.addLayer(gfc2014, {bands: ['loss', 'treecover2000', 'gain']}, 'green');
損失和增益頻帶值為二進位,因此在圖片上幾乎看不到,圖片應如圖 5 所示。

我們希望森林面積減少以亮紅色顯示,森林面積增加則以亮藍色顯示。如要修正這個問題,可以使用視覺化參數 max
,設定圖片資料的延展範圍。請注意,max
視覺化參數會採用值清單,對應每個頻帶的最大值:
程式碼編輯器 (JavaScript)
Map.addLayer(gfc2014, { bands: ['loss', 'treecover2000', 'gain'], max: [1, 255, 1] }, 'forest cover, loss, gain');
結果應如圖 6 所示。

這會產生一張圖片,其中森林為綠色、森林流失為紅色、森林增加為藍色,而森林增加和流失皆有為洋紅色。但仔細檢查後,會發現這並非正確的結果。損失會以橘色標示,而非紅色。這是因為亮紅色像素會與底層的綠色像素混合,產生橘色像素。同樣地,森林、損失和增益的像素為粉紅色,這是綠色、亮紅色和亮藍色的組合。如需說明,請參閱圖 7。

如要取得教學課程一開始承諾的圖片,您可以分別為森林、損失、收益,以及損失和收益建立個別圖片。按照最適合顯示的順序,將這些圖片逐一新增至地圖。
調色盤
如要以不同顏色顯示每張圖片,可以針對單一頻帶圖片使用 Map.addLayer()
的 palette
參數。調色盤可讓你設定圖片顯示的色彩配置 (進一步瞭解調色盤)。回想一下 Earth Engine API 教學課程,調色盤中的顏色會線性延展至 min
和 max
。
舉例來說,如要使用綠色調色盤顯示森林範圍圖片,可以輸入:
程式碼編輯器 (JavaScript)
Map.addLayer(gfc2014, { bands: ['treecover2000'], palette: ['000000', '00FF00'] }, 'forest cover palette');
結果應如圖 8 所示。

放大圖片可更清楚地瞭解圖像的解析度。圖 9 顯示巴拉圭馬里斯卡爾埃斯特加里維亞周邊區域。

圖 3 顯示的圖片有點暗。問題在於 treecover2000
波段的資料類型為位元組 ([0, 255]),但實際值為百分比 ([0, 100])。如要調亮圖片,請視需要設定 min
和/或 max
參數。然後,調色盤會在這兩個極值之間延展。
程式碼編輯器 (JavaScript)
Map.addLayer(gfc2014, { bands: ['treecover2000'], palette: ['000000', '00FF00'], max: 100 }, 'forest cover percent');
結果應如圖 9 所示。請注意,在這個範例中,只有 max
設為 預設 min
為零。

遮罩
到目前為止,所有顯示的圖片都有大片黑色區域,代表資料為零。舉例來說,海洋中沒有樹木。如要隱藏這些區域,可以遮蓋其值。Earth Engine 中的每個像素都有值和遮罩。系統會根據遮罩設定的透明度算繪圖片,其中零表示完全透明,一則表示完全不透明。
你可以使用圖片本身遮蓋圖片。舉例來說,如果使用 treecover2000
遮蓋頻帶本身,森林覆蓋率為零的區域就會變成透明:
程式碼編輯器 (JavaScript)
Map.addLayer(gfc2014.mask(gfc2014), { bands: ['treecover2000'], palette: ['000000', '00FF00'], max: 100 }, 'forest cover masked');
結果應如圖 10 所示。

範例
您幾乎可以製作 Hansen 資料的視覺化效果,就像本教學課程開頭的範例一樣。在本例中,我們將所有內容放在一起,但有一點小差異。我們將使用 select()
建立新圖片,而不是在 Map.addLayer
呼叫中指定 bands
參數:
程式碼編輯器 (JavaScript)
var treeCover = gfc2014.select(['treecover2000']); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); // Add the tree cover layer in green. Map.addLayer(treeCover.updateMask(treeCover), {palette: ['000000', '00FF00'], max: 100}, 'Forest Cover'); // Add the loss layer in red. Map.addLayer(lossImage.updateMask(lossImage), {palette: ['FF0000']}, 'Loss'); // Add the gain layer in blue. Map.addLayer(gainImage.updateMask(gainImage), {palette: ['0000FF']}, 'Gain');
結果應如圖 11 所示。

請注意,有三項 addLayer()
呼叫。每次呼叫 addLayer()
都會在 Google 地圖中新增圖層。將滑鼠游標懸停在地圖右上角的「圖層」按鈕上,即可查看這些圖層。你可以使用旁邊的核取方塊開啟或關閉每個圖層,並透過圖層名稱旁邊的滑桿調整圖層的不透明度。
我們幾乎可以製作出教學課程開頭顯示的圖片。不過,缺少顯示像素損失和增益的圖層。缺少這項資訊是因為我們需要瞭解如何對影像波段執行某些計算,才能計算出哪些像素同時顯示損失和增益。這是下一節的主題。