計算每年森林流失量
在上一節中,您已瞭解如何使用 reduceRegion 方法,計算指定感興趣區域中消失的森林總面積。與其計算總損失,不如計算每年的損失。在 Earth Engine 中,您可以使用分組歸納器來達成這個目的。
如要將 reduceRegion() 的輸出內容分組,您可以指定分組帶,依整數像素值定義群組。在以下範例中,我們稍微修改先前的程式碼,並將 lossYear 波段新增至原始圖片。lossYear 頻帶中的每個像素都包含 0 到 14 的值,表示發生損失的年份。我們也將縮減器變更為分組縮減器,指定分組頻帶 (1) 的頻帶索引,以便根據 lossYear 頻帶中的值,加總及分組像素區域。
程式碼編輯器 (JavaScript)
// Load country boundaries from LSIB. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Get a feature collection with just the Congo feature. var congo = countries.filter(ee.Filter.eq('country_co', 'CF')); // Get the loss image. // This dataset is updated yearly, so we get the latest version. var gfc2017 = ee.Image('UMD/hansen/global_forest_change_2017_v1_5'); var lossImage = gfc2017.select(['loss']); var lossAreaImage = lossImage.multiply(ee.Image.pixelArea()); var lossYear = gfc2017.select(['lossyear']); var lossByYear = lossAreaImage.addBands(lossYear).reduceRegion({ reducer: ee.Reducer.sum().group({ groupField: 1 }), geometry: congo, scale: 30, maxPixels: 1e9 }); print(lossByYear);
執行上述程式碼後,您會看到每年森林流失面積,列印在名為 groups 的巢狀清單中。我們可以稍微調整輸出內容的格式,將結果設為字典,並以年份為鍵、損失面積為值。請注意,我們使用 format() 方法將年份值從 0-14 轉換為 2000-2014。
程式碼編輯器 (JavaScript)
var statsFormatted = ee.List(lossByYear.get('groups')) .map(function(el) { var d = ee.Dictionary(el); return [ee.Number(d.get('group')).format("20%02d"), d.get('sum')]; }); var statsDictionary = ee.Dictionary(statsFormatted.flatten()); print(statsDictionary);
製作圖表
現在我們有了年度損失數據,可以準備製作圖表了。我們將使用 ui.Chart.array.values() 方法。這個方法會採用輸入值的陣列 (或清單),以及 X 軸標籤的陣列 (或清單)。
程式碼編輯器 (JavaScript)
var chart = ui.Chart.array.values({ array: statsDictionary.values(), axis: 0, xLabels: statsDictionary.keys() }).setChartType('ColumnChart') .setOptions({ title: 'Yearly Forest Loss', hAxis: {title: 'Year', format: '####'}, vAxis: {title: 'Area (square meters)'}, legend: { position: "none" }, lineWidth: 1, pointSize: 3 }); print(chart);
結果應如下圖所示。