问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用GEE计算Landsat 8数据中的水域面积

创作时间:
作者:
@小白创作中心

使用GEE计算Landsat 8数据中的水域面积

引用
CSDN
1.
https://blog.csdn.net/qq_31988139/article/details/142102055

本文将介绍如何使用Google Earth Engine(GEE)平台处理Landsat 8卫星数据,计算指定区域的水域面积。通过NDWI(归一化差异水体指数)的计算和分析,可以有效地监测和评估水体变化。

NDWI指数简介

NDWI指数,全称为归一化差异水体指数(Normalized Difference Water Index),是一种用于遥感图像分析中水体检测和提取的指数。NDWI指数利用了绿光和近红外波段反射率之间的差异来区分水体和陆地。公式如下:

NDWI = (Green - NIR) / (Green + NIR)

其中,Green代表绿光波段的反射率,NIR代表近红外波段的反射率。

NDWI值的范围从-1到1,较高的值表示像素更有可能是水体,较低的值则表示更有可能是陆地。一般来说,NDWI值大于0.3被认为是水体,而小于0.3被认为是陆地。

NDWI指数广泛应用于水体监测、湖泊监测、洪水监测、冰川监测等领域,对于全球水资源管理和环境研究具有重要意义。

GEE函数说明

ee.Image.pixelArea()

生成一个图像,其中每个像素的值是该像素的面积(单位为平方米)。返回的图像有一个名为“区域”的波段。

reduceRegion()

对特定区域中的所有像素应用缩减器。缩减器的输入数量必须与输入图像的频段相同,或者必须有一个输入并且将为每个频段重复。返回缩减器输出的字典。

代码实现

// 定义研究区域
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);

// 设置时间范围
var time_start = '2023';
var time_end = '2024';

// 获取Landsat 8数据并进行预处理
var landsat = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
  .filterDate(time_start, time_end)
  .filter(ee.Filter.lt('CLOUD_COVER', 10))
  .filter(ee.Filter.calendarRange(6, 9, 'month'))
  .filterBounds(roi)
  .map(function(img) {
    var bands = img.select('SR_.*').multiply(2.75e-05).add(-0.2);
    var ndwi = bands.normalizedDifference(['SR_B3', 'SR_B5']).rename('ndwi');
    return img.addBands(ndwi);
  });

// 添加NDWI图层
Map.addLayer(landsat.clip(roi), [], 'ndwi_summer', false);
Map.addLayer(landsat.clip(roi).gt(0), [], 'ndwi_thr', false);

// 创建掩膜并计算像素面积
var thr = landsat.gt(0.1);
var mask = thr.updateMask(thr);
Map.addLayer(mask, [], 'ndwi_masked', false);

var pixel_area = mask.multiply(ee.Image.pixelArea().divide(1e6));
Map.addLayer(pixel_area.clip(roi), [], 'ndwi_pixel_area', false);

// 计算水域面积
var lake_area = pixel_area.reduceRegion({
  reducer: ee.Reducer.sum(),
  geometry: roi,
  scale: 100
});

print(ee.Number(lake_area));

结果展示

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号