教程:按年份导出中国县级 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);
});
🔹 功能总结
- 年份循环:2000–2025,每年生成一个 CSV
- 月份循环:每年 12 个月,计算每月平均 NDVI
- 耕地掩膜:只统计耕地 NDVI
- 县级统计:使用
reduceRegions
按县求均值 - 无数据处理:MODIS 无数据月份用
-9999
占位 - 导出 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. 确认插件已安装并加载
- 打开 Chrome 浏览器 → 点击右上角“三点” → 设置 → 扩展程序。
- 打开 Chrome 网上应用店 → 搜索 Open Earth Engine → 点击 添加至 Chrome。
- 安装后浏览器右上角会显示插件图标。
2. 配置插件权限
-
点击插件图标 → 管理扩展程序
-
确保:
- 允许访问文件 URL
- 在所有网站上运行
-
重启浏览器,并重新打开 GEE 控制台。
如果权限不足,Tasks 面板顶部不会显示“RUN ALL”按钮。
3. 批量启动任务
- 在 GEE 脚本运行后,确认 Tasks 面板生成所有导出任务(如
S2_L2A_2019_1
、S2_L2A_2019_2
…)。 - 点击 Tasks 面板顶部的 RUN ALL 按钮。
- 插件会自动为每个任务启动导出,依次将结果发送到 Google Drive 指定文件夹。
4. 导出结果查看
-
打开 Google Drive → 找到脚本中设置的文件夹(如
Sentinel2_L2A
) -
每个月的月均值影像文件按命名规则保存,例如:
S2_L2A_2019_1.tif S2_L2A_2019_2.tif … S2_L2A_2022_12.tif
-
文件可直接用于 ArcGIS、ENVI 等遥感分析软件。
🔹 小技巧
- 任务顺序:插件会按 Tasks 面板的顺序启动,确保命名有序,方便后续批处理。
- 任务数量大时:可分批创建任务(如每年 12 个任务),避免 GEE 任务队列溢出。
- 检查导出状态:插件启动任务后,仍需关注任务状态,确保导出成功。
✅ 总结:
- GEE 脚本负责“数据处理 + 导出任务生成”
- Open Earth Engine 插件负责“一键批量启动导出”,极大提升工作效率
- 二者结合,实现“从数据预处理到结果导出”的全流程高效化