本篇博客将介绍如何使用Google Earth Engine (GEE) 对湖泊水位变化进行监测。通过MODIS数据集,我们可以识别2001年和2023年的湖泊范围,并计算湖泊的高程变化。
MODIS/061/MOD09Q1数据集提供了MODIS的地表反射数据,这些数据可以用来计算归一化差异水体指数(NDWI)。
归一化差异水体指数(NDWI)是一种用于识别水体的遥感指数,它基于水体在近红外和短波红外波段的反射特性差异。
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);
创建一个多边形区域roi
,用于限定分析的地理范围,并设置地图中心。
分别加载2001年和2023年的MODIS数据集,并计算NDWI。
通过设置NDWI阈值,识别出2001年和2023年的湖泊范围。
将识别出的湖泊掩膜转换为矢量边界。
加载ALOS全球数字地表模型数据集,并计算平均DSM。
使用ALOS DSM数据,计算2001年和2023年湖泊边界的55百分位高程。
将2001年的湖泊边界矢量导出为SHP格式。
打印2001年和2023年的湖泊高程,监测湖泊水位变化。
本教程展示了如何使用GEE对湖泊水位变化进行监测。通过MODIS数据识别湖泊范围,并结合ALOS DSM数据计算湖泊高程,我们可以了解湖泊水位随时间的变化情况。
GEE提供了多种工具和方法来进行水体监测和地形分析。在后续的教程中,我们将继续探索GEE在不同领域的应用。