水患發生頻率變化強度

「水域出現變化強度」資料層提供 1984 年至 1999 年和 2000 年至 2015 年這兩個時期地表水變化的測量結果。這個圖層會計算兩個紀元中同源月份配對的平均變化。如要進一步瞭解這個圖層,請參閱 資料使用手冊 (第 2 版) 。

本節教學課程將:

  1. 新增樣式化地圖圖層,以視覺化方式呈現水域出現頻率變化強度,以及
  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'
});
變更強度
圖 6. 烏卡亞利河地表水變化強度的螢幕截圖,該河位於秘魯東部亞馬遜雨林中的普卡爾帕市附近。 紅色/綠色代表不同時期之間地表水出現率的減少/增加。

總結感興趣區域的變化

在本節中,我們會彙整指定感興趣區域的變化量。如要指定感興趣的區域,請按一下多邊形繪圖工具,這是其中一種 幾何圖形工具。這會建立新的幾何圖形匯入圖層,預設名稱為「geometry」。如要變更名稱,請按一下圖層名稱右側的齒輪圖示。(請注意,您可能需要將游標移至圖層名稱上,才會顯示這個圖示)。

將圖層名稱變更為 roi (代表感興趣區域或 ROI)。接著,我們可以在地圖上點選一系列點,定義感興趣的多邊形區域。

感興趣區域
圖 7. 秘魯普卡爾帕附近烏卡亞利河的螢幕截圖,其中包含使用多邊形繪圖工具建立的感興趣區域。

現在,我們已定義感興趣區域並儲存在變數中,可以使用該變數計算 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);

第一個陳述式會計算 ROI 內發生變化強度值的直方圖,並以 30 公尺的比例取樣。第二個函式會將產生的物件輸出至程式碼編輯器的「Console」分頁。您可以展開物件樹狀結構,查看直方圖值區的值。 雖然有數字資料,但有更好的方式可以呈現結果。

直方圖值
圖 8. 控制台分頁結果,顯示地表水變化強度的直方圖值。

為改善這種情況,我們可以改為生成直方圖。將定義直方圖物件的陳述式替換為下列陳述式:

程式碼編輯器 (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.'
});

這些陳述式會建立直方圖物件,並將「Console」分頁中的直方圖物件樹狀結構替換為圖表。圖表方法包含多個引數,包括 scale (定義取樣感興趣區域的空間比例,以公尺為單位) 和 minBucketWidth (用於控制直方圖值區的寬度)。

直方圖
圖 9. 「Console」分頁結果,顯示地表水變化強度的直方圖。

將游標移到直方圖長條上,即可互動式探索圖表值。

最終腳本

以下列出本節的完整指令碼。請注意,指令碼包含定義多邊形幾何圖形 (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'
});

在下一節中,您將使用水體類別轉換圖層,進一步探索水體隨時間變化的情形。