簡介
本篇博客將介紹如何使用Google Earth Engine (GEE) 對湖泊水位變化進行監測。通過MODIS數據集,我們可以識別2001年和2023年的湖泊范圍,并計算湖泊的高程變化。
背景知識
MODIS數據集
MODIS/061/MOD09Q1數據集提供了MODIS的地表反射數據,這些數據可以用來計算歸一化差異水體指數(NDWI)。
NDWI
歸一化差異水體指數(NDWI)是一種用于識別水體的遙感指數,它基于水體在近紅外和短波紅外波段的反射特性差異。
ALOS全球數字地表模型
JAXA/ALOS/AW3D30數據集提供了全球30米分辨率的數字地表模型(DSM),可以用來計算地表的高程。
完整代碼
// 定義研究區域的坐標點
var cor = [[44.86557382828752, 37.08659871132482],[46.08505625016252, 37.08659871132482],[46.08505625016252, 38.34669285754838],[44.86557382828752, 38.34669285754838],[44.86557382828752, 37.08659871132482]
];// 創建多邊形區域
var roi = ee.Geometry.Polygon(cor);// 將地圖中心設置為研究區域
Map.centerObject(roi);// 2001年MODIS數據
var modis2001 = ee.ImageCollection("MODIS/061/MOD09Q1").select('sur_refl_b01', 'sur_refl_b02').filterDate('2001', '2002').map(function (img) {var band = img.multiply(0.0001);var ndwi = band.normalizedDifference(['sur_refl_b01', 'sur_refl_b02']).rename('ndwi');return ndwi;}).median();// 2001年NDWI圖層
Map.addLayer(modis2001.clip(roi), [], 'ndwi_2001', false);// 2001年湖泊閾值
var thr = modis2001.gt(0.1);
Map.addLayer(thr.clip(roi), [], 'lake_thr', false);// 2001年湖泊掩膜
var mask2001 = thr.updateMask(thr);
Map.addLayer(mask2001.clip(roi), [], 'mask2001', false);// 2001年湖泊邊界矢量
var vector2001 = mask2001.reduceToVectors({geometry: roi,scale: 250
});
Map.addLayer(vector2001, [], 'lake2001', false);// ALOS DSM
var dem = ee.ImageCollection("JAXA/ALOS/AW3D30/V3_2").mean().select('AVE_DSM');// 2001年湖泊高程
var lake_elevation_2001 = ee.Number(dem.reduceRegion({reducer: ee.Reducer.percentile([55]),geometry: vector2001,scale: 250
}).get('AVE_DSM'));
print('lake elevation for 2001', lake_elevation_2001);// 導出2001年湖泊邊界
Export.table.toDrive({collection: vector2001,description: 'lake2001',folder: 'lake_border',fileFormat: 'SHP'
});// 2023年MODIS數據
var modis2023 = ee.ImageCollection("MODIS/061/MOD09Q1").select('sur_refl_b01', 'sur_refl_b02').filterDate('2023', '2024').map(function (img) {var band = img.multiply(0.0001);var ndwi = band.normalizedDifference(['sur_refl_b01', 'sur_refl_b02']).rename('ndwi');return ndwi;}).median();// 2023年湖泊掩膜
var thr2 = modis2023.gt(0.1);
var mask2023 = thr2.updateMask(thr2);
Map.addLayer(mask2023.clip(roi), [], 'mask2023', false);// 2023年湖泊邊界矢量
var vector2023 = mask2023.reduceToVectors({geometry: roi,scale: 250
});
Map.addLayer(vector2023, [], 'lake2023', false);// 2023年湖泊高程
var lake_elevation_2023 = ee.Number(dem.reduceRegion({reducer: ee.Reducer.percentile([55]),geometry: vector2023,scale: 250
}).get('AVE_DSM'));
print('lake elevation for 2023', lake_elevation_2023);
代碼詳解
1. 定義研究區域
創建一個多邊形區域roi
,用于限定分析的地理范圍,并設置地圖中心。
2. 加載MODIS數據集
分別加載2001年和2023年的MODIS數據集,并計算NDWI。
3. 湖泊范圍識別
通過設置NDWI閾值,識別出2001年和2023年的湖泊范圍。
4. 湖泊邊界矢量提取
將識別出的湖泊掩膜轉換為矢量邊界。
5. 加載ALOS DSM數據集
加載ALOS全球數字地表模型數據集,并計算平均DSM。
6. 湖泊高程計算
使用ALOS DSM數據,計算2001年和2023年湖泊邊界的55百分位高程。
7. 湖泊邊界導出
將2001年的湖泊邊界矢量導出為SHP格式。
8. 湖泊高程變化監測
打印2001年和2023年的湖泊高程,監測湖泊水位變化。
結論
本教程展示了如何使用GEE對湖泊水位變化進行監測。通過MODIS數據識別湖泊范圍,并結合ALOS DSM數據計算湖泊高程,我們可以了解湖泊水位隨時間的變化情況。
進一步探索
GEE提供了多種工具和方法來進行水體監測和地形分析。在后續的教程中,我們將繼續探索GEE在不同領域的應用。