Google Earth Engine(GEE) 代码详解:批量计算_年 NDVI 并导出(附 Landsat 8 数据处理全流程)

一、代码整体目标

基于 Landsat 8 卫星数据,批量计算 2013-2020 年研究区的 NDVI(归一化植被指数),实现去云处理、数据合成、可视化及批量导出为 GeoTIFF 格式,适用于植被动态监测、生态环境评估等场景。

二、代码分步解析(含核心原理与易错点)
1. 加载并显示研究区边界
var roi = table; // 假设table是用户上传的矢量边界(如SHP文件)
Map.centerObject(roi, 8); // 地图居中显示研究区,缩放级别8(适合省级/较大区域)
Map.addLayer(roi, {color: 'yellow'}, '研究区'); // 黄色高亮显示边界

关键点roi需提前通过 GEE 的Assets上传矢量数据(支持 SHP、KML 等),或用ee.Geometry绘制。缩放级别 8 表示地图比例尺约 1:500 万,可根据研究区大小调整(数值越大,缩放越近)。

2. 去云与辐射定标函数(核心预处理)
<
### 如何在 Google Earth Engine计算归一化植被指数 (NDVI)Google Earth Engine (GEE) 中,可以通过处理遥感影像数据来计算归一化植被指数 (Normalized Difference Vegetation Index, NDVI)[^2]。NDVI 是一种常用的指标,用于评估植被健康状况和密度。其定义如下: \[ NDVI = \frac{(NIR - Red)}{(NIR + Red)} \] 其中 \( NIR \) 表示近红外波段反射率,\( Red \) 表示红光波段反射率。 以下是基于 GEE 的 Python 和 JavaScript 实现方法的详细说明以及代码示例。 #### 使用 Python 计算 NDVI 通过 Python 定义函数将其应用于图像集合中的每张图像,可以实现批量计算 NDVI 值[^2]。下面是一个完整的代码示例: ```python import ee # 初始化地球引擎 ee.Initialize() # 加载 Landsat 8 图像集 landsat = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR') # 过滤日期范围和地理区域 filtered = landsat.filterDate('2020-01-01', '2020-12-31') \ .filterBounds(ee.Geometry.Point(-122.08, 37.42)) # 定义 NDVI 函数 def add_ndvi(image): ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI') return image.addBands(ndvi) # 应用 NDVI 函数到图像集合 with_ndvi = filtered.map(add_ndvi) # 打印带有 NDVI 波段的结果 print(with_ndvi.first().bandNames().getInfo()) ``` 此代码加载了 Landsat 8 数据,应用了一个自定义函数 `add_ndvi` 来为每个图像添加一个新的 NDVI 波段。 --- #### 使用 JavaScript 计算 NDVI JavaScriptGEE 平台上的默认脚本语言之一。以下是如何利用 Sentinel-2 或其他卫星数据源计算 NDVI 的示例代码: ```javascript // 定义研究区 var roi = ee.Geometry.Rectangle([76.8, 19.0, 78.0, 20.0]); // 加载 Sentinel-2 数据 var sentinel2 = ee.ImageCollection('COPERNICUS/S2'); // 筛选时间范围内的图像 var filtered = sentinel2.filterDate('2021-01-01', '2021-12-31') .filterBounds(roi); // 添加 NDVI 波段 function addNDVI(image) { var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI'); return image.addBands(ndvi); } var withNDVI = filtered.map(addNDVI); // 可视化 NDVI 结果 Map.centerObject(roi, 8); var visParams = {min: 0, max: 1, palette: ['red', 'yellow', 'green']}; Map.addLayer(withNDVI.select('NDVI').mean(), visParams, 'NDVI Mean'); ``` 上述代码展示了如何从 Sentinel-2 数据集中提取 B8(近红外)和 B4(红色)波段,计算它们之间的差异以生成 NDVI 影像[^3]。 --- #### 解决 GLCM 特征无结果问题 如果尝试使用灰度共生矩阵 (GLCM) 提取纹理特征而未获得预期结果,则可能是因为输入参数设置不当或缺少必要的预处理步骤[^1]。建议验证以下几点: 1. 输入影像是否已去云、校正大气影响; 2. 是否选择了合适的窗口大小进行局部统计分析; 3. 验证所使用的算法版本与文档描述一致。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做科研的周师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值