当前位置: 首页 > news >正文

教程:按年份导出中国县级 NDVI(月均值 CSV)

教程:按年份导出中国县级 NDVI(月均值 CSV)

// -------------------- 1. 载入中国县级边界 --------------------
var china_county = ee.FeatureCollection("projects/ee-tilmacatanla/assets/boundry/china_county");
// china_county 是 FeatureCollection,包含中国所有县的几何和属性(gb、name等)
// 后续会对每个县计算 NDVI 均值
// -------------------- 2. 年份与月份列表 --------------------
var years = ee.List.sequence(2000, 2025); // 生成 2000~2025 的年份列表
var months = ee.List.sequence(1, 12);    // 生成 1~12 月份列表
// -------------------- 3. 耕地掩膜 --------------------
var landcover = ee.Image("COPERNICUS/Landcover/100m/Proba-V-C3/Global/2018").select('discrete_classification'); // 选取土地分类波段
var mask_crop = landcover.eq(40); // 只保留耕地(值为40),其他区域掩膜
// -------------------- 4. 循环处理每一年 --------------------
years.getInfo().forEach(function(y){var year = ee.Number(y); // 转为 ee.Number,以便在 Earth Engine 中使用
  // ---------------- 每年每月计算 NDVI ----------------var monthlyList = months.map(function(m){var startDate = ee.Date.fromYMD(year, m, 1);      // 月初var endDate   = startDate.advance(1, 'month');    // 下月月初
    var modisCol = ee.ImageCollection("MODIS/061/MOD13Q1").filterDate(startDate, endDate) // 筛选当月数据.select('NDVI');                // 选择 NDVI 波段
    // 如果无数据,用占位影像 -9999var ndviImage = ee.Algorithms.If(modisCol.size().gt(0),            // 如果有数据modisCol.mean().divide(10000),    // 计算月平均并归一化到0-1ee.Image.constant(-9999).rename('NDVI') // 无数据,用常数占位);
    ndviImage = ee.Image(ndviImage).updateMask(mask_crop); // 仅保留耕地 NDVI
    // ---------------- 按县计算 NDVI 均值 ----------------var countyNDVI = ndviImage.reduceRegions({collection: china_county,       // 每个县计算reducer: ee.Reducer.mean(),     // 求平均 NDVIscale: 250,                     // 分辨率 250mcrs: 'EPSG:4326',               // 坐标参考系tileScale: 4                    // 避免大区域计算溢出}).map(function(f){return f.set('year', year)      // 添加年份属性.set('month', m)        // 添加月份属性.set('NDVI', f.get('mean')) // reduceRegions 默认生成 mean 字段.set('Name', f.get('name'))// 添加县名.set('GB', f.get('gb'));   // 添加区划代码});
    return countyNDVI; // 返回当前月份每个县的 NDVI FeatureCollection});
  // flatten 成单个 FeatureCollection(12 个月合并)var fcYear = ee.FeatureCollection(monthlyList).flatten();
  // ---------------- 导出 CSV ----------------Export.table.toDrive({collection: fcYear,                          // 待导出的 FeatureCollectiondescription: 'China_County_NDVI_' + year.getInfo(), // 导出任务描述folder: 'China_NDVI_2000_2025',             // Google Drive 文件夹fileNamePrefix: 'China_County_NDVI_' + year.getInfo(), // 文件名前缀fileFormat: 'CSV',                           // CSV 格式selectors: ['GB','Name','year','month','NDVI'] // CSV 列顺序});
  // 控制台提示,方便监控进度print('准备导出年份:', year);
});

🔹 功能总结

  1. 年份循环:2000–2025,每年生成一个 CSV
  2. 月份循环:每年 12 个月,计算每月平均 NDVI
  3. 耕地掩膜:只统计耕地 NDVI
  4. 县级统计:使用 reduceRegions 按县求均值
  5. 无数据处理:MODIS 无数据月份用 -9999 占位
  6. 导出 CSV:每年一个文件,每行包含 1 个县 1 个月的数据

🔹 使用注意事项

  • 导出任务是异步的:运行脚本后需在 “Tasks” 手动点击 Run
  • 早期年份 MODIS 数据可能缺失:NDVI 为 -9999
  • scale 和 tileScale:大范围计算时需调节,避免溢出
  • 输出文件夹China_NDVI_2000_2025 需提前在 Drive 创建

明白了,你想把这篇教程最后一步“使用 Open Earth Engine 批量运行导出任务”补充完整。我来帮你整理成清晰的步骤说明,适合直接放在教程里。


Open Earth Engine 批量运行导出任务(补充说明)

在前面示例中,我们通过 GEE 脚本生成了多年的月均值 Sentinel-2 导出任务(例如 2019–2022 年,每月 1 个影像,总共 48 个任务)。如果手动点击每个任务的 RUN,不仅繁琐,而且容易出错。使用 Open Earth Engine 插件可以一键批量启动。

1. 确认插件已安装并加载

  1. 打开 Chrome 浏览器 → 点击右上角“三点” → 设置扩展程序
  2. 打开 Chrome 网上应用店 → 搜索 Open Earth Engine → 点击 添加至 Chrome
  3. 安装后浏览器右上角会显示插件图标。

2. 配置插件权限

  • 点击插件图标 → 管理扩展程序

  • 确保:

    • 允许访问文件 URL
    • 在所有网站上运行
  • 重启浏览器,并重新打开 GEE 控制台。

如果权限不足,Tasks 面板顶部不会显示“RUN ALL”按钮。

3. 批量启动任务

  1. 在 GEE 脚本运行后,确认 Tasks 面板生成所有导出任务(如 S2_L2A_2019_1S2_L2A_2019_2 …)。
  2. 点击 Tasks 面板顶部的 RUN ALL 按钮。
  3. 插件会自动为每个任务启动导出,依次将结果发送到 Google Drive 指定文件夹。

4. 导出结果查看

  • 打开 Google Drive → 找到脚本中设置的文件夹(如 Sentinel2_L2A

  • 每个月的月均值影像文件按命名规则保存,例如:

    S2_L2A_2019_1.tif
    S2_L2A_2019_2.tif
    …
    S2_L2A_2022_12.tif
    
  • 文件可直接用于 ArcGIS、ENVI 等遥感分析软件。


🔹 小技巧

  1. 任务顺序:插件会按 Tasks 面板的顺序启动,确保命名有序,方便后续批处理。
  2. 任务数量大时:可分批创建任务(如每年 12 个任务),避免 GEE 任务队列溢出。
  3. 检查导出状态:插件启动任务后,仍需关注任务状态,确保导出成功。

总结

  • GEE 脚本负责“数据处理 + 导出任务生成”
  • Open Earth Engine 插件负责“一键批量启动导出”,极大提升工作效率
  • 二者结合,实现“从数据预处理到结果导出”的全流程高效化
http://www.dtcms.com/a/353146.html

相关文章:

  • 【87页PPT】新能源汽车解决方案(附下载方式)
  • 把 AI 塞进「盲文点显器」——基于触觉反馈的离线双向翻译笔
  • 【RAG】使用llamaindex进行RAG开发
  • 【前端】Devtools使用
  • 日志输出触发的死锁问题排查记录
  • Android 中 spinner / AppCompatSpinner 文字颜色 和 显示样式 源码分析
  • 如何轻松地将数据从安卓设备传输到安卓设备
  • 构建AI智能体:十五、超越关键词搜索:向量数据库如何解锁语义理解新纪元
  • 使用 html2canvas + jspdf 实现页面元素下载为pdf文件
  • Transformer 模型在自动语音识别(ASR)中的应用
  • 华为L420国产笔记本(统信UOS桌面专业版1070)安装openEuler2403虚拟机
  • 基于Spring Boot的民宿服务管理系统-项目分享
  • Python 并行计算进阶:ProcessPoolExecutor 处理 CPU 密集型任务
  • Java设计模式之《外观模式》
  • 广东省省考备考(第八十八天8.27)——判断推理(第八节课)
  • 31. 什么是字符串常量池
  • 2025.8.27链表_链表逆置
  • 【Python-1】字符串连接方式“+“和“,”的区别
  • AI + 旅游 = 应用案例分析(一)
  • TDengine IDMP 5 个实测场景让监控变简单
  • 【和春笋一起学C++】(三十七)类的析构函数
  • rust语言(1.88.0)sqlite数据库rusqlite库(0.37.0)学习笔记
  • Linux 服务器故障全解析:常见问题及处理方法大全
  • 极简风格PDF格式转换解决方案
  • java将doc文件转pdf
  • PDF补丁丁:开源多年,完全免费的多功能 PDF 工具箱
  • Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
  • 像WPS Office 一样处理pdf页面尺寸
  • OpenGL 视差贴图
  • UVa11607 Cutting Cakes