GEE计算 RSEI(遥感生态指数)
🛰️ 什么是 RSEI?为什么要用它评估生态环境?
RSEI(遥感生态指数,Remote Sensing Ecological Index) 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。
它的设计初衷是用最少的变量,概括最多的生态信息,便于大尺度、自动化地评估城市或自然区域的生态健康状态。
🔍 RSEI 的四大核心因子:
因子 | 代表意义 | 常用遥感指数/数据源 |
---|---|---|
NDVI | 植被覆盖度,代表“绿意” | NIR与红光构建 |
Wet | 土壤/植被含水量,代表“湿润” | Tasseled Cap 湿度因子 |
NDBSI | 裸土+建成区比例,代表“干扰” | 反映裸地和城市建设强度 |
LST | 地表温度,代表“热压力” | Landsat 热红外波段反演地表温度 |
这些因子经过标准化处理后,通过**主成分分析(PCA)**提取出主成分,再归一化成 0–1 范围的指数值,就是最终的 RSEI。
值越大,代表生态质量越好;越接近 0,说明该区域可能存在生态退化、城市扩张、土地干扰等问题。
🛠️ 如何用 GEE 实现 RSEI 计算?(完整流程)
我们以 Landsat 5 2000 年夏季影像为例,结合四川西部地区,进行了如下步骤:
1️⃣ 数据准备
-
使用 GEE 调用 Landsat 5 L2 SR 产品(含大气校正)
-
设置研究时间为 6~9月(植被生长旺季),增强 NDVI 信噪比
-
设置研究区域(AOI)为上传的
chuanxi
区域文件
2️⃣ 遥感因子计算
-
NDVI:NIR 与 RED 构建标准植被指数
-
Wet:用蓝、绿、红、NIR、SWIR 构建湿度因子(Tasseled Cap 线性组合)
-
NDBSI:结合 SI、IBI 等多个裸地指数构建综合干扰指标
-
LST:基于热红外波段,计算辐射亮温并反演地表温度,考虑地表发射率影响
所有因子都经过 标准差标准化(非简单归一化),以增强 PCA 分析的鲁棒性
3️⃣ 主成分分析(PCA)
-
将 4 个标准化指标合并为一个影像堆栈
-
使用 GEE 的
centeredCovariance
计算协方差矩阵 -
求解特征值与特征向量,获取 PC1(第一主成分)作为生态质量主因子
-
反转 PC1,生成原始的生态指数影像(RSEI0)
4️⃣ 归一化处理
-
提取 PC1 的 1%-99% 分位值范围
-
将 RSEI0 线性归一化到 0~1 区间,生成最终 RSEI
5️⃣ 可视化与导出
-
使用配色方案(绿好、红差)展示生态分布差异
-
导出 GeoTIFF 文件,支持 ArcGIS/QGIS 进一步分析
仅部分代码,需完整版代码关注全域智图后台私信
仅部分代码,需完整版代码关注全域智图工作室后台私信
var year = '2000';
var startDate = ee.Date(year + '-06-01');
var endDate = ee.Date(year + '-09-30');
var aoi = ee.FeatureCollection("projects/ee-xu135150/assets/chuanxi");
Map.centerObject(aoi, 6);// 1. Landsat5 预处理
function maskL5sr(image) {var qa = image.select('QA_PIXEL');var mask = qa.bitwiseAnd(1 << 4).eq(0).and(qa.bitwiseAnd(1 << 3).eq(0));return image.updateMask(mask).select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B7','ST_B6']).copyProperties(image, ['system:time_start']);
}var l5 = ee.ImageCollection("LANDSAT/LT05/C02/T1_L2").filterDate(startDate, endDate).filterBounds(aoi).map(maskL5sr).median().clip(aoi);// 检查影像像素覆盖
print("Landsat 5 影像像素计数", l5.reduceRegion({reducer: ee.Reducer.count(),geometry: aoi,scale: 200,maxPixels: 1e13
}));// 波段转换
var B = l5.select('SR_B1').multiply(0.0000275).add(-0.2);
var G = l5.select('SR_B2').multiply(0.0000275).add(-0.2);
var R = l5.select('SR_B3').multiply(0.0000275).add(-0.2);
var NIR = l5.select('SR_B4').multiply(0.0000275).add(-0.2);
var SWIR1 = l5.select('SR_B5').multiply(0.0000275).add(-0.2);-----------------------------------部分代码----------------------------------------// 打印 RSEI 统计
print('RSEI 值域:', RSEI.reduceRegion({reducer: ee.Reducer.minMax(), geometry: aoi, scale: 200, maxPixels: 1e13}));
print('RSEI 均值:', RSEI.reduceRegion({reducer: ee.Reducer.mean(), geometry: aoi, scale: 200, maxPixels: 1e13}));// 5. 可视化
Map.addLayer(NDVI, {min: -2, max: 2, // 标准化后的值域palette: ['#d9f0d3', '#addd8e', '#31a354']
}, 'NDVI (植被指数)');Map.addLayer(Wet, {min: -2, max: 2,palette: ['#f7fbff', '#6baed6', '#08306b']
}, 'Wet (湿度指数)');Map.addLayer(NDBSI, {min: -2, max: 2,palette: ['#ffffcc', '#fd8d3c', '#bd0026']
}, 'NDBSI (裸土指数)');Map.addLayer(LST, {min: -2, max: 2,palette: ['#ffffcc', '#fc8d59', '#d73027']
}, 'LST (温度)');Map.addLayer(RSEI.updateMask(RSEI), {min: 0, max: 1,palette: ['d7191c', 'fdae61', 'ffffbf', 'a6d96a', '1a9641']
}, 'RSEI (生态质量指数)');// 6. 导出 RSEI
Export.image.toDrive({image: RSEI,description: 'RSEI_' + year,folder: 'RSEI_Export',scale: 200,region: aoi,maxPixels: 1e13,fileFormat: 'GeoTIFF'
});