GEE代碼實例教程詳解:湖泊面積分析
完整代碼
// 定義研究區域的坐標點
var coordinates = [[42.000552219688586, 38.18969302118053],[43.868228000938586, 38.18969302118053],[43.868228000938586, 39.209978258633186],[42.000552219688586, 39.209978258633186],[42.000552219688586, 38.18969302118053]
];// 創建多邊形區域
var roi = ee.Geometry.Polygon(coordinates);// 將多邊形添加到地圖上
Map.addLayer(roi, {color: 'red'});// 定義時間范圍
var time_start = '2013-01-01';
var time_end = '2021-12-31';// 創建Landsat 8圖像集合并篩選數據
var landsat = ee.ImageCollection('LANDSAT/LC08/C01/T1').filterDate(time_start, time_end).filter(ee.Filter.lt('CLOUD_COVER', 10)).filter(ee.Filter.calendarRange(6, 9, 'month')) // 篩選夏季月份.filterBounds(roi); // 應用地理范圍// 計算NDWI
var ndwi = landsat.map(function(img) {var green = img.select('B4').multiply(0.0001).subtract(0.1); // 綠色波段var nir = img.select('B5').multiply(0.0001).subtract(0.1); // 近紅外波段var ndwi = green.normalizedDifference(nir).rename('ndwi');return img.addBands(ndwi);
}).median().select('ndwi');// 應用閾值并創建水體掩膜
var water_mask = ndwi.gte(0.1); // NDWI大于等于0.1的像素被認為是水體// 將水體掩膜添加到地圖上
Map.addLayer(water_mask, {min: 0, max: 1, palette: ['0000FF']}, 'Water Mask');// 計算水體像素面積(單位:平方米)
var pixel_area = water_mask.multiply(ee.Image.pixelArea());// 將像素面積添加到地圖上
Map.addLayer(pixel_area.clip(roi), {min: 0, max: 1000, palette: ['00FF00']}, 'Pixel Area');// 計算湖泊面積(單位:平方公里)
var scale = 30; // 定義分析的尺度
var lake_area = pixel_area.reduceRegion({reducer: ee.Reducer.sum(),geometry: roi,scale: scale,bestEffort: true
}).get('ndwi');// 將面積從平方米轉換為平方公里
var lake_area_km2 = lake_area / 1e6 / 1e6 * scale * scale;// 打印湖泊面積
print('Lake Area (square kilometers):', lake_area_km2);
代碼詳解
1. 定義研究區域
我們首先定義了一個多邊形區域(Region of Interest, ROI),這是分析湖泊面積的地理范圍。坐標點列表表示多邊形的頂點,我們使用ee.Geometry.Polygon
來創建這個多邊形。
2. 添加圖層到地圖
使用Map.addLayer
函數將ROI添加到地圖上,使用紅色邊界線可視化多邊形區域。
3. 定義時間范圍
設置時間范圍time_start
和time_end
,用于篩選Landsat 8圖像集合中的圖像。
4. 創建和篩選圖像集合
使用ee.ImageCollection
獲取Landsat 8圖像,并應用多個篩選條件:
filterDate
:根據時間范圍篩選圖像。filter
:選擇云量覆蓋小于10%的圖像。filterBounds
:將圖像集合限制在ROI內。
5. 計算NDWI
使用map
函數遍歷圖像集合,對每張圖像進行處理:
- 選擇綠色波段(B4)和近紅外波段(B5),并進行輻射校正。
- 計算NDWI,使用
normalizedDifference
函數。
6. 應用閾值和創建掩膜
使用gte
函數(greater than or equal)設置閾值0.1,創建水體掩膜。
7. 可視化水體掩膜
將水體掩膜添加到地圖上,使用藍色可視化水體區域。
8. 計算像素面積
使用multiply
函數將水體掩膜與每個像素的面積相乘,得到每個水體像素的面積(單位:平方米)。
9. 可視化像素面積
將計算得到的像素面積添加到地圖上,使用綠色可視化。
10. 計算湖泊面積
使用reduceRegion
函數和ee.Reducer.sum
對ROI內的像素面積求和,得到湖泊的總面積(單位:平方米)。然后將面積轉換為平方公里。
11. 打印結果
使用print
函數打印湖泊的面積。
結論
本教程通過一個具體的代碼實例,詳細解釋了如何在GEE中進行湖泊面積分析。從定義研究區域到計算和可視化結果,我們逐步介紹了每個步驟及其代碼實現。希望這個教程能幫助你更好地理解GEE的功能,并激發你在地理空間數據分析領域的探索。