「水體出現頻率變化強度」資料層可測量兩個時期 (1984 年至 1999 年和 2000 年至 2015 年) 之間的地表水變化。這個層會平均計算兩個時期中同源月份的變化。如需這個圖層的其他詳細資料,請參閱 資料使用者指南 (第 2 版) 。
本教學課程的這一節將:
- 新增樣式化地圖圖層,以視覺化方式呈現水域出現頻率的變化強度,以及
- 使用直方圖匯總指定感興趣區域的變化強度。
視覺化
與水體出現頻率圖層類似,我們會先在地圖上加入出現頻率變化強度的基本視覺化效果,然後再加以改善。發生次數變化強度會以絕對值和正規化值兩種方式呈現。在本教學課程中,我們會使用絕對值。首先,請從 GSW 圖片選取絕對發生次數變化強度圖層:
程式碼編輯器 (JavaScript)
var change = gsw.select("change_abs");
在程式碼的「Constants」部分,新增陳述式來建立新變數,定義圖層的樣式。這項樣式會以紅色/綠色顯示地表水出現次數減少/增加的區域。地表水出現頻率相對不變的區域會以黑色顯示。
程式碼編輯器 (JavaScript)
var VIS_CHANGE = { min:-50, max:50, palette: ['red', 'black', 'limegreen'] };
在程式碼的「地圖圖層」部分結尾,新增將新圖層加到地圖的陳述式。
程式碼編輯器 (JavaScript)
Map.setCenter(-74.4557, -8.4289, 11); // Ucayali River, Peru Map.addLayer({ eeObject: change, visParams: VIS_CHANGE, name: 'occurrence change intensity' });

摘要說明感興趣區域內的變化
在本節中,我們會彙整特定感興趣區域的變化量。如要指定感興趣的區域,請按一下多邊形繪製工具,這是 幾何工具之一。系統會建立新的「Geometry Imports」圖層,預設名稱為「geometry」。如要變更名稱,請按一下圖層名稱右側的齒輪圖示。(請注意,您可能需要將游標放在圖層名稱上,才會顯示該名稱)。
將圖層名稱變更為 roi
(代表感興趣區域或 ROI)。接著,我們可以在地圖上點選一系列點,定義感興趣的多邊形區域。

現在我們已定義感興趣的區域並儲存在變數中,可以利用該變數計算感興趣區域的變化強度直方圖。在指令碼的「Calculations」部分新增下列程式碼。
程式碼編輯器 (JavaScript)
// Calculate a change intensity for the region of interest. var histogram = change.reduceRegion({ reducer: ee.Reducer.histogram(), geometry: roi, scale: 30, bestEffort: true, }); print(histogram);
第一條陳述式會計算投資報酬率區域內發生變化強度值的直方圖,並以 30 公尺的比例取樣。第二個函式會將產生的物件列印到程式碼編輯器控制台分頁。您可以展開物件樹狀結構,查看直方圖值區的值。 雖然有數值資料,但有更好的方式呈現結果。

為改善這點,我們可以改為生成直方圖。將定義直方圖物件的陳述式,替換為下列陳述式:
程式碼編輯器 (JavaScript)
// Generate a histogram object and print it to the console tab. var histogram = ui.Chart.image.histogram({ image: change, region: roi, scale: 30, minBucketWidth: 10 }); histogram.setOptions({ title: 'Histogram of surface water change intensity.' });
這些陳述式會建立直方圖物件,並以圖表取代「控制台」分頁中的直方圖物件樹狀結構。圖表方法包含多個引數,包括 scale
(定義感興趣區域的取樣空間比例,以公尺為單位) 和 minBucketWidth
(用於控制直方圖值區的寬度)。

將游標懸停在直方圖長條上,即可互動式探索圖表值。
最終腳本
本節的完整指令碼如下所示。請注意,指令碼包含定義多邊形幾何 (roi
) 的陳述式,這與您使用程式碼編輯器的幾何工具建立的幾何類似。
程式碼編輯器 (JavaScript)
////////////////////////////////////////////////////////////// // Asset List ////////////////////////////////////////////////////////////// var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater'); var occurrence = gsw.select('occurrence'); var change = gsw.select("change_abs"); var roi = /* color: 0B4A8B */ee.Geometry.Polygon( [[[-74.17213, -8.65569], [-74.17419, -8.39222], [-74.38362, -8.36980], [-74.43031, -8.61293]]]); ////////////////////////////////////////////////////////////// // Constants ////////////////////////////////////////////////////////////// var VIS_OCCURRENCE = { min:0, max:100, palette: ['red', 'blue'] }; var VIS_CHANGE = { min:-50, max:50, palette: ['red', 'black', 'limegreen'] }; var VIS_WATER_MASK = { palette: ['white', 'black'] }; ////////////////////////////////////////////////////////////// // Calculations ////////////////////////////////////////////////////////////// // Create a water mask layer, and set the image mask so that non-water areas are transparent. var water_mask = occurrence.gt(90).mask(1); // Generate a histogram object and print it to the console tab. var histogram = ui.Chart.image.histogram({ image: change, region: roi, scale: 30, minBucketWidth: 10 }); histogram.setOptions({ title: 'Histogram of surface water change intensity.' }); print(histogram); ////////////////////////////////////////////////////////////// // Initialize Map Location ////////////////////////////////////////////////////////////// // Uncomment one of the following statements to center the map on // a particular location. // Map.setCenter(-90.162, 29.8597, 10); // New Orleans, USA // Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico // Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA // Map.setCenter(149.412, -35.0789, 11); // Lake George, Australia // Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia // Map.setCenter(90.6743, 22.7382, 10); // Meghna River, Bangladesh // Map.setCenter(81.2714, 16.5079, 11); // Godavari River Basin Irrigation Project, India // Map.setCenter(14.7035, 52.0985, 12); // River Oder, Germany & Poland // Map.setCenter(-59.1696, -33.8111, 9); // Buenos Aires, Argentina\ Map.setCenter(-74.4557, -8.4289, 11); // Ucayali River, Peru ////////////////////////////////////////////////////////////// // Map Layers ////////////////////////////////////////////////////////////// Map.addLayer({ eeObject: water_mask, visParams: VIS_WATER_MASK, name: '90% occurrence water mask', shown: false }); Map.addLayer({ eeObject: occurrence.updateMask(occurrence.divide(100)), name: "Water Occurrence (1984-2015)", visParams: VIS_OCCURRENCE, shown: false }); Map.addLayer({ eeObject: change, visParams: VIS_CHANGE, name: 'occurrence change intensity' });
在下一節中,您將使用水類別轉換圖層,進一步瞭解水隨時間的變化。