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

GEE教程:利用Sentinel-2数据进行NDWI和NDCI指数的计算和下载

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

GEE教程:利用Sentinel-2数据进行NDWI和NDCI指数的计算和下载

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

本文将介绍如何使用Google Earth Engine (GEE)计算和下载Sentinel-2数据中的NDWI(归一化差异水体指数)和NDCI(归一化差异叶绿素指数)。通过本教程,读者将学习到这两个重要遥感指数的计算方法及其在水资源管理和植被监测中的应用。

简介

NDWI(Normalized Difference Water Index,归一化差异水体指数)和NDCI(Normalized Difference Chlorophyll Index,归一化差异叶绿素指数)都是一种利用遥感影像数据来评估特定地物或地表类型的指数。

  1. 归一化差异水体指数(NDWI):
    NDWI用于识别和区分水体和陆地。它基于水体对近红外(NIR)波段和短波红外(SWIR)波段辐射的反射率差异。其计算公式为:
    NDWI = (NIR - SWIR) / (NIR + SWIR)
    其中,NIR代表近红外波段的反射率,SWIR代表短波红外波段的反射率。
    NDWI的取值范围为-1到1,较高的数值表示较多的水体存在,较低的数值表示较多的陆地存在。
  2. 归一化差异叶绿素指数(NDCI):
    NDCI用于评估和监测植被的叶绿素含量和生理状态。它基于植被对近红外(NIR)波段和红色(RED)波段辐射的反射率差异。其计算公式为:
    NDCI = (NIR - RED) / (NIR + RED)
    其中,NIR代表近红外波段的反射率,RED代表红色波段的反射率。
    NDCI的取值范围为-1到1,较高的数值表示较高的叶绿素含量(通常与较茂盛的植被相关),较低的数值表示较低的叶绿素含量(通常与植被稀疏或受到胁迫的区域相关)。
    这些指数可以通过遥感影像数据计算得出,并可以用于水资源管理、环境监测、植被健康评估等应用领域。

函数

normalizedDifference(bandNames)

计算两个频段之间的标准化差。如果未指定要使用的频段,则使用前两个频段。标准化差计算为(第一-秒)/(第一+秒)。请注意,返回的图像频段名称为“nd”,输入图像属性不会保留在输出图像中,并且任何输入频段中的负像素值都将导致输出像素被屏蔽。为了避免掩盖负输入值,请使用ee.Image. express()来计算规格化差异。

参数:

this:input (Image):
输入图像。
bandNames (List, default: null):
一个列表,指定要使用的频段名称。如果没有指定,则使用前两个频段。

返回值:

Image

Export.image.toDrive(image, description, folder, fileNamePrefix, dimensions, region, scale, crs, crsTransform, maxPixels, shardSize, fileDimensions, skipEmptyTiles, fileFormat, formatOptions, priority)

创建一个批处理任务,将图像作为栅格导出到Drive。任务可以从任务选项卡启动。"crsTransform"、"scale"和"dimensions"是互斥的。

参数:

image (Image):
要导出的图像。
description (String, optional):
任务的人类可读名称。可以包含字母、数字、-、(没有空格)。默认为"myExportImageTask"。
folder (String, optional):
导出将驻留的Google Drive文件夹。注意:(a)如果文件夹名称在任何级别存在,则输出将写入该文件夹,(b)如果存在重复的文件夹名称,则输出将写入最近修改的文件夹,(c)如果文件夹名称不存在,则在根目录下创建一个新文件夹,(d)包含分隔符的文件夹名称(例如'path/to/file')将被解释为字面字符串,而不是系统路径。默认为Drive根目录。
fileNamePrefix (String, optional):
文件名前缀。可以包含字母、数字、-、
(没有空格)。默认为描述。
dimensions (Number|String, optional):
用于导出图像的尺寸。可以是一个正整数作为最大维度,也可以是"WIDTHxHEIGHT",其中WIDTH和HEIGHT是正整数。
region (Geometry.LinearRing|Geometry.Polygon|String, optional):
一个线性环、多边形或坐标,表示要导出的区域。这些可以作为几何对象或字符串序列化坐标指定。
scale (Number, optional):
每像素的分辨率。默认为1000。
crs (String, optional):
用于导出图像的CRS。
crsTransform (List|String, optional):
用于导出图像的仿射变换。需要定义"crs"。
maxPixels (Number, optional):
限制导出的像素数量。默认情况下,如果导出超过1e8像素,将看到错误。显式设置此值允许提高或降低此限制。
shardSize (Number, optional):
此图像将计算的瓦片的像素大小。默认为256。
fileDimensions (List|Number, optional):
如果图像太大而无法放入单个文件中,每个图像文件的像素尺寸。可以指定一个数字表示正方形形状,也可以指定一个包含两个维度的数组表示(width,height)。注意,图像仍将裁剪到整体图像尺寸。必须是shardSize的倍数。
skipEmptyTiles (Boolean, optional):
如果为true,则跳过写入空(即完全掩膜)图像瓦片。默认为false。仅在GeoTIFF导出中支持。
fileFormat (String, optional):
导出图像的字符串文件格式。目前仅支持'GeoTIFF'和'TFRecord',默认为'GeoTIFF'。
formatOptions (ImageExportFormatConfig, optional):
格式特定选项的字典。对于'GeoTIFF':'cloudOptimized'(Boolean),'noData'(float)。对于'TFRecord':请参见https://developers.google.com/earth-engine/guides/tfrecord#formatoptions
priority (Number, optional):
任务在项目中的优先级。优先级较高的任务将优先调度。必须是0到9999之间的整数。默认为100。

代码

var cor = [-119.54665080086161,40.038023972187226]
var geometry = ee.Geometry.Point(cor)
var cor2 = [
  [-119.77142190684849,39.825295708288806],
  [-119.31274270762974,39.825295708288806],
  [-119.31274270762974,40.25006751768576],
  [-119.77142190684849,40.25006751768576],
  [-119.77142190684849,39.825295708288806]
  ]
var geometry2 = ee.Geometry.Polygon(cor2)
Map.centerObject(geometry2)
var sentinel = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")
.filterDate('2021-09-01','2021-10-01')
.filterBounds(geometry)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',45))
.map(function(img){
  var bands = img.select('B.*').multiply(0.0001)
  var ndwi = bands.normalizedDifference(['B3','B8']).rename('ndwi')
  var thr = ndwi.gt(0.1)
  var ndci = bands.normalizedDifference(['B5','B4']).rename('ndci')
  return ndci.updateMask(thr)
  .copyProperties(img,['system:time_start','system:time_end'])
  })
print(sentinel)
Map.addLayer(sentinel.toBands().clip(geometry2), [], 'ndci', false)
var target = sentinel.filterDate('2021-09-08','2021-09-09')
Map.addLayer(target.toBands().select([0]).clip(geometry2), [], 'ndci-target', false)
Export.image.toDrive({
  image: target.mean().clip(geometry2),
  description: 'ndci', 
  scale: 20, 
  region: geometry2, 
  maxPixels: 1e13, 
  crs: 'EPSG:4326',
  folder: 'Chlorophyll'
  })  

结果

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