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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.

代码详解

1. 定义研究区域

我们首先定义了一个多边形区域(Region of Interest, ROI),这是分析湖泊面积的地理范围。坐标点列表表示多边形的顶点,我们使用ee.Geometry.Polygon来创建这个多边形。

2. 添加图层到地图

使用Map.addLayer函数将ROI添加到地图上,使用红色边界线可视化多边形区域。

3. 定义时间范围

设置时间范围time_starttime_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的功能,并激发你在地理空间数据分析领域的探索。