GEE代码实例教程详解:湖泊水位变化监测

2024-07-09 08:09:49 浏览数 (2)

简介

本篇博客将介绍如何使用Google Earth Engine (GEE) 对湖泊水位变化进行监测。通过MODIS数据集,我们可以识别2001年和2023年的湖泊范围,并计算湖泊的高程变化。

背景知识

MODIS数据集

MODIS/061/MOD09Q1数据集提供了MODIS的地表反射数据,这些数据可以用来计算归一化差异水体指数(NDWI)。

NDWI

归一化差异水体指数(NDWI)是一种用于识别水体的遥感指数,它基于水体在近红外和短波红外波段的反射特性差异。

ALOS全球数字地表模型

JAXA/ALOS/AW3D30数据集提供了全球30米分辨率的数字地表模型(DSM),可以用来计算地表的高程。

完整代码

代码语言:javascript复制
// 定义研究区域的坐标点
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在不同领域的应用。

0 人点赞