計算每年森林面積減少量
在上一節中,您已瞭解如何使用 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);
結果應如下圖所示。
