GEE代码实例教程详解:湖泊面积分析

2024-07-09 08:13:21 浏览数 (1)

GEE代码实例教程详解:湖泊面积分析

完整代码

代码语言:javascript复制
// 定义研究区域的坐标点
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_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的功能,并激发你在地理空间数据分析领域的探索。

0 人点赞