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

Earth Engine 中的 Hansen 等人 (2013 年) 全球森林變化資料集,呈現 2000 年至 2014 年間全球森林變化,解析度為 30 公尺。首先,請將 Hansen 等人的資料新增至地圖。搜尋「Hansen forest」並將匯入項目命名為 gfc2014,藉此匯入全球森林變化資料 (進一步瞭解如何搜尋及匯入資料集),或將下列程式碼複製到程式碼編輯器:

程式碼編輯器 (JavaScript)

var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015');
Map.addLayer(gfc2014);

按一下程式碼編輯器頂端的「Run」按鈕,應該會看到類似圖 1 的畫面。

森林變遷預設
圖 1. Hansen 等人 (2013 年) 森林變化資料的預設視覺化。

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

森林變遷自訂
圖 2. Hansen 等人 (2013 年) 森林變化資料的自訂圖表。

請注意,將多波段圖片新增至地圖時,系統會分別選擇圖片的前三個波段做為紅色、綠色和藍色,並根據每個波段的資料類型進行延展。圖片之所以呈現紅色,是因為前三個波段分別是 treecover2000、loss 和 gain。treecover2000 頻帶以百分比表示,其值遠高於 loss (綠色) 和 gain (藍色),後兩者為二進位 ({0, 1})。因此,圖片會顯示為紅色。

全球森林變化資料中的波段如下:

樂團名稱說明範圍
treecover2000像素中樹蔭所占的百分比。0 - 100
損失 如果在研究期間發生損失,則為 1。 0 或 1
gain如果在研究期間體重增加,則為 1。 0 或 1
lossyear損失發生的年份,從 2001 年開始編製索引,如果沒有損失,則為零。0 - 12
first_b30Landsat 7 紅色波段,由 2000 年的第一個有效像素建構而成 (如果 2000 年沒有有效像素,則使用更早的像素)。0 - 255
first_b40Landsat 7 近紅外線波段,由 2000 年的第一個有效像素建構而成。0 - 255
first_b50第一個 Landsat 7 短波紅外線波段,由 2000 年的第一個有效像素建構而成。0 - 255
first_b70第二個 Landsat 7 短波紅外線波段,由 2000 年的第一個有效像素建構而成。0 - 255
last_b30Landsat 7 紅色波段,根據 2012 年最新有效像素建構而成。0 - 255
last_b40Landsat 7 近紅外線波段,由 2012 年最新的有效像素建構而成。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. Landsat 7 於 2015 年拍攝的美國假色合成影像。

全球森林變化資料集有一張精美的圖表,以綠色代表 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 教學課程,調色盤中的顏色會線性延伸至 min 和 max。

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

程式碼編輯器 (JavaScript)

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

結果應如圖 8 所示。

森林範圍:不適用
圖 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 預設為零。

stretched Paraguay
圖 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 資料的圖表,就像本教學課程開頭的圖表一樣。在這個範例中,我們將所有內容整合在一起,但有一點不同。我們不指定 Map.addLayer 呼叫中的 bands 參數,而是使用 select() 建立新圖片:

程式碼編輯器 (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() 都會在地圖上新增一個圖層。將滑鼠游標懸停在地圖右上方的「Layers」(圖層) 按鈕上,即可查看這些圖層。您可以使用每個圖層旁的核取方塊開啟或關閉圖層,並使用圖層名稱旁的滑桿調整圖層的不透明度。

我們快要能製作出教學課程開頭顯示的圖片了。不過,顯示同時有損失和增加像素的圖層並未出現。之所以缺少這項資訊,是因為我們必須先瞭解如何對圖片波段執行某些計算,才能計算出哪些像素同時顯示損失和增加。這是下一節的主題。