# GEE **Repository Path**: lclIzzxw/gee ## Basic Information - **Project Name**: GEE - **Description**: No description available - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-12-16 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1、基于 GEE 的 NDVI 交互式时序可视化与趋势分析工具 ## 功能: 1. 数据预处理:自动加载 Landsat 8 数据并进行去云处理。 2. NDVI 计算:计算归一化植被指数。 3. 趋势分析 (Trend Map):利用线性回归计算 NDVI 的变化斜率(Slope),并在地图上可视化(变绿还是变黄)。 4. 交互式图表 (UI):点击地图任意位置,右侧面板会自动生成该点的 NDVI 长时序变化曲线,并叠加线性趋势线。 GEE生成青藏高原的NDVI影像,在图中任意位置点击会放回此地区的NDVI时序分析库 image 点击上图右下角可以放大图像(用于科研再合适不过了,注意此图可下载多种图片格式) image ## 本代码有多图层 image ● Selected Point:选中点的可视化(通常是红点或标记,用来显示你点击的位置) ● NDVI Trend Slope:NDVI长期趋势斜率(一般通过Mann-Kendall或线性回归计算得到的每个像元NDVI时间序列的变化速率,单位通常是NDVI/年) ● NDVI Mean (Avg):多年平均NDVI(多时相NDVI的均值图,反映研究区总体植被覆盖水平,上有颜色的图就是为此图层) ● Boundary Outline:研究区/感兴趣区域的边界轮廓(通常是shapefile或FeatureCollection导入后显示的白色或黑色边框) # 2、基于 GEE 的 Sentinel-2 NDMI 交互式时序分析工具 ## (Interactive NDMI Analysis Tool based on Google Earth Engine) ![GEE Badge](https://img.shields.io/badge/Platform-Google%20Earth%20Engine-green) ![Data Badge](https://img.shields.io/badge/Data-Sentinel--2%20MSI-blue) ![Status Badge](https://img.shields.io/badge/Status-Active-success) ## 基于 GEE 的 Sentinel-2 NDMI 交互式时序分析工具 ## 📖 项目简介 (Introduction) 本项目是一个基于 **Google Earth Engine (GEE)** 平台的在线应用程序,旨在利用 **Sentinel-2 (哨兵2号)** 高分辨率遥感影像,对特定区域进行 **NDMI (归一化水分指数)** 的长时序监测与分析。 该工具旨在为生态监测、农业估产及植被含水量分析提供便捷的交互式平台。它支持自动加载预设的感兴趣区域(如海淀区),同时也支持用户手动绘制分析范围。 ## ✨ 核心功能 (Key Features) * **多模式区域选择**: * **默认模式**:自动加载预上传的矢量 Asset (`projects/maxhecheng/assets/haidian`)。 * **交互模式**:支持用户在地图上手动绘制矩形或多边形,程序将自动优先分析绘制区域。 * **自动化数据处理**: * 集成 Sentinel-2 去云算法 (基于 QA60 波段)。 * 自动计算 NDMI 指数。 * 生成指定时间窗口内的中值合成影像 (Median Composite)。 * **动态可视化与分析**: * 提供 NDMI 时间序列折线图,支持查看特定日期的数值。 * 动态加载分级渲染的 NDMI 图层(干旱-湿润色带)。 * 包含交互式图例。 * **多格式数据导出**: * **快速预览**:生成带地理参考的 PNG 缩略图下载链接。 * **科研数据**:支持 **Export to Drive**,导出 GeoTIFF 格式原始数据(便于后续导入 QGIS/ArcGIS 制作专题图)。 * **表格数据**:支持导出时间序列 CSV 文件。 ## 🧮 算法原理 (Algorithm) ### 1. NDMI 计算公式 NDMI (Normalized Difference Moisture Index) 用于检测植被冠层的水分含量。 $$NDMI = \frac{(NIR - SWIR)}{(NIR + SWIR)}$$ 在 Sentinel-2 数据中对应波段为: $$NDMI = \frac{(Band 8 - Band 11)}{(Band 8 + Band 11)}$$ * **Band 8 (NIR)**: 近红外 * **Band 11 (SWIR)**: 短波红外 ### 2. 去云处理 利用 Sentinel-2 的 `QA60` 波段位掩码技术,剔除云层和卷云干扰,确保合成影像的质量。 ## 🚀 快速开始 (Usage) ### 运行环境 * 拥有 Google Earth Engine 账号。 * 浏览器推荐使用 Chrome 或 Edge。 ### 操作步骤 1. **打开脚本链接**:[在此处填入你的 GEE Code Editor 分享链接] 2. **设置参数**: * 在左侧面板输入 **开始日期** 和 **结束日期**。 3. **选择区域**: * *情况 A*:若不进行任何操作,默认分析预设区域(海淀区)。 * *情况 B*:使用地图左上角的绘图工具画一个框,程序将分析你画的框。 4. **运行分析**: * 点击绿色的 **"运行分析 (Run Analysis)"** 按钮。 5. **查看与下载**: * 查看右侧地图渲染结果和左侧时间序列图表。 * 点击 **"创建导出任务"** 按钮,然后在 GEE 右侧 `Tasks` 面板中点击 `Run` 下载 GeoTIFF。 界面展示图 image 导出的PNG image NDMI平均趋势图(注意:可以下载为svg等图像) image ## 🛠️ 技术栈 (Tech Stack) * **Language**: JavaScript (GEE API) * **Data Source**: Copernicus Sentinel-2 MSI: MultiSpectral Instrument, Level-2A * **Frontend**: GEE UI Widgets (Panels, Charts, Buttons) ## 📂 项目结构 ```text``` # 3、基于 GEE 的多源 Landsat 长时序影像融合与中值合成报告 ![GEE Badge](https://img.shields.io/badge/Platform-Google%20Earth%20Engine-green) ![Data Badge](https://img.shields.io/badge/Data-Landsat%205%2F7%2F8%2F9-blue) ![Status Badge](https://img.shields.io/badge/Status-Completed-success) ## 1. 项目背景 (Background) Landsat 系列卫星提供了长达 40 年以上的地球表面观测记录。然而,在进行长时序分析时,单一传感器往往无法覆盖所有时间段(如 L5 覆盖早期,L8/9 覆盖近期)。此外,不同传感器的波段定义和辐射特性存在差异。 本项目旨在基于 Google Earth Engine (GEE) 平台,构建一套自动化工作流,**无缝融合 Landsat 5, 7, 8, 9 四代卫星数据**,通过波段对齐和去云处理,生成高质量的研究区(AOI)中值合成影像(Median Composite)。 ## 效果图 图像可以选择时间区间,点击生成可在gee上生成对应图像 67b33dee-acad-4a89-9cb8-906541e87811 点击创建导出任务,可以获得geotiff影像点击run可保存在Google云盘可以在Google 云盘下载 image 在Google云盘中找到文件保存位置 image geotiff图像可以直接在qgis(或者airgis上加载,生成有图例,有标题的学术图片) 8a5e5750-7380-438b-8b59-74be5f143c12 ## 2. 数据源 (Data Sources) 本项目使用了 USGS Landsat Collection 2 Level-2 (表面反射率) 数据集: | 卫星传感器 | 数据集 ID (GEE) | 时间覆盖 | 备注 | | :--- | :--- | :--- | :--- | | **Landsat 9** | `LANDSAT/LC09/C02/T1_L2` | 2021-至今 | 最新数据 | | **Landsat 8** | `LANDSAT/LC08/C02/T1_L2` | 2013-至今 | 目前主力 | | **Landsat 7** | `LANDSAT/LE07/C02/T1_L2` | 1999-至今 | 含 SLC-off 条带 | | **Landsat 5** | `LANDSAT/LT05/C02/T1_L2` | 1984-2012 | 历史数据 | * **研究区域 (AOI)**: `projects/maxhecheng/assets/haidian` (北京市海淀区矢量边界) ## 3. 技术路线与算法 (Methodology) ### 3.1 核心难点解决方案 为了实现多源融合,必须解决以下一致性问题: 1. **波段号不一致 (Band Misalignment)**: * L8/L9 的近红外波段是 **B5**,而 L5/L7 是 **B4**。 * **解决方案**: 建立波段映射关系,将所有影像的波段统一重命名为标准名称:`['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2']`。 2. **定量化差异 (Scale Factors)**: * Collection 2 数据以整数形式存储。 * **解决方案**: 应用线性缩放公式还原物理值: $$SR = Pixel \times 0.0000275 - 0.2$$ 3. **去云掩膜 (Cloud Masking)**: * 利用 `QA_PIXEL` 波段的位操作 (Bitwise Operation) 识别云和云影。 ### 3.2 处理流程图 ```mermaid graph TD A[开始: 输入时间范围 & AOI] --> B{选择可用数据源} B -->|1984-2012| C[Landsat 5 Collection] B -->|1999-2022| D[Landsat 7 Collection] B -->|2013-至今| E[Landsat 8 Collection] B -->|2021-至今| F[Landsat 9 Collection] C & D --> G[预处理 L5/7] E & F --> H[预处理 L8/9] subgraph 预处理逻辑 G --> G1[去云 QA Mask] G --> G2[应用缩放因子] G --> G3[波段重命名 (B1->Blue...)] H --> H1[去云 QA Mask] H --> H2[应用缩放因子] H --> H3[波段重命名 (B2->Blue...)] end G3 & H3 --> I[数据集合并 (Merge Collection)] I --> J[中值合成 (Median Reducer)] J --> K[裁剪至 AOI] K --> L[输出结果: 可视化 & 导出 GeoTIFF] . ├── code.js # GEE 核心脚本代码 ├── assets/ # (说明) 存放矢量边界数据 │ └── haidian # 默认分析区域 Asset └── README.md # 项目说明文档 ``` # 4、Landsat 8 地表温度(LST) 分地物时空分析工具 > (Spatiotemporal Analysis of LST by Land Cover Types based on GEE) ![GEE Badge](https://img.shields.io/badge/Platform-Google%20Earth%20Engine-green) ![Data Badge](https://img.shields.io/badge/Data-Landsat%208%20%26%20ESA%20WorldCover-blue) ![Status Badge](https://img.shields.io/badge/Status-Active-success) ## 📖 项目简介 (Introduction) 本项目是一个基于 **Google Earth Engine (GEE)** 的在线分析工具,旨在研究不同地表覆盖类型(Land Cover Types)对地表温度(LST)的影响。 传统的地表温度分析通常只关注整个区域的均值,忽略了地物差异。本工具利用 **ESA WorldCover 10m** 高分辨率土地覆盖产品,自动提取研究区内的**森林、建筑、农田、水体、草地**五类典型地物,并基于 **Landsat 8** 热红外波段计算各年份、各月份的温度变化趋势。 ## ✨ 核心功能 (Key Features) * **无需人工训练分类**:直接集成 ESA WorldCover 数据,自动生成高精度地物掩膜 (Mask)。 * **五类地物对比**: * 🌲 **森林 (Trees)** * 🏙️ **建筑 (Built-up)** * 🌾 **农田 (Cropland)** * 💧 **水体 (Water)** * 🌿 **草地 (Grassland)** * **LST 反演与统计**:自动进行去云处理、热红外辐射定标,并转换为摄氏度 (°C)。 * **多维数据可视化**: * **时序图表**:生成五条折线,直观展示不同地物随季节的温度差异(热岛效应分析)。 * **空间分布**:加载特定月份的 LST 均值影像。 ![注意现在时间是3月份的北京显示非常的蓝,如果切换到7,8月就很红了](https://i-blog.csdnimg.cn/direct/e2e63559f9e1448d8d60d9b61b206264.png) * **灵活导出**: * 支持导出 **GeoTIFF** 格式的月度温度分布图。(点击上图的"导出geotiff",在tasks里面就有一个图形下载(run),点击后就可以保存到Google云盘下载后进而可以导入QGIS和ArcGIS) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3d8bd744a7b144eca79bb700ff7f4fcb.png) * 支持导出 **CSV/Excel** 格式的时间序列统计数据。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5b620ce0e2a946d7afd6c16a06409dc6.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0fa0d13429ab4f66b0a91d045bbbd8d5.png) 注意这里可以切换图层且可以切换图层的透明度 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6ce138df013d4d4180e2bb91904cc286.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a7b6eed3f1fc44e5b2fbe27c5a01dd90.png) ## 🧮 数据源与方法 (Data & Methodology) ### 系统架构与流程 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b76d910b12124fae91db96ccea9846c6.png) ### 1. 数据集 (Datasets) | 数据类型 | 数据源 ID (GEE) | 用途 | 分辨率 | | :--- | :--- | :--- | :--- | | **地表温度** | `LANDSAT/LC08/C02/T1_L2` | 提取 `ST_B10` 波段计算 LST | 30m (重采样) | | **土地覆盖** | `ESA/WorldCover/v100` | 提取地物分类标签 | 10m | ### 2. 算法原理 (Algorithm) #### 2.1 地物提取 利用 ESA WorldCover 的 `Map` 值进行重分类掩膜: * Value `10` → 🌲 森林 * Value `30` → 🌿 草地 * Value `40` → 🌾 农田 * Value `50` → 🏙️ 建筑 (不透水面) * Value `80` → 💧 水体 #### 2.2 温度反演公式 将 Landsat 8 的数字量化值 (DN) 转换为摄氏度: $$LST (°C) = (DN \times 0.00341802 + 149.0) - 273.15$$ #### 2.3 区域统计 对于每一景影像 $Image_i$,计算特定地物 $Class_k$ 掩膜区域内的像素均值: $$MeanLST_{i,k} = \frac{1}{N} \sum_{p \in ROI \cap Mask_k} LST(p)$$ ## 🚀 快速开始 (Usage) ### 环境要求 * Google Earth Engine 账号 * 现代浏览器 (Chrome/Edge) ### 操作步骤 1. **打开代码链接**:(在此填入你的 GEE Link) 2. **设置区域**: * *默认*:自动加载海淀区。 * *自定义*:使用地图左上角的绘图工具画一个框,工具将优先分析手绘区域。 3. **配置参数**: * 设置 **开始日期** 和 **结束日期** (例如 `2023-01-01` 至 `2023-12-31`)。 * 输入 **指定月份** (例如 `2023-07`) 用于导出影像。 4. **运行分析**:点击绿色的 **"开始分析 (Run Analysis)"** 按钮。 5. **获取结果**: * **查看图表**:左下角面板将显示五色折线图。 * **下载数据**:点击图表右上角的弹出图标下载 CSV。 * **下载影像**:点击右侧面板的 "导出" 按钮,在 Tasks 中下载 GeoTIFF。 ## 📊 典型分析结果示例 通常情况下,图表将展示明显的**城市热岛效应**与**冷岛效应**: * 📈 **高温组**:建筑用地 (Built-up) 通常温度最高,夏季尤为明显。 * 📉 **低温组**:水体 (Water) 和 森林 (Forest) 温度最低,起到降温作用。 * 〰️ **波动组**:农田 (Cropland) 受季节与耕作影响,温度波动较大(如裸土期温度高,灌溉期温度低)。 # 5、Sentinel-1 SAR 地震滑坡变化检测系统:2022 泸定地震案例 > (Sentinel-1 SAR Change Detection System: 2022 Luding Earthquake Case) ![GEE Badge](https://img.shields.io/badge/Platform-Google%20Earth%20Engine-green) ![Data Badge](https://img.shields.io/badge/Data-Sentinel--1%20SAR-blue) ![Status Badge](https://img.shields.io/badge/Event-Luding%206.8M%20Earthquake-red) ## 📖 项目简介 (Introduction) 本项目基于 **Google Earth Engine (GEE)** 平台,利用全天候、全天时的 **Sentinel-1 合成孔径雷达 (SAR)** 数据,构建了一套针对地质灾害的变化检测系统。 > 原先想做汶川地震,但是汶川2008年时并没有sentinal-1卫星 当前配置专门针对 **2022年9月5日四川泸定 6.8 级地震**。由于地震发生在多云雾的高山峡谷地区,光学卫星(如 Landsat/Sentinel-2)往往受云层遮挡无法及时获取影像,而 SAR 雷达影像具有穿透云雾的能力,是第一时间监测地震诱发滑坡(Landslides)、崩塌(Collapse)及堰塞湖的理想工具。 ## ✨ 核心功能 (Key Features) * **卷帘对比分析 (Split Panel)**: * 集成交互式卷帘工具,左侧显示**震前 (Pre-event)** 影像,右侧显示**震后 (Post-event)** 变化合成影像,支持毫秒级同步拖动对比。 * **RGB 变化检测算法 (RGB Composite)**: * 利用 RGB 假彩色合成技术,将前后时相的雷达回波强度差异转化为直观的颜色(红色/青色),快速识别受灾区域。 * **多时相去噪合成**: * 采用中值 (Median) 合成算法,有效去除 SAR 影像特有的斑点噪声 (Speckle Noise)。 * **数据导出**: * 支持导出 GeoTIFF 格式的**变化差异图 (Difference Map)**,便于后续在 ArcGIS/QGIS 中进行滑坡编目。 ## 📍 案例设置 (Case Study Settings) * **目标事件**:四川泸定 6.8 级地震 * **震发时间**:2022年9月5日 * **研究区域 (AOI)**:`projects/maxhecheng/assets/luding` * **时间窗口**: * 📅 **震前 (Pre)**:2022-08-01 至 2022-09-04 * 📅 **震后 (Post)**:2022-09-06 至 2022-10-06 ## 🧮 算法原理 (Methodology) ### 1. 数据源 使用 `COPERNICUS/S1_GRD` 数据集 (Sentinel-1 Ground Range Detected)。 * **极化方式**:`VH` (Vertical transmit, Horizontal receive)。VH 极化对植被结构和体积散射更敏感,能有效区分滑坡发生前后的地表粗糙度变化。 * **轨道方向**:`DESCENDING` (降轨)。针对川西南北走向的山脉,降轨数据通常能获得较好的观测几何。 ### 2. RGB 变化检测合成 为了直观展示变化,我们构建了以下假彩色合成方案: | 通道 (Channel) | 数据源 (Source) | 物理意义 | | :--- | :--- | :--- | | **R (Red)** | **震后影像 (Post-event)** | 震后回波强度 | | **G (Green)** | **震前影像 (Pre-event)** | 震前回波强度 | | **B (Blue)** | **震前影像 (Pre-event)** | 震前回波强度 | ### 3. 结果解译指南 (Interpretation) 通过上述合成方式,图像颜色代表了特定的地质变化: * 🔴 **红色 / 粉色 (Red/Pink)**:**后向散射增强 (Backscatter Increase)** * **原因**:地震导致原本覆盖植被(较平滑/体积散射)的山体发生滑坡,暴露出**粗糙的岩石和堆积体**。粗糙表面在雷达波下会产生更强的回波。 * **结论**:**滑坡、崩塌、建筑物倒塌废墟**。 * 🔵 **青色 / 蓝色 (Cyan/Blue)**:**后向散射减弱 (Backscatter Decrease)** * **原因**:原本是陆地或植被的区域被水淹没(水体发生镜面反射,回波极低),或者是形成了极为平滑的泥流。 * **结论**:**堰塞湖、水体淹没区**。 * ⚪ **灰色 (Gray)**:**无变化 (No Change)** * **原因**:震前震后雷达强度基本一致。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5aaa6dfa100148df8e16c13cd59d0720.png) ![请添加图片描述](https://i-blog.csdnimg.cn/direct/0666f3590c5145bf89b54bfe74b8b698.gif) ## 🚀 快速使用 (Usage) 1. **加载脚本**:将代码复制到 GEE Code Editor。 2. **确认参数**: * 左侧面板已默认填入泸定地震时间(2022年8月 vs 9月)。 * 如需分析其他地震,请手动修改日期和 ROI。 3. **运行分析**:点击红色的 **"开始分析 (Analyze)"** 按钮。 4. **交互判读**: * 拖动地图中间的分割线。 * 寻找**红色斑块**,这些通常是高位崩塌或滑坡源头。 5. **下载结果**:点击左侧底部的 "数据导出" 按钮,在 Tasks 面板下载 `.tif` 文件。 以下是下载在QGIS中打开的样子 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/36af4ee62fc74137813267475edb43b2.png) 所有亮白/发白的地方 = 地震把山震碎了、房子倒了 所有纯黑小点点 = 地震后突然出现的水(堰塞湖) 灰色区域 = 平安无事 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/30f1f44fd9c642fca65bdff2e883963f.png) # 6、RSEI 生态环境质量智能评估系统 (GEE App) ![GEE Badge](https://img.shields.io/badge/Platform-Google%20Earth%20Engine-green) > **平台:** Google Earth Engine (GEE) > **核心算法:** 主成分分析 (PCA) / 遥感生态指数 (RSEI) ## 📖 项目简介 本项目是一个基于 Google Earth Engine 的自动化遥感生态指数 (RSEI) 计算工具。它集成了 **绿度、湿度、热度、干度** 四大生态指标,利用 **主成分分析 (PCA)** 技术自动构建 RSEI 模型。 **相较于传统版本,本代码解决了以下痛点:** 1. **稳定性修复**: 彻底解决了 GEE 中常见的 `Dimensions mismatch` (矩阵维度不匹配) 错误,采用“客户端权重计算 + 代数加权法”,确保 PCA 永不报错。 2. **可视化增强**: 地图支持 5 层叠加显示 (RSEI + 4个分量),并配备了专属图例。 3. **多维图表**: 内置 3 类统计图表(直方图、均值对比图、分布曲线图),一键分析生态短板。 4. **智能校正**: 自动检测特征向量方向,确保 RSEI 数值逻辑正确 (数值越高,生态越好)。 ----- ## 🛠️ 主要功能 ### 1\. 四大生态指标自动计算 脚本自动处理 Landsat 8 影像,计算以下指标: * **🟢 绿度 (Greenness):** 使用 **NDVI** (归一化植被指数) 表征植被覆盖。 * **💧 湿度 (Wetness):** 使用 **Tasseled Cap Wet** (缨帽变换湿度分量) 表征土壤/植被含水量。 * **🔥 热度 (Heat):** 使用 **LST** (地表温度) 表征城市热岛效应。 * **🏜️ 干度 (Dryness):** 使用 **NDBSI** (建筑指数 SI + 裸土指数 IBI) 表征地表硬化程度。 ### 2\. 交互式分析面板 * **时间滑块**: 自由选择年份 (2014-2023),默认筛选夏季 (6-9月) 影像以获得最佳植被表现 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0de634f72330471989dd8e519d00d4ac.png) * **图层管理**: 可在地图上自由切换查看单一分量,通过颜色直观判断区域是“太热”还是“太干”。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d3de072a0c90483dbdec84958426c490.png) * **图表看板**: * **RSEI 分布图**: 了解整体生态得分分布。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b45da476b4604a20bc45c888005f67b5.png) * **分量均值对比**: 快速识别该区域的主要生态制约因素。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5210af8f6a62492b8f1a8f563023dc6a.png) * **数值分布曲线**: 详细查看各指标的数据分布形态。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1b343e7c9de2456ca45ea553595ef6e2.png) ### 3\. 结果导出 支持一键将计算好的 RSEI 结果导出为 **GeoTIFF** 格式至 Google Drive,保留地理坐标,方便在 ArcGIS/QGIS 中进一步制图。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/74e08e6b131b4161b137ac2934393b2e.png) ----- ## 🚀 快速开始 ### 1\. 设置分析区域 (ROI) 代码默认使用了我的测试 Asset ID,**请务必修改为你自己的区域**,否则可能无法运行或权限报错。 找到代码第 **13** 行: ```javascript // ❌ 原始代码 (可能无权限) var roi = ee.FeatureCollection("projects/maxhecheng/assets/haidian"); // ✅ 修改方式 1: 使用你上传的 Shapefile (Asset ID) var roi = ee.FeatureCollection("users/你的用户名/你的文件名"); // ✅ 修改方式 2: 使用简单的几何点缓冲区 (测试用) var roi = ee.Geometry.Point([116.3, 39.95]).buffer(10000); ``` ### 2\. 运行代码 1. 将完整代码复制到 [GEE Code Editor](https://code.earthengine.google.com/)。 2. 点击上方的 **Run** 按钮。 3. 在右侧面板选择年份,点击 **"🚀 开始全指标分析"**。 ----- ## 📊 结果解读指南 ### 图层颜色说明 | 图层 | 颜色条 | 含义 | | :--- | :--- | :--- | | **RSEI (生态指数)** | 红 ➝ 绿 | **绿色**越深,生态质量越**好** | | **绿度 (NDVI)** | 白 ➝ 绿 | **绿色**越深,植被越茂密 | | **湿度 (Wet)** | 灰 ➝ 蓝 | **蓝色**越深,水分越充足 | | **热度 (LST)** | 蓝 ➝ 红 | **红色**越深,地表温度越**高** (负面) | | **干度 (Dry)** | 绿 ➝ 红 | **红色**越深,建筑/裸土越**多** (负面) | ### 图表分析技巧 * **柱状图 (均值对比)**: * 如果 **干度 (Dry)** 柱子最高:说明该区域建筑密度大,硬化严重。 * 如果 **热度 (Heat)** 柱子最高:说明热岛效应是主要问题。 * 如果 **绿度 (Green)** 柱子很低:说明缺绿。 * **曲线图**: * 理想的生态城市,绿度和湿度曲线应偏右 (高值),热度和干度曲线应偏左 (低值)。 ### GEE界面总览 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/da3ef434d6ea4cea82406f2d9638b241.png) ----- ## ⚠️ 常见问题 (FAQ) **Q: 为什么提示 "No images found"?** A:可能是该年份在选定区域云量过多 (代码默认过滤 \>30% 云量)。 * **解决方法**: 尝试更换年份,或在代码中调整 `CLOUD_COVER` 阈值,或放宽日期范围。 **Q: 为什么 RSEI 只有 0 或 1?** A: 这种情况通常是极端值归一化导致的。 * **解决方法**: 代码中已设置 `bestEffort: true` 和较大的 `scale` 来缓解此问题。如果依然出现,说明区域内可能有异常像素(如大面积水体或云)。 **Q: 为什么 PC1 计算不会报错了?** A: 传统写法直接在 Server 端进行矩阵相乘,容易因像素对齐问题导致 `Dimensions mismatch`。本版本采用了**混合计算法**:先在 Client 端获取特征向量权重,再用简单的代数加权公式生成 PC1,稳定性提升 100%。 ----- # 7、VIIRS 夜间灯光监测工具 这是一个基于 **Google Earth Engine (GEE)** 的交互式应用程序,用于监测、分析和下载 NOAA VIIRS 月度夜间灯光数据。该工具集成了动态可视化、时序分析、GIF 动图生成以及**批量数据导出到 Google Drive** 的功能。 ## ✨ 主要功能 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/a5b1acd6597b44d08ec9255c4ee59366.gif) image 1. **自定义时间范围**: 支持用户输入任意年份范围(2014年至今),一键更新面板数据。 >注意不一定是最新的今天,因为 GEE 数据更新会有一定延迟 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/189429fc36364f6da12a4706cf3c56be.png) 2. **交互式图层浏览**: * **年份滑块**: 加载指定年份的所有月度数据。 * **月份滑块**: 快速切换当前年份下的月份图层,查看细节。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e1d7b76419be43e5a7f516b7e0af31e4.png) 注意图层处也可以选择显示某年某月的数据 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2d1e4f7b68cc42d4b7583328587e0986.png) 3. **时序趋势分析**: 集成交互式图表,点击图表上的数据点,地图会自动跳转到对应的年份和月份。 4. **GIF 动图生成**: * 自动生成所选时间段内的灯光变化动图。 * **直接下载链接**: 提供生成的 `.gif` 文件下载链接,无需通过 Drive 即可保存预览。 * ![请添加图片描述](https://i-blog.csdnimg.cn/direct/0daff164ccd24a049d8de2ac261526ac.gif) 5. **数据批量导出 (增强功能)**: * **按月批量导出**: 一键将选中年份的所有月度影像导出到 Google Drive (Tasks)。 * **均值导出**: 导出整个时间段内的平均灯光强度图。 * ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1711567d7a16457e8db74ed49aafd7b4.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/168de7b64b0c4362b39012468aacdd14.png) ## 🛠️ 数据集信息 * **数据源**: `NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG` * **波段**: `avg_rad` (平均辐射亮度) * **分辨率**: 约 500米 * **可视化阈值**: 0 (黑) - 60 (白) ## 🚀 快速开始 ### 1\. 必要的配置 (重要) 代码中使用了自定义的感兴趣区域 (ROI)。在运行代码前,请务必修改 **第 8 行** 的 `roi` 变量为你自己的资产路径或几何图形。 ```javascript // 修改前 var roi = ee.FeatureCollection("projects/maxhecheng/assets/chengdu"); // 修改示例 (使用几何图形) // var roi = ee.Geometry.Polygon([...]); // 或者使用你自己的 table assets // var roi = ee.FeatureCollection("users/your_username/your_shapefile"); ``` ### 2\. 使用指南 #### 🕒 设置时间 在左侧面板顶部输入**开始年份**和**结束年份**,点击 **`🔄 更新并刷新`** 按钮。系统将重新计算图表并加载数据。 #### 🗺️ 浏览地图 * 拖动 **年份滑块** 加载特定年份的数据。 * 拖动 **月份滑块** 在地图上切换 1-12 月的显示。 #### 📊 趋势分析 点击左侧面板下方的折线图。点击图表上的任意一点,地图会自动跳转到该时间点,方便对比异常值。 #### 💾 数据下载 * **导出当前年份**: 点击 `📥 导出当前选中年份的所有月度数据`。 * *操作*: 此时右侧 **Tasks** 面板会出现 12 个任务,点击 `Run` 即可保存到 Google Drive 的 `VIIRS_Export_YYYY` 文件夹中。 * **导出均值**: 点击 `📥 导出整个时段的平均值图` 保存多主要时段的平均影像。 #### 🎞️ 动图下载 地图右下角会自动生成预览动图。点击下方的蓝色链接 **`⬇️ 点击下载 .gif 动图`** 即可直接将动图保存到本地。 ## 📂 输出文件说明 | 导出类型 | 文件命名格式 | 存储位置 (Drive) | | :--- | :--- | :--- | | **月度数据** | `VIIRS_YYYY_MM.tif` | 文件夹: `VIIRS_Export_YYYY` | | **均值数据** | `VIIRS_Mean_StartYear_EndYear.tif` | 文件夹: `VIIRS_Export_Mean` | ## ⚠️ 注意事项 1. **Tasks 面板**: 点击导出按钮后,必须去 GEE 编辑器右侧的 `Tasks` 选项卡点击 `Run` 才能真正开始下载。 2. **GIF 生成速度**: 如果研究区域 (ROI) 非常大,生成 GIF 下载链接可能需要几秒钟到几分钟的时间。 3. **数据缺失**: 如果某一年份 NOAA 没有数据(或尚未发布),控制台会打印 "⚠️ 无数据" 的提示。 # 8、 基于 GEE 通过 NDVI 进行作物产量预测 **GEE Crop Yield Prediction Professional Platform** 这是一个基于 **Google Earth Engine (GEE)** 云计算平台开发的交互式农业监测工具。该平台集成了多源遥感数据(Sentinel-2 与 Landsat 8/9),通过自动化的去云处理和植被指数计算,实现对特定区域作物的长势监测与产量潜力估算。 ## ✨ 核心功能 * **多源卫星支持**: 支持 **Sentinel-2** (10m, 5天重访) 和 **Landsat 8/9** (30m, 16天重访) 数据无缝切换。 * **自动化预处理**: 内置针对不同传感器的 QA 波段去云算法,自动剔除云和云影干扰。 * **动态产量建模**: 基于生长季最大 NDVI (Max Value Composite) 的产量估算模型。 * **交互式分析面板**: * **实时图表**: 自动生成 NDVI 时序生长曲线、产量分布直方图。 * **统计指标**: 自动计算并显示区域内的平均产量(吨/公顷)。 * **动态图例**: 地图左下角根据数据自动渲染图例组件。 ![功能总览](https://i-blog.csdnimg.cn/direct/c246c6f1278049e595d45f3b47cdf58e.png) ## 🛠️ 算法与数据处理 ### 1\. 数据清洗机制 脚本根据选择的卫星源自动匹配处理流程: * **Sentinel-2**: 使用 `QA60` 波段。 * [cite_start]逻辑: 屏蔽 Bit 10 (不透明云) 和 Bit 11 (卷云) [cite: 10, 11, 12]。 * [cite_start]阈值: 过滤云量 \> 20% 的影像 [cite: 14]。 * **Landsat 8/9**: 使用 `QA_PIXEL` 波段。 * [cite_start]逻辑: 屏蔽 Bit 3 (云) 和 Bit 4 (云影) [cite: 17]。 * [cite_start]校正: 应用 Scale Factor (`0.0000275 * DN - 0.2`) 转换为地表反射率 [cite: 18]。 ### 2\. 产量预测模型 (核心逻辑) 本平台采用基于植被指数的经验回归模型: 1. [cite_start]**特征提取**: 计算时间窗口内的 **最大 NDVI** (`seasonalMaxNDVI`),代表作物生长最旺盛时期的状态 [cite: 26]。 2. [cite_start]**非耕地掩膜**: 剔除 NDVI \< 0.25 的像素(水体、裸土、建筑)[cite: 28]。 3. **估算公式 (示例)**: $$Yield (t/ha) = 12.5 \times NDVI_{max} - 1.5$$ [cite_start]*(注:此为演示参数,实际应用请参考“开发者自定义指南”进行修改)* [cite: 27]。 ----- ## 🚀 快速使用指南 1. **启动平台**: 在 GEE Code Editor 中运行脚本。 2. **设置参数** (左侧面板): **Region**: 选择预设的示范区(如:河南驻马店-冬小麦)。 **Satellite**: 选择数据源(推荐 Sentinel-2 以获得更高清晰度)。 **Date Range**: 输入作物生长季的开始与结束日期 (格式 YYYY-MM-DD)。 3. **执行分析**: 点击 **"执行分析 / Run Analysis"** 按钮 。 4. **查看结果**: * **地图**: 查看产量空间分布(红=低产,绿=高产)。 **图表**: 底部面板显示生长曲线与产量分布。 **数据**: 面板显示具体的“区域平均产量”数值。 ----- ## 🔧 开发者自定义指南 (修改源码) 本节详细说明如何修改代码以适配您自己的研究区域和农学模型。 ### 4.1 如何自定义研究区域 (ROI) 默认代码使用矩形坐标。您可以通过修改 `rois` 对象来添加新区域。 ![默认添加了三处区域,可以根据以下步骤进行修改](https://i-blog.csdnimg.cn/direct/62c5b140455c4122b4821ec31732e29f.png) **步骤:** 1. 找到代码顶部的 **14 - 18 行** 左右的 `var rois = { ... };` 部分。 ```javascript var rois = { '河南驻马店 (冬小麦)': ee.Geometry.Rectangle([114.0, 32.8, 114.2, 33.0]), '黑龙江建三江 (水稻)': ee.Geometry.Rectangle([132.5, 47.1, 132.7, 47.3]), '山东德州 (夏玉米)': ee.Geometry.Rectangle([116.2, 37.3, 116.4, 37.5]) }; ``` 2. **方法 A (添加坐标)**: 如果您知道经纬度范围。 ```javascript var rois = { // 格式: [最小经度, 最小纬度, 最大经度, 最大纬度] '我的自定义区域': ee.Geometry.Rectangle([115.0, 34.0, 115.5, 34.5]), // ...保留其他区域 }; ``` 3. **方法 B (使用 Shapefile)**: 如果您上传了矢量文件到 Assets。 ```javascript var rois = { // 必须使用 .geometry() 获取边界 '我的县域边界': ee.FeatureCollection("users/您的用户名/您的文件名").geometry(), }; ``` 4. 修改后,重新运行代码,下拉菜单中即会出现新选项。 ### 4.2 如何修改产量预测公式 默认公式仅为线性演示。请根据您的地面实测数据进行修改。 **步骤:** 1. 定位到 `runAnalysis` 函数内部,约 **第 184-186 行** 。 2. 找到以下代码段: ```javascript var predictedYield = seasonalMaxNDVI.expression( '12.5 * NDVI - 1.5', {'NDVI': seasonalMaxNDVI} ).rename('Yield_Prediction'); ``` 3. **修改场景示例**: * **场景 1: 调整线性系数** (例如:$y = 20x + 5$) 将 `'12.5 * NDVI - 1.5'` 修改为 `'20 * NDVI + 5'`。 * **场景 2: 二次多项式模型** (例如:$y = -10x^2 + 15x$) 修改为 `'(-10 * NDVI * NDVI) + (15 * NDVI)'`。 * **场景 3: 指数模型** (例如:$y = 5 \times e^{2x}$) 修改为 `'5 * exp(2 * NDVI)'`。 ### 4.3 如何调整可视化阈值 如果修改公式后,地图显示的颜色全红或全绿,说明预测值超出了预设的显示范围 (2-10 t/ha)。 **步骤:** 1. 定位到 **第 195 行** 左右: ```javascript var yieldVis = {min: 2, max: 10, palette: [...]}; ``` 2. 根据您的产量范围修改 `min` (最小值) 和 `max` (最大值)。 * *例如:如果是单产较高的玉米,可能需要设置为 `{min: 5, max: 15}`。* ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8c4c521fceb84171b1be945db32dd982.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7262362e9bf34e1a8b5b853faeb5e65a.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4298329df5734362b042e92c2f447250.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/20d94a306a6e4745b3ddcacbd9a640b8.png) ----- ## ⚠️ 注意事项 1. **云量影响**: 如果选定的时间窗口内阴雨天气过多,Sentinel-2 可能因云量过滤导致部分区域出现空洞(无数据)。此时建议: * 扩大时间窗口。 * 切换为 Landsat 卫星(重访周期不同,可能正好有晴空数据)。 2. [cite_start]**尺度效应**: 图表统计中的 `.scale(30)` 参数 [cite: 34] 决定了计算精度。对于极大区域(如全省),建议将其调大(如 100或500),以避免 GEE 计算超时 (Computation Time Out)。 3. **模型适用性**: 本工具提供的仅为计算框架。**严禁直接使用默认参数 (12.5, -1.5) 进行真实的农业投产决策**,必须结合当地农学实验数据进行参数本地化校准。 ----- # 9、基于 GEE 的区域蒸散发时序分析与动态评估系统 基于 Google Earth Engine (GEE) Code Editor 的交互式脚本,用于区域蒸散(ET)监测。支持多种数据集、动态图例、投影修复、时序图表、均值影像显示以及动画 GIF 生成。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/deb44aaaa8d74b7ea5423a0d5c348620.png) ## 主要特性 - **支持多种ET数据集** - MOD16A2GF(MODIS 全球 ET/PET) - PML_V2(高精度 ET 及组分:ET_water、Ec、Es、Ei、GPP) - **区域加载优化**:从 Assets 加载矢量边界,自动简化几何并修复投影问题,避免常见报错 - **动态图例**:每次可视化时自动生成并更新图例(包含单位和数值标签) - **交互式UI面板**:清晰的分区操作(区域加载 → 时间选择 → 数据/波段选择 → 分析) - **核心功能** - 计算并显示指定时段的均值影像 - 生成区域内时序变化折线图 - 提供均值影像 GeoTIFF 下载链接 - 生成并下载动画 GIF(带图例) - **稳定性增强**:强制重投影为 EPSG:4326,解决部分数据集投影不一致导致的错误 | 数据源名称 | 数据集 ID | 可用波段 (Bands) | 分辨率 | 说明 | | :--------- | :----------------------------- | :-------------------------------------------------- | :----- | :----------------------- | | MOD16A2 | MODIS/061/MOD16A2GF | ET (总蒸散发)
PET (潜在蒸散发) | 500m | NASA 经典全球ET产品 | | PML_V2 | CAS/IGSNRR/PML/V2_v018 | ET_water (水体蒸发)
Ec (植被截留)
Es (土壤蒸发)
Ei (冠层蒸腾)
GPP (初级生产力) | 500m | 结合彭曼公式的高精度产品 | ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0780928443f543a8b4142583da1a08f2.png) ## 使用方法 1. 打开 [Google Earth Engine Code Editor](https://code.earthengine.google.com/) 2. 新建一个脚本,将下方完整代码复制粘贴进去 3. 点击 **Run** 运行脚本 4. 左侧将出现控制面板,按照顺序操作即可: ### 操作步骤 1. **区域选择** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d49a2e3354b14456b090d1ee15490be2.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/333b13929cda4f8ba0d39a7299cb760f.png) - 在文本框中输入你的 Assets 矢量表 ID(如 `users/yourname/your_region`) - 点击 **“加载并修复区域几何”** - 成功后地图会居中显示红色边界 2. **时间与数据选择** - 使用两个 DateSlider 分别设置起始和结束时间(默认 2022 年上半年) - 选择数据集(默认 MOD16A2) - 选择需要显示的波段(会根据数据集自动更新选项) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8f2c950477d349348875753e425f3195.png) 3. **执行分析** - 点击 **“执行分析”**: - 显示时段均值影像 - 自动生成动态图例 - 显示区域平均值时序图 - 提供 GeoTIFF 下载链接 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/38f6c6e765134f568a12ad23a71497c1.png) - 点击 **“生成动图”**: - 生成时间序列动画 GIF - 显示缩略图并提供下载链接 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dfb90f7c185c4b428304eeec4ebb1a56.png) ## 注意事项 - 确保你的 Assets 矢量表已共享给 Earth Engine(至少读取权限) - 大区域或长时间范围可能导致计算超时,建议先用小区域测试 - PML_V2 数据集的 GPP 波段单位特殊(gC/m²/8day),脚本已自动处理 - 动图生成时使用了 EPSG:3857 投影以获得更好的视觉效果 - 脚本已尽量优化稳定性,如仍出现投影错误,可尝试进一步降低 `simplify(100)` 的容差值 ## 代码说明(可选阅读) - `DATA_CONFIG`:集中管理数据集参数,便于后续扩展 - `updateLegend()`:动态创建/移除图例,避免图例叠加 - `processCol()`:统一处理集合,包括强制重投影和单位缩放 - 所有可视化参数均可根据需要调整(位于 `DATA_CONFIG` 或 `COMMON_PALETTE`) # Sentinel-2 水体叶绿素 a (Chl-a) 质量浓度反演工具 [![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg.shields.io%2Fbadge%2FGoogle%2520Earth%2520Engine-powered-brightgreen&pos_id=img-8WAWJmE6-1766133089203)](https://earthengine.google.com/) [![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg.shields.io%2Fbadge%2FData-Sentinel--2%2520SR-blue&pos_id=img-PEe8iVy4-1766133089204)](https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED) ## 项目简介 本工具是一个基于 **Google Earth Engine (GEE)** 平台的交互式遥感监测系统,利用 **Sentinel-2** 多光谱影像,通过 **NDCI (Normalized Difference Chlorophyll Index)** 算法反演水体叶绿素 a (Chl-a) 质量浓度。 主要功能包括: - 动态时间范围选择 - 用户自定义感兴趣区域 (ROI) 绘制 - 自动去云处理与水体掩膜提取 - 叶绿素 a 浓度空间分布可视化 - 时间序列趋势图表分析 - 区域统计信息显示 - 结果导出至 Google Drive (GeoTIFF 格式) 适用于湖泊、河流、水库等内陆水体的富营养化监测与水质评估。 ## 算法原理 ### 1. 去云处理 使用 Sentinel-2 的 QA60 波段去除浓云与卷云影响,同时将反射率乘以 0.0001 进行尺度转换。 ### 2. 水体提取 采用 **MNDWI (Modified Normalized Difference Water Index)**: ``` MNDWI = (Green - SWIR1) / (Green + SWIR1) ``` 水体阈值:MNDWI > 0 ### 3. 叶绿素 a 反演 采用 **NDCI (Normalized Difference Chlorophyll Index)**: ``` NDCI = (Red Edge - Red) / (Red Edge + Red) // 对应 Sentinel-2 的 B5 和 B4 ``` 经验线性模型(针对中国典型内陆水体): ``` Chl-a (mg/m³) = NDCI × 14.5 + 15.0 ``` > 注意:该经验公式基于特定区域实测数据拟合,仅供参考。不同水体类型可能需要重新校准。 ## 使用说明 ### 第一步:设置时间范围 在左侧控制面板中修改起始日期和结束日期(格式:`YYYY-MM-DD`)。 默认范围:2023-01-01 至 2023-12-31 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/83cd62414e7a4fd1b5b2be874aee5030.png) ### 第二步:绘制感兴趣区域 (ROI) 1. 点击地图左侧绘图工具栏(矩形、多边形等) 2. 在地图上绘制或选择监测区域 3. 如不绘制,默认使用当前地图视口范围(本次以翻阳湖为例) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/329a9b1b8e5f4ecebd584e3c2c07e18c.png) 三图层展示 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a35ed2d3509144e99d345bf5a4c58f80.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6bac7468d0a44a93895965363cf4f7cc.png) ### 第三步:执行分析 点击 **🚀 执行分析** 按钮,系统将自动: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cefeb4e638ac49d4a04532196b467656.png) - 筛选云量 < 20% 的影像 - 计算中值合成影像 - 显示真彩色、水体指数、Chl-a 浓度图层 - 生成时间序列趋势图 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b1c02594dc3242adb5b35d70ea3aaeae.png) - 计算区域平均浓度 - 添加浓度图例 ### 第四步:导出结果 分析完成后会出现 **💾 导出分析结果** 按钮,点击即可将 Chl-a 浓度栅格导出至 Google Drive。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/12644f98b8264463bac7533f4e847e22.png) ## 可视化参数 ### Chl-a 浓度图层配色方案 | 浓度范围 (mg/m³) | 等级 | 颜色 | |------------------|--------|-----------| | 0 - 10 | 极低 | 深蓝 | | 10 - 20 | 低 | 青色 | | 20 - 30 | 中 | 绿色 | | 30 - 40 | 较高 | 黄色 | | 40 - 50 | 高 | 橙色 | | 50+ | 极高 | 红色 | ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dd07c1991c4f4f80b34e85fb24fd2588.png) ## 在Qgis中成像 叶绿素分布 叶绿素分布 ## 注意事项 - 大区域 + 长时段可能导致计算超时,建议: - 缩小时间范围 - 减小 ROI 面积 - 工具已优化 `scale` 和 `maxPixels`,可处理较大水域 - 冬季或高纬度地区影像较少,可能无数据返回 - 结果仅为遥感反演估算值,建议结合实地采样验证 # 11、GLC_FCS30D 2020 年土地覆盖分析工具 ## 项目概述 本项目是一个基于 **Google Earth Engine (GEE) JavaScript** 的交互式土地覆盖分析工具,使用 **GLC_FCS30D** 2020 年全球 30m 分辨率土地覆盖数据集,对指定区域(示例中为北京市海淀区)进行可视化、统计与导出。 主要功能包括: - 支持**精细分类(35 类)**与**主要大类(14 类)**两种显示模式 - 交互式地图显示与图例 - 面积统计并绘制**饼图(占比)**与**柱状图(面积)** - 一键导出裁剪后的 TIF 影像与 CSV 统计表格 ## 示例运行结果(海淀区) ### 图1:GLC_FCS30D 2020 年土地覆盖地图(精细分类) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d94cc4664d724e569f07bb1efde1f39c.png) (绿色区域主要为常绿/落叶林,黄色为旱地农田,灰色/红色为城市不透水面) ### 图2:土地覆盖占比饼图(主要大类简化后) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/58f0815fe5de409ab8bb67947af0d390.png) 主要类别占比(示例数据): - 旱地农田:20.1% - 城市/不透水:48.5% - 灌溉农田:10.2% - 落叶阔叶(密):8.2% - 其他类别占比合计约 13% ### 图3:各类别面积柱状图 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/85f5fd1ca0954936b68198c2450f6c94.png) 城市/不透水面积最高(约 208 km²),旱地农田次之(约 86 km²),草本覆盖约 43 km²。 ### 图4:统计表格(CSV 示例) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/34439f60303c414baa032f7a40e4ab5d.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a9b2d5263f8a4d0eb5d2fa1efff7b233.png) | 类别 | 面积 (km²) | |--------------|---------------| | 旱地农田 | 86.411835 | | 草本覆盖 | 86.4116876 | | 灌溉农田 | 43.80251701 | | 城市/不透水 | 208.7849357 | | ... | ... | (实际数据以导出的 CSV 为准) ## 代码说明 ### 1. 数据源加载 ```javascript var dataset = ee.ImageCollection("projects/sat-io/open-datasets/GLC-FCS30D/annual"); var lc2020 = dataset.mosaic().select('b21'); // 选取2020年波段 ``` ### 2. 分类体系与可视化参数 精细分类(35 类):使用原始分类值(10~220),定义了完整的颜色调色板 palette 与中文名称 classNamesCN 主要大类(14 类):通过 remap() 将 35 类合并为 14 个主要类别,便于宏观分析 ### 3. 研究区(AOI)设置(代码 第 46行) ```javascript JavaScriptvar aoiFc = ee.FeatureCollection('projects/maxhecheng/assets/haidian'); // 请替换为自己的资产路径 var aoi = aoiFc.geometry(); 修改提示:将上述路径更换为您自己的行政区划或自定义区域资产。 ``` ### 4. 交互界面(UI Panel) 图层选择下拉框(精细/主要分类) “统计面积并绘图”按钮:计算各类别面积并生成饼图+柱状图 - 导出按钮: - 导出 TIF 影像(30m 分辨率,裁剪至 AOI) - 导出 CSV 统计表格(类别 + 面积 km²) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e096114f72d542d9849be331e5fe1009.png) ### 5. 核心统计函数(generateStats) 关键改进点: 使用` updateMask(img.gt(0)) `排除值为 0 的像元,避免统计错误 `ee.Reducer.sum().group()` 按类别汇总面积 通过字典 `idToNameDict / majorIdToNameDict` 将类别 ID 转换为中文名称 使用` bestEffort: true `防止大区域计算内存溢出 ### 6. 图例动态刷新 根据当前显示模式自动更新右下角图例。 使用方法 打开` Google Earth Engine Code Editor`https://code.earthengine.google.com/ 新建脚本,粘贴全部代码 修改 AOI 路径 为您自己的区域资产```(代码 第 46行)``` ```javascript JavaScriptvar aoiFc = ee.FeatureCollection('projects/maxhecheng/assets/haidian'); // 请替换为自己的资产路径 var aoi = aoiFc.geometry(); 修改提示:将上述路径更换为您自己的行政区划或自定义区域资产。 ``` ```年份切换```b21 是 20 年 , b20 是 19 年 GLC_FCS30D数据集的波段与年份对应关系: b1 = 2002年 b2 = 2003年 ... b21 = 2020年(当前设置) b22 = 2021年 ```javascript // b21 波段代表 2020 年 var lc2020 = dataset.mosaic().select('b21'); ``` 点击 Run 运行 在左侧面板选择图层、点击统计按钮查看结果 使用导出按钮将影像或表格保存到 Google Drive ### 7.完整代码 ```javascript // =============================================================== // GLC_FCS30D 2020年 土地覆盖分析工具 // =============================================================== // 1. 数据源初始化:GLC_FCS30D annual 瓦片拼接 var dataset = ee.ImageCollection("projects/sat-io/open-datasets/GLC-FCS30D/annual"); // b21 波段代表 2020 年 var lc2020 = dataset.mosaic().select('b21'); // ==================== 2. 定义可视化参数与中文名称 ==================== // --- A. 精细分类 (35类) --- var palette = [ '#ffff64', '#ffff64', '#aaf0f0', '#006400', '#704489', '#9d6969', '#00ff00', '#00d000', '#8fad8f', '#006400', '#00a000', '#003c00', '#285000', '#286400', '#788200', '#8ca000', '#be9600', '#966400', '#ffb432', '#ffdcd2', '#ff0000', '#a0a0a0', '#003c00', '#c31400', '#fff5d7', '#d7d7d7', '#a0a0a0', '#ffc0c0', '#003c00' ]; var classIds = [ 10, 11, 12, 20, 51, 52, 61, 62, 71, 72, 81, 82, 91, 92, 120, 121, 122, 130, 140, 150, 160, 170, 180, 190, 200, 201, 202, 210, 220 ]; var classNamesCN = [ '旱地农田', '草本覆盖', '乔木/灌木', '灌溉农田', '常绿阔叶(疏)', '常绿阔叶(密)', '落叶阔叶(疏)', '落叶阔叶(密)', '常绿针叶(疏)', '常绿针叶(密)', '落叶针叶(疏)', '落叶针叶(密)', '混交林(疏)', '混交林(密)', '灌木地', '常绿灌木', '落叶灌木', '草地', '地衣苔藓', '稀疏植被', '淡水淹没林', '咸水淹没林', '淹没灌木/草', '城市/不透水', '裸地', '固结裸地', '未固结裸地', '水体', '冰雪' ]; var idToNameDict = ee.Dictionary.fromLists(classIds.map(function(n){ return String(n) }), classNamesCN); // --- B. 主要大类 (14类简化) --- var majorRemap = lc2020.remap( classIds, [1,1,1,2,3,3,4,4,5,5,6,6,7,7,8,8,8,9,10,11,12,12,12,13,14,14,14,15,16], 0 ); var majorPalette = [ '#ffff64', '#aaf0f0', '#006400', '#00ff00', '#8fad8f', '#00a000', '#285000', '#788200', '#ffb432', '#ff0000', '#c31400', '#fff5d7', '#ffc0c0', '#d7d7d7' ]; var majorNamesCN = [ '农田', '灌溉农田', '常绿阔叶', '落叶阔叶', '常绿针叶', '落叶针叶', '混交林', '灌木/草地', '稀疏/苔藓', '淹没植被', '城市', '裸地', '水体', '冰雪' ]; // 构建简化的字典用于统计 var majorIdList = [1,2,3,4,5,6,7,8,9,12,13,14,15,16]; var majorIdToNameDict = ee.Dictionary.fromLists(majorIdList.map(function(n){ return String(n) }), majorNamesCN); // ==================== 3. 区域设置 (AOI) - 极简模式 ==================== // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 请在这里修改你的路径 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ var aoiFc = ee.FeatureCollection('projects/maxhecheng/assets/haidian'); // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ var aoi = aoiFc.geometry(); Map.centerObject(aoiFc, 10); // ==================== 4. UI 面板 ==================== var panel = ui.Panel({style: {width: '400px', padding: '10px'}}); ui.root.insert(0, panel); panel.add(ui.Label('GLC_FCS30D 2020 土地覆盖', {fontSize: '18px', fontWeight: 'bold'})); // 图层切换 var layerSelect = ui.Select({ items: ['精细分类 (35类)', '主要大类 (14类)'], value: '精细分类 (35类)', onChange: updateMap }); panel.add(ui.Label('图层选择:')); panel.add(layerSelect); // 统计按钮 var chartPanel = ui.Panel(); var btnStats = ui.Button('📊 统计面积并绘图', generateStats); panel.add(btnStats); panel.add(chartPanel); // 导出按钮 panel.add(ui.Label('数据导出:', {fontWeight: 'bold', margin: '10px'})); var btnExpImg = ui.Button('导出 TIF 影像', function() { Export.image.toDrive({ image: lc2020.clip(aoi), description: 'GLC2020_Export', folder: 'GEE_Exports', region: aoi, scale: 30, maxPixels: 1e13 }); print('影像导出任务已创建'); }); var btnExpTab = ui.Button('导出 CSV 表格', function() { generateStats(true); // 调用统计并触发导出 print('表格导出任务已创建'); }); panel.add(ui.Panel([btnExpImg, btnExpTab], ui.Panel.Layout.flow('horizontal'))); // ==================== 5. 逻辑函数 ==================== function updateMap() { Map.layers().reset(); Map.addLayer(aoiFc.style({color: 'red', fillColor: '00000000', width: 2}), {}, 'AOI'); var mode = layerSelect.getValue(); if (mode === '主要大类 (14类)') { Map.addLayer(majorRemap.clip(aoi), {min: 1, max: 16, palette: majorPalette}, '主要分类'); updateLegend(majorNamesCN, majorPalette); } else { Map.addLayer(lc2020.clip(aoi), {min: 10, max: 220, palette: palette}, '精细分类'); updateLegend(classNamesCN, palette); } } // 简单的图例刷新 var legendPanel = ui.Panel({style: {position: 'bottom-right', padding: '8px', backgroundColor: 'white'}}); Map.add(legendPanel); function updateLegend(names, colors) { legendPanel.clear(); legendPanel.add(ui.Label('图例', {fontWeight: 'bold'})); for (var i = 0; i < names.length; i++) { if(i >= colors.length) break; legendPanel.add(ui.Panel([ ui.Label('', {backgroundColor: colors[i], padding: '8px', margin: '0 8px 0 0'}), ui.Label(names[i]) ], ui.Panel.Layout.flow('horizontal'))); } } // 统计核心 (含Pie Chart string修复) function generateStats(isExport) { if(!isExport) { chartPanel.clear(); chartPanel.add(ui.Label('计算中...')); } var mode = layerSelect.getValue(); var isMajor = mode === '主要大类 (14类)'; var img = isMajor ? majorRemap : lc2020; // ================= 修复代码开始 ================= // 将值为 0 的像元设为透明(不参与统计),防止字典查找报错 img = img.updateMask(img.gt(0)); // ================= 修复代码结束 ================= var areaImg = ee.Image.pixelArea().divide(1e6).addBands(img.rename('class')); var stats = areaImg.reduceRegion({ reducer: ee.Reducer.sum().group({groupField: 1, groupName: 'classId'}), geometry: aoi, scale: 30, maxPixels: 1e13, bestEffort: true // 建议加上这个,防止大面积计算时内存溢出 }); var groupList = ee.List(stats.get('groups')); var chartFc = ee.FeatureCollection(groupList.map(function(item) { var d = ee.Dictionary(item); // 将数字转为整数再转字符串,确保格式匹配(如 10.0 -> "10") var cIdStr = ee.Number(d.get('classId')).format('%d'); var dictToUse = isMajor ? majorIdToNameDict : idToNameDict; // 使用 get 的第二个参数作为默认值,彻底防止报错 var name = dictToUse.get(cIdStr, '未定义类别'); return ee.Feature(null, {'类别': name, '面积(km²)': d.get('sum'), 'Label': name}); })); if (isExport === true) { Export.table.toDrive({ collection: chartFc, description: 'GLC2020_Stats', folder: 'GEE_Exports', fileFormat: 'CSV', selectors: ['类别', '面积(km²)'] }); return; } // 绘图 var pieChart = ui.Chart.feature.byFeature(chartFc, 'Label', '面积(km²)') .setChartType('PieChart') .setOptions({title: '占比', colors: isMajor ? majorPalette : palette}); var colChart = ui.Chart.feature.byFeature(chartFc, 'Label', '面积(km²)') .setChartType('ColumnChart') .setOptions({title: '面积统计', legend: {position: 'none'}, colors: ['#1E90FF']}); chartPanel.clear(); chartPanel.add(pieChart); chartPanel.add(colChart); } // 初始化运行 updateMap(); ```