GEEer成长日记二十:使用Sentinel 2影像计算水体指数NDWI、MNDWI并下载到本地

一、NDWI和MNDWI计算公式介绍

NDWI(归一化差异水体指数)

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

式中: GREEN为绿光波段; NIR为近红外波段。NDWI主要利用了在近红外波段水体强吸收几乎没有反射而植被反射率很强的特点,通过抑制植被和突出水体用来提取影像中的水体信息,效果较好。但是由于NDWI只考虑了植被因素,忽略了建筑物和土壤这2个重要的地物,通过NDWI提取水体信息时由于绿光波段的反射率远远高于近红外波段,所以提取结果往往混淆有土壤和建筑物信息。用NDWI提取城市水体时会有较多建筑物阴影的水体,效果较差。

MNDWI(改进的归一化差异水体指数)

公式:MNDWI=(GREEN-SWIR)/(GREEN+SWIR)

式中:GREEN为绿光波段; SWIR为短波红外波段。建筑物等阴影在绿光和近红外波段的波谱特征与水体相似,当采用短波红外波段替换近红外波段时,可以使计算出的水体与建筑物指数的反差明显增强,大大降低了二者的混淆程度,从而有利于城镇中水体信息的准确提取。

二、使用Sentinel-2影像计算NDWI和MNDWI

获取Sentinel影像
以研究时间段内的中值为例

//*********************************************************************************
//Function to mask clouds using the Sentinel-2 QA band.
//*********************************************************************************
function maskS2clouds(image) {
  var qa = image.select('QA60')
  // Bits 10 and 11 are clouds and cirrus, respectively.
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(
             qa.bitwiseAnd(cirrusBitMask).eq(0))
  // Return the masked and scaled data, without the QA bands.
  return image.updateMask(mask).divide(10000)
      .select("B.*")
      .copyProperties(image, ["system:time_start"])
}
//*********************************************************************************
var collection = ee.ImageCollection("COPERNICUS/S2")
                         .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 10))
                         .filterDate('2020-01-01' ,'2020-12-31')
                         .filterBounds(geometry)
                         .map(maskS2clouds);

var medianS2 = collection.median().clip(geometry);

在这里插入图片描述
2、计算NDWI
​ Sentinel2影像中:B3表示GREEN波段,B8表示NIR波段。

var NDWI = medianS2.normalizedDifference(['B3', 'B8']).rename('NDWI')

在这里插入图片描述

3、计算MNDWI
Sentinel2影像中:B3表示GREEN波段,B11表示SWIR波段。

var MNDWI = medianS2.normalizedDifference(['B3','B11']).rename(['MNDWI']); 

在这里插入图片描述

三、结果导出

1、导出NDWI

Export.image.toDrive({
  image: NDWI,
  description: 'S2_NDWI',
  crs: "EPSG:4326",
  scale: 10,
  region: geometry,
  maxPixels: 1e13,
  folder: 'S2_NDWI'
});

2、导出MNDWI

Export.image.toDrive({
  image: MNDWI,
  description: 'S2_MNDWI',
  crs: "EPSG:4326",
  scale: 10,
  region: geometry,
  maxPixels: 1e13,
  folder: 'S2_MNDWI'
});

更多GEE教程可关注GZH:”GEEer成长日记“,有讨论群哦,一起学习!

  • 11
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
好的,以下是使用 Sentinel-2 数据在 GEE 上计算一年平均 NDVI 并下载 NDVI 的代码示例: ```javascript var s2 = ee.ImageCollection('COPERNICUS/S2_SR') .filterDate('2021-01-01', '2021-12-31') .filterBounds(geometry); var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; var s2WithNDVI = s2.map(addNDVI); var ndvi = s2WithNDVI.select('NDVI'); var meanNDVI = ndvi.mean(); Export.image.toDrive({ image: meanNDVI, description: 'mean_ndvi_2021', scale: 10, region: geometry }); ``` 这段代码与上一个示例代码类似,只不过这里增加了将结果导出到 Google Drive 的代码。`Export.image.toDrive` 函数可以将计算结果导出为 GeoTIFF 文件。您需要指定导出的图像、文件名、空间分辨率、导出区域等参数。 导出完成后,您可以在 Google Drive 中找到导出的文件,并进行下载。如果您使用的是 Colab 或者 Jupyter Notebook,您也可以使用以下代码将文件下载到本地: ```python from google.colab import drive drive.mount('/content/drive') import ee ee.Authenticate() ee.Initialize() region = ee.Geometry.Rectangle([lon_min, lat_min, lon_max, lat_max]) image = ee.Image('GEE_IMAGE_ID') task = ee.batch.Export.image.toDrive(image, 'IMAGE_NAME', region=region.getInfo(), scale=30) task.start() ``` 其中,'GEE_IMAGE_ID' 是导出的图像在 GEE 中的 ID,'IMAGE_NAME' 是导出的文件名,在下载时需要修改为实际的文件名。这段代码需要在 Colab 或者 Jupyter Notebook 中运行,并且需要授权 GEE 访问 Google Drive。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值