GEE与NDVI的解释
1、GEE
Google Earth Engine(GEE)是由谷歌开发的一款强大的地理信息处理平台,它可以用于大规模地理空间数据的存储、分析和可视化。以下是 GEE 的一些主要特点:
大规模计算能力:GEE 提供了大规模并行计算的能力,允许用户在全球范围内处理庞大的地理信息数据集。
多源数据集集成:GEE 整合了来自多个卫星、传感器和数据提供商的地理信息数据,包括遥感影像、气象数据、地形数据等。
JavaScript 编程接口:用户可以使用 JavaScript 编写脚本,利用 GEE 提供的丰富 API 进行地理空间数据的处理和分析。
遥感数据处理:GEE 提供了丰富的遥感图像处理功能,包括图像合成、分类、变化检测等。
空间分析:GEE 支持各种空间分析方法,如缓冲区分析、空间查询等。
时序数据分析:GEE 可以处理时间序列数据,方便用户进行时序分析,比如 NDVI 时间序列分析等。
可视化和图表展示:GEE 提供了地图显示功能,可以将分析结果以地图或图表的形式展示出来。
共享和发布:用户可以将自己的脚本、数据和分析结果共享给其他人,也可以将结果发布为 Web 应用。
免费访问和使用:GEE 提供了免费的基本访问权限,同时也有一些高级功能需要购买额外的许可证。
GEE 在许多领域都有广泛的应用,包括环境科学、农业、林业、城市规划等。它为研究人员、政府部门、环保组织等提供了一个强大的工具,用于处理和分析地理信息数据,从而支持科学研究和环境保护工作。
2、NDVI
归一化差异植被指数(Normalized Difference Vegetation Index,NDVI)是一种用于评估植被覆盖程度和生长状况的遥感指数。它是由美国科学家罗伯特·朗根(Robert R. Ranson)提出的。
NDVI 利用遥感影像中的红光和近红外波段的反射率来计算,公式如下:
其中:NIR 代表近红外波段的反射率。RED 代表红光波段的反射率。
NDVI 值的范围从 -1 到 +1,其解释如下:
-1 到 0:代表非常稀疏的植被或无植被区域,比如沙漠、岩石等。
0:代表没有植被,比如水体、城市等非植被区域。
0 到 +1:表示植被覆盖度增加,值越高表示植被越茂盛,+1 表示非常茂盛的植被。
通常来说,以下是一些 NDVI 值的一般解释:
-1.0:无植被
0.0 - 0.1:稀疏植被
0.2 - 0.5:中等植被
0.6 - 0.9:浓密植被
+1.0:非常浓密的植被
NDVI 在农业、林业、生态学、地质学等领域都有广泛的应用,可以用于监测植被的生长状况、变化检测、土地利用分类等。
利用GEE获取区域NEVI——以孔雀河流域为例
GEE编程界面:
利用MODIS卫星获取NVDI数据代码如下,shp文件首先需要上传到Assests中,这段代码会生成指定区域的NDVI的tif文件,文件会保存在谷歌云盘中:
// 加载指定的 Shapefile
var shp = ee.FeatureCollection('projects/ee-pengbr3003/assets/Kongquehe_watershed');
// 定义一个函数,用于计算NDVI并将其作为属性添加到Feature中
var addNDVI = function(feature) {
var geometry = feature.geometry();
var startDate = '2021-01-01'; // 替换为开始日期
var endDate = '2021-12-31'; // 替换为结束日期
var modisNDVI = ee.ImageCollection('MODIS/006/MOD13A1')
.filterDate(startDate, endDate)
.select('NDVI');
var ndvi = modisNDVI.mean().clip(geometry);
return feature.set({NDVI: ndvi});
};
// 使用函数处理Shapefile中的每个Feature
var shpWithNDVI = shp.map(addNDVI);
// 合并所有 NDVI 图像
var ndviImages = shpWithNDVI.aggregate_array('NDVI');
var mergedNDVI = ee.ImageCollection.fromImages(ndviImages).toBands();
// 导出为 GeoTIFF
Export.image.toDrive({
image: mergedNDVI,
description: 'merged_ndvi_export', // 导出文件的名称
folder: 'GEE_exports', // 导出文件的目录
region: shp.geometry().bounds(), // 导出区域为 Shapefile 区域的外接矩形
scale: 250, // 设置输出图像的分辨率(以米为单位)
crs: 'EPSG:4326' // 设置输出图像的坐标参考系统
});
// 显示 NDVI 结果
Map.addLayer(mergedNDVI, {min: -10000, max: 10000, palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301']}, 'Merged NDVI');
QGIS展示tif文件,最小值-657,最大值4623:
归一化NDVI代码,波段值/10000:
// 加载指定的 Shapefile
var shp = ee.FeatureCollection('projects/ee-pengbr3003/assets/Kongquehe_watershed');
// 定义一个函数,用于计算归一化 NDVI 并将其作为属性添加到 Feature 中
var addNormalizedNDVI = function(feature) {
var geometry = feature.geometry();
var startDate = '2021-01-01'; // 替换为开始日期
var endDate = '2021-12-31'; // 替换为结束日期
var modisNDVI = ee.ImageCollection('MODIS/006/MOD13A1')
.filterDate(startDate, endDate)
.select('NDVI');
var ndvi = modisNDVI.mean().clip(geometry);
// 计算归一化 NDVI
var normalizedNDVI = ndvi.divide(10000); // 归一化到 -1 到 1 的范围
return feature.set({Normalized_NDVI: normalizedNDVI});
};
// 使用函数处理 Shapefile 中的每个 Feature
var shpWithNormalizedNDVI = shp.map(addNormalizedNDVI);
// // 合并所有归一化 NDVI 图像
var normalizedNDVIImages = shpWithNormalizedNDVI.aggregate_array('Normalized_NDVI');
var mergedNormalizedNDVI = ee.ImageCollection.fromImages(normalizedNDVIImages).toBands();
// 导出为 GeoTIFF
Export.image.toDrive({
image: mergedNormalizedNDVI,
description: 'merged_normalized_ndvi_export', // 导出文件的名称
folder: 'GEE_exports', // 导出文件的目录
region: shp.geometry().bounds(), // 导出区域为 Shapefile 区域的外接矩形
scale: 250, // 设置输出图像的分辨率(以米为单位)
crs: 'EPSG:4326' // 设置输出图像的坐标参考系统
});
// 显示归一化 NDVI 结果
Map.addLayer(mergedNormalizedNDVI, {min: -1, max: 1, palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301']}, 'Merged Normalized NDVI');
QGIS展示,最小值-0.065,最大值0.46:
我们可以利用R语言改变tif文件的波段值范围同样实现归一化,代码如下:
library(raster)
library(sp)
# 打开.tif文件
input_file <- "merged_ndvi_export.tif"
output_file <- "merged_normalized_ndvi_export.tif"
raster_data <- raster(input_file)
# 获取波段的最小值和最大值
min_value <- minValue(raster_data)
max_value <- maxValue(raster_data)
# 设置新的最小值和最大值范围
new_min <- min_value/10000
new_max <- max_value/10000
# 调整波段范围
adjusted_raster <- ((raster_data - min_value) / (max_value - min_value)) * (new_max - new_min) + new_min
# 保存修改后的.tif文件
writeRaster(adjusted_raster, output_file, format="GTiff")