Hansen 等人的全球森林變化資料簡介

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 的內容。

森林變更預設值
圖 1:Hansen 等人 (2013 年) 森林變化資料的預設視覺化圖表。

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

forest change custom
圖 2. 自訂 Hansen 等人 (2013 年) 森林變化資料的視覺化圖表。

請注意,將多波段影像新增至地圖時,系統會分別選擇影像的前三個波段做為紅色、綠色和藍色,並根據每個波段的資料類型進行延展。圖片呈現紅色的原因是前三個波段分別是 treecover2000lossgaintreecover2000 頻帶以百分比表示,值遠高於二進位 ({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_b402000 年第一個有效像素建構的 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. 美國 2000 年的樹木覆蓋範圍灰階圖像。

下圖使用 3 個波段,即 2015 年的 Landsat 波段 5、4 和 3。這個波段組合會將健康的植被顯示為綠色,土壤則顯示為紫紅色:

程式碼編輯器 (JavaScript)

Map.addLayer(
    gfc2014, {bands: ['last_b50', 'last_b40', 'last_b30']}, 'false color');

結果應如圖 4 所示。

美國假色
圖 4:2015 年美國 Landsat 7 假色合成影像。

全球森林變化資料集的一項實用視覺化功能,是以綠色顯示 2000 年的森林面積、紅色顯示森林損失,以及藍色顯示森林增長。具體來說,請建立loss第一個頻帶 (紅色)、treecover2000第二個頻帶 (綠色) 和gain第三個頻帶 (藍色):

程式碼編輯器 (JavaScript)

Map.addLayer(gfc2014, {bands: ['loss', 'treecover2000', 'gain']}, 'green');

損失和增益頻帶值為二進位,因此在圖片上幾乎看不到,圖片應如圖 5 所示。

美國森林覆蓋率
圖 5:美國 2000 年的樹木覆蓋率 (綠色)。

我們希望森林面積減少以亮紅色顯示,森林面積增加則以亮藍色顯示。如要修正這個問題,可以使用視覺化參數 max,設定圖片資料的延展範圍。請注意,max 視覺化參數會採用值清單,對應每個頻帶的最大值:

程式碼編輯器 (JavaScript)

Map.addLayer(gfc2014, {
  bands: ['loss', 'treecover2000', 'gain'],
  max: [1, 255, 1]
}, 'forest cover, loss, gain');

結果應如圖 6 所示。

美國森林變遷
圖 6. 美國森林損失 (紅色)、2000 年森林覆蓋率 (綠色) 和森林面積增加 (藍色)。

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

美國太平洋西北部森林變遷
圖 7:美國太平洋西北地區的森林損失 (紅色)、2000 年的森林覆蓋面積 (綠色) 和森林面積增加 (藍色)。

如要取得教學課程一開始承諾的圖片,您可以分別為森林、損失、收益,以及損失和收益建立個別圖片。按照最適合顯示的順序,將這些圖片逐一新增至地圖。

調色盤

如要以不同顏色顯示每張圖片,可以針對單一頻帶圖片使用 Map.addLayer()palette 參數。調色盤可讓你設定圖片顯示的色彩配置 (進一步瞭解調色盤)。回想一下 Earth Engine API 教學課程,調色盤中的顏色會線性延展至 minmax

舉例來說,如要使用綠色調色盤顯示森林範圍圖片,可以輸入:

程式碼編輯器 (JavaScript)

Map.addLayer(gfc2014, {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00']
}, 'forest cover palette');

結果應如圖 8 所示。

森林面積 NA
圖 8. 2000 年北美洲的森林覆蓋面積。

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

巴拉圭森林面積
圖 9: 2000 年巴拉圭馬里斯卡爾埃斯特加里維亞周圍的樹木覆蓋面積。

圖 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 為零。

巴拉圭
圖 9: 2000 年巴拉圭馬里斯卡爾埃斯特加里維亞周圍的森林覆蓋範圍, 延展至 [0, 100]。

遮罩

到目前為止,所有顯示的圖片都有大片黑色區域,代表資料為零。舉例來說,海洋中沒有樹木。如要隱藏這些區域,可以遮蓋其值。Earth Engine 中的每個像素都有值和遮罩。系統會根據遮罩設定的透明度算繪圖片,其中零表示完全透明,一則表示完全不透明。

你可以使用圖片本身遮蓋圖片。舉例來說,如果使用 treecover2000 遮蓋頻帶本身,森林覆蓋率為零的區域就會變成透明:

程式碼編輯器 (JavaScript)

Map.addLayer(gfc2014.mask(gfc2014), {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00'],
  max: 100
}, 'forest cover masked');

結果應如圖 10 所示。

美洲樹木覆蓋
圖 10:2000 年的樹木覆蓋情況,經過延展和遮蓋。

範例

您幾乎可以製作 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 所示。

美洲地區的損失/收益
圖 11:森林面積減少 (紅色)、2000 年的森林覆蓋面積 (綠色) 和森林面積增加 (藍色)。

請注意,有三項 addLayer() 呼叫。每次呼叫 addLayer() 都會在 Google 地圖中新增圖層。將滑鼠游標懸停在地圖右上角的「圖層」按鈕上,即可查看這些圖層。你可以使用旁邊的核取方塊開啟或關閉每個圖層,並透過圖層名稱旁邊的滑桿調整圖層的不透明度。

我們幾乎可以製作出教學課程開頭顯示的圖片。不過,缺少顯示像素損失和增益的圖層。缺少這項資訊是因為我們需要瞭解如何對影像波段執行某些計算,才能計算出哪些像素同時顯示損失和增益。這是下一節的主題。