2025/12/27 10:09:10
网站建设
项目流程
做淘宝网站的编程实例,如何用网站做淘客,360免费wifi驱动,网站建设加优化目录
一、基础环境配置
#xff08;一#xff09;研究区与地图设置
#xff08;二#xff09;时间范围定义
二、核心函数定义
#xff08;一#xff09;云去除函数#xff08;针对不同 Landsat 传感器#xff09;
1. Landsat 4/5/7 云去除#xff08;rmL457Clou…目录一、基础环境配置一研究区与地图设置二时间范围定义二、核心函数定义一云去除函数针对不同 Landsat 传感器1. Landsat 4/5/7 云去除rmL457Cloud2. Landsat 8/9 云去除rmL8Cloud二遥感指数计算函数AddIndices三、卫星影像数据加载与预处理一波段映射与标准化二Landsat 8/9 数据加载与预处理三Landsat 7 数据加载与预处理四影像集合合并与指数添加四、结果计算与可视化一NDVI 均值图计算与可视化二频率图计算绿度、冠层、淹没1. 绿度频率Greenness_frequency2. 冠层频率Canopy_frequency3. 淹没频率Inundation_frequency4. 频率计算与可视化五、关键技术要点总结六、运行结果若觉得代码对您的研究 / 项目有帮助欢迎点击打赏支持需要完整代码的朋友打赏后可在后台私信复制文章标题发给我我会尽快发您完整可运行代码感谢支持详情请参考基于 GEE 多源 Landsat 影像识别红树林分布区域-CSDN博客本代码基于 Google Earth EngineGEE平台针对 2018-2020 年指定研究区域整合 Landsat 7 和 Landsat 8/9 卫星的 C02 级地表反射率数据通过云去除、波段标准化、植被与水体指数计算最终生成 NDVI 均值图及绿度、冠层、淹没频率图用于生态环境如植被覆盖、湿地 inundation 等时空特征分析。一、基础环境配置一研究区与地图设置var roi AOI; // 定义研究区域AOI为预先设定的矢量边界 Map.addLayer(roi, {color: grey}, StudyArea); // 在地图上添加研究区图层灰色显示 Map.centerObject(roi,11); // 地图中心定位到研究区缩放级别111-20数值越大越精细核心作用确定分析范围可视化研究区边界便于后续数据筛选与结果查看。关键说明AOI需提前在 GEE 中导入或绘制如 shp 矢量文件转换的 GEE 资产缩放级别可根据研究区大小调整。二时间范围定义var year_start 2018; // 起始年份 var year_end 2020; // 结束年份核心作用限定卫星影像的时间筛选范围后续数据加载仅获取该时段内的影像。二、核心函数定义一云去除函数针对不同 Landsat 传感器Landsat 卫星影像受云、云影、积雪、卷云干扰需通过质量控制波段QA_PIXEL进行掩码处理。1. Landsat 4/5/7 云去除rmL457Cloudfunction rmL457Cloud(image) { var qa image.select(QA_PIXEL); // 选择质量控制波段 // 基于比特位筛选干扰项GEE中QA_PIXEL波段比特位定义固定 var cloudShadow qa.bitwiseAnd(1 3); // 3号比特位云影 var snow qa.bitwiseAnd(1 4); // 4号比特位积雪 var cloud qa.bitwiseAnd(1 5); // 5号比特位云 // 生成掩码排除云影、积雪、云的像素值为0的保留1的剔除 var mask cloudShadow.eq(0).and(snow.eq(0)).and(cloud.eq(0)); // 二次掩码排除波段不完整的边缘像素 var mask2 image.mask().reduce(ee.Reducer.min()); // 应用掩码并保留原始影像属性时间、元数据等 return image.updateMask(mask).updateMask(mask2) .copyProperties(image) .copyProperties(image, [system:time_start, system:time_end]); }2. Landsat 8/9 云去除rmL8Cloudfunction rmL8Cloud(image) { var qa image.select(QA_PIXEL); // 新增6号比特位卷云Landsat 8/9新增卷云检测需额外排除 var cloudShadow qa.bitwiseAnd(1 3); var snow qa.bitwiseAnd(1 4); var cloud qa.bitwiseAnd(1 5); var cirrus qa.bitwiseAnd(1 6); // 掩码排除云影、积雪、云、卷云 var mask cloudShadow.eq(0).and(snow.eq(0)).and(cloud.eq(0)).and(cirrus.eq(0)); return image.updateMask(mask) .copyProperties(image, [system:time_start, system:time_end]); }核心差异Landsat 8/9 新增卷云检测比特位需额外排除卷云干扰Landsat 7 无卷云波段需补充边缘像素掩码。关键原理bitwiseAnd(1 n)表示提取 QA_PIXEL 波段的第 n 位比特值eq(0)表示保留该比特位为 0无对应干扰的像素。二遥感指数计算函数AddIndices通过卫星影像的光学波段计算常用生态环境指数用于表征植被覆盖、水体分布等。function AddIndices(image) { // 1. NDVI归一化植被指数(近红外-红)/ (近红外红)值域[-1,1]高值代表高植被覆盖 var ndvi image.normalizedDifference([nir, red]).rename(NDVI); // 2. MNDWI改进型归一化水体指数(绿-短波红外1)/ (绿短波红外1)高值代表水体 var mNDWI image.normalizedDifference([green, swir1]).rename(MNDWI); // 3. LSWI陆地表面水分指数(近红外-短波红外1)/ (近红外短波红外1)高值代表高水分 var lswi image.normalizedDifference([nir, swir1]).rename(LSWI); // 4. EVI增强型植被指数减少大气和土壤背景干扰更适合高植被覆盖区 var evi image.expression( 2.5 * ((B5 - B4) / (B5 6 * B4 - 7.5 * B1 1)), { B1: image.select(blue), // 蓝波段 B4: image.select(red), // 红波段 B5: image.select(nir) // 近红外波段 } ).rename(EVI); // 5. 衍生指数水分指数与植被指数的差值表征植被水分胁迫或湿地特征 var lswi2ndvi lswi.subtract(ndvi).rename(LSWI2NDVI); var lswi2evi lswi.subtract(evi).rename(LSWI2EVI); // 将计算的指数作为新波段添加到原始影像 return image.addBands(ndvi) .addBands(evi) .addBands(lswi) .addBands(lswi2ndvi) .addBands(lswi2evi); }NDVI/EVI植被覆盖度指标EVI 抗干扰能力更强MNDWI/LSWI水体 / 水分含量指标LSWI2NDVI/LSWI2EVI衍生指标可用于区分湿地高水分 高植被与普通植被。三、卫星影像数据加载与预处理一波段映射与标准化不同 Landsat 传感器的波段编号不同需统一命名为通用波段名蓝、绿、红、近红外等便于后续统一处理。// Landsat 8/9 C02级波段SR_B2蓝SR_B3绿SR_B4红SR_B5近红外SR_B6短波红外1SR_B7短波红外2 var LC8_BANDS [SR_B2, SR_B3, SR_B4, SR_B5, SR_B6, SR_B7]; // Landsat 7 C02级波段SR_B1蓝SR_B2绿SR_B3红SR_B4近红外SR_B5短波红外1SR_B7短波红外2 var LC7_BANDS [SR_B1, SR_B2, SR_B3, SR_B4, SR_B5, SR_B7]; var STD_NAMES [blue, green, red, nir, swir1, swir2]; // 通用波段名二Landsat 8/9 数据加载与预处理var l8 ee.ImageCollection(LANDSAT/LC08/C02/T1_L2) // GEE内置Landsat 8 C02级地表反射率数据集 .filterBounds(roi) // 筛选研究区内的影像 .filter(ee.Filter.calendarRange(year_start, year_end, year)) // 筛选时间范围 .map(function(image) { // 光谱波段缩放C02级数据原始值为整数需转换为真实反射率GEE官方缩放系数 var opticalBands image.select(SR_B.).multiply(0.0000275).add(-0.2); // 热红外波段缩放转换为真实温度值 var thermalBands image.select(ST_B.*).multiply(0.00341802).add(149.0); // 替换原始波段为缩放后的波段 return image.addBands(opticalBands, null, true) .addBands(thermalBands, null, true); }) .map(rmL8Cloud) // 应用云去除函数 .select(LC8_BANDS, STD_NAMES); // 波段重命名为通用名三Landsat 7 数据加载与预处理var l7 ee.ImageCollection(LANDSAT/LE07/C02/T1_L2) // Landsat 7 C02级数据集 .filterBounds(roi) .filter(ee.Filter.calendarRange(year_start, year_end, year)) .map(function(image) { var opticalBands image.select(SR_B.).multiply(0.0000275).add(-0.2); // Landsat 7仅1个热红外波段ST_B6缩放逻辑与Landsat 8一致 var thermalBands image.select(ST_B6).multiply(0.00341802).add(149.0); return image.addBands(opticalBands, null, true) .addBands(thermalBands, null, true); }) .map(rmL457Cloud) // 应用Landsat 4/5/7云去除函数 .select(LC7_BANDS, STD_NAMES);四影像集合合并与指数添加// 合并Landsat 7和8的影像集合按时间排序 var L78Col ee.ImageCollection(l7.merge(l8)) .sort(system:time_start) .map(AddIndices); // 对每幅影像计算遥感指数 // 释放内存GEE中大型集合可手动释放避免内存溢出 l7 null; l8 null;四、结果计算与可视化一NDVI 均值图计算与可视化// 可视化配色方案从紫色到红色中间为绿色系适配NDVI值域 var paletteVis D8BFD8, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400, 3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, FF0000; // 计算所有影像的NDVI均值裁剪到研究区 var NDVIMean L78Col.select(NDVI).mean().clip(roi); // 添加到地图默认不显示false可在GEE界面手动勾选 Map.addLayer(NDVIMean, {min: 0, max: 1, palette: paletteVis}, NDVIMean, false);意义NDVI 均值图反映研究区 2018-2020 年平均植被覆盖水平值越高植被越茂密。二频率图计算绿度、冠层、淹没频率图反映某一特征如 “高水分 高植被”在研究时段内出现的比例单位%用于分析时空稳定性。1. 绿度频率Greenness_frequencyvar Greenness L78Col.map(function(image) { // 筛选“高水分LSWI0且高植被EVI0.2”的像素1表示满足0不满足 var pixels_water image.select(LSWI).gt(0); var pixel_veg image.select(EVI).gt(0.2); return pixels_water.and(pixel_veg); // 逻辑与同时满足两个条件 }).sum(); // 对所有影像求和得到满足条件的影像次数2. 冠层频率Canopy_frequencyvar Canopy L78Col.map(function(image) { // 筛选“高水分LSWI0.3且高植被覆盖NDVI0.3”的像素 var pixels_water image.select(LSWI).gt(0.3); var pixel_veg image.select(NDVI).gt(0.3); return pixels_water.and(pixel_veg); }).sum();3. 淹没频率Inundation_frequencyvar Inundation L78Col.map(function(image) { // 筛选“水分-植被指数≥0”的像素表征湿地或淹没植被 var pixels_water image.select(LSWI2NDVI).gte(0); var pixel_veg image.select(LSWI2EVI).gte(0); return pixels_water.or(pixel_veg); // 逻辑或满足任一条件 }).sum();4. 频率计算与可视化// 计算研究时段内的有效影像总数按红波段计数排除云掩膜后的无效影像 var ImgTotal L78Col.select(red).count().clip(roi); // 频率 满足条件的次数 / 总影像数 × 100转换为百分比 var Greenness_frequency Greenness.divide(ImgTotal).multiply(100).clip(roi); var Canopy_frequency Canopy.divide(ImgTotal).multiply(100).clip(roi); var Inundation_frequency Inundation.divide(ImgTotal).multiply(100).clip(roi); // 添加到地图默认不显示 Map.addLayer(Greenness_frequency, {min: 0, max: 100, palette: paletteVis}, Greenness_frequency, false); Map.addLayer(Canopy_frequency, {min: 0, max: 100, palette: paletteVis}, Canopy_frequency, false); Map.addLayer(Inundation_frequency, {min: 0, max: 100, palette: paletteVis}, Inundation_frequency, false);绿度频率高值区域为长期保持 “高水分 高植被” 的区域如湿地、森林冠层频率高值区域为长期高植被覆盖且水分充足的区域如成熟森林、灌溉农田淹没频率高值区域为长期处于淹没或高水分状态的区域如河流、湖泊、沼泽。五、关键技术要点总结数据标准化Landsat 7/8 的波段编号与缩放系数不同需统一命名和转换确保后续指数计算一致性云去除逻辑基于 QA_PIXEL 波段的比特位掩码针对不同传感器的干扰类型卷云、边缘像素差异化处理指数选择结合 NDVI/EVI植被、LSWI/MNDWI水分及衍生指数全面表征生态环境特征频率分析通过 “条件筛选 - 求和 - 归一化” 流程将时序影像转换为频率图反映特征的时间稳定性。六、运行结果研究区地理位置研究区长期平均植被覆盖度计算结果可视化研究区湿地植被湿润 高活性出现频率计算结果可视化研究区郁闭型湿地植被冠层出现频率计算结果可视化研究区淹没和积水出现频率计算结果可视化若觉得代码对您的研究 / 项目有帮助欢迎点击打赏支持需要完整代码的朋友打赏后可在后台私信复制文章标题发给我我会尽快发您完整可运行代码感谢支持