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 的畫面。
別擔心,你很快就能讓它看起來更美觀。(進一步瞭解 Earth Engine 中的預設圖片視覺化)。本節結束時,您會看到類似圖 2 的圖片,其中綠色代表研究在 2000 年偵測到的森林,紅色代表研究期間預估的森林損失,藍色代表該期間的森林增加,洋紅色代表森林損失和增加的區域,非森林區域則會遮蓋。
請注意,將多波段圖片新增至地圖時,系統會分別選擇圖片的前三個波段做為紅色、綠色和藍色,並根據每個波段的資料類型進行延展。圖片之所以呈現紅色,是因為前三個波段分別是 treecover2000、loss 和 gain。treecover2000 頻帶以百分比表示,其值遠高於 loss (綠色) 和 gain (藍色),後兩者為二進位 ({0, 1})。因此,圖片會顯示為紅色。
全球森林變化資料中的波段如下:
| 樂團名稱 | 說明 | 範圍 |
|---|---|---|
| treecover2000 | 像素中樹蔭所占的百分比。 | 0 - 100 |
| 損失 | 如果在研究期間發生損失,則為 1。 | 0 或 1 |
| gain | 如果在研究期間體重增加,則為 1。 | 0 或 1 |
| lossyear | 損失發生的年份,從 2001 年開始編製索引,如果沒有損失,則為零。 | 0 - 12 |
| first_b30 | Landsat 7 紅色波段,由 2000 年的第一個有效像素建構而成 (如果 2000 年沒有有效像素,則使用更早的像素)。 | 0 - 255 |
| first_b40 | Landsat 7 近紅外線波段,由 2000 年的第一個有效像素建構而成。 | 0 - 255 |
| first_b50 | 第一個 Landsat 7 短波紅外線波段,由 2000 年的第一個有效像素建構而成。 | 0 - 255 |
| first_b70 | 第二個 Landsat 7 短波紅外線波段,由 2000 年的第一個有效像素建構而成。 | 0 - 255 |
| last_b30 | Landsat 7 紅色波段,根據 2012 年最新有效像素建構而成。 | 0 - 255 |
| last_b40 | Landsat 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 個波段,分別是 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 資料的圖表,就像本教學課程開頭的圖表一樣。在這個範例中,我們將所有內容整合在一起,但有一點不同。我們不指定 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 所示。
您會發現有三個 addLayer() 呼叫。每次呼叫 addLayer() 都會在地圖上新增一個圖層。將滑鼠游標懸停在地圖右上方的「Layers」(圖層) 按鈕上,即可查看這些圖層。您可以使用每個圖層旁的核取方塊開啟或關閉圖層,並使用圖層名稱旁的滑桿調整圖層的不透明度。
我們快要能製作出教學課程開頭顯示的圖片了。不過,顯示同時有損失和增加像素的圖層並未出現。之所以缺少這項資訊,是因為我們必須先瞭解如何對圖片波段執行某些計算,才能計算出哪些像素同時顯示損失和增加。這是下一節的主題。