教程:计算中国县级耕地 NDVI 均值并导出 CSV(MODIS)
教程:计算中国县级耕地 NDVI 均值并导出 CSV(MODIS)
本教程使用 Google Earth Engine (GEE),计算 2025 年 7 月至 8 月期间各县耕地 NDVI 均值,并导出 CSV 文件。
步骤 1:载入中国县级边界
// 加载中国县级边界矢量数据
// china_county 是 FeatureCollection,每个 feature 代表一个县
var china_county = ee.FeatureCollection("projects/ee-tilmacatanla/assets/boundry/china_county");
-
逻辑:后续将根据这些县界计算 NDVI 均值。
-
注意事项:
- 确保你的资产路径正确,GEE 能够访问。
- feature 中最好包含县名和国标字段,方便导出时使用。
步骤 2:获取 NDVI 数据
// 设置分析时间范围
var startDate = ee.Date('2025-07-01'); // 开始日期
var endDate = ee.Date('2025-08-01'); // 结束日期(注意:GEE的filterDate是左闭右开)// 载入 MODIS MOD13Q1 NDVI 产品
var modis = ee.ImageCollection("MODIS/061/MOD13Q1").filterDate(startDate, endDate) // 筛选时间.select('NDVI') // 只保留 NDVI 波段.mean() // 取时间段内平均 NDVI.divide(10000); // MODIS NDVI 数据需要除以10000转换为0-1浮点
-
逻辑:获取 2025 年 7 月整个月份的 NDVI 平均值。
-
注意事项:
- MODIS NDVI 范围是 -2000 ~ 10000,需除以 10000。
.mean()
会对时间段内所有影像按像素求平均。
步骤 3:生成耕地掩膜
// 载入 2018 年 COPERNICUS 全球土地覆盖数据
var landcover = ee.Image("COPERNICUS/Landcover/100m/Proba-V-C3/Global/2018").select('discrete_classification'); // 使用分类波段// 创建耕地掩膜(类别代码 40 代表耕地)
var mask_crop = landcover.eq(40);// 应用掩膜,只保留耕地 NDVI
var ndvi_masked = modis.updateMask(mask_crop);
-
逻辑:只计算耕地区域的 NDVI,其他区域屏蔽。
-
注意事项:
- COPERNICUS 分类代码需确认,耕地通常是 40。
.updateMask()
会把非耕地像素设为无效(masked)。
步骤 4:计算每个县的平均 NDVI
var countyNDVI = ndvi_masked.reduceRegions({collection: china_county, // 对每个县进行统计reducer: ee.Reducer.mean(), // 使用平均值作为统计方法scale: 250, // MODIS 分辨率约 250 米crs: 'EPSG:4326', // 坐标参考系tileScale: 4 // 可提高大区域计算稳定性
}).map(function(f){// 给每个县添加额外属性return f.set('year', 2025).set('month', 7) // 对应 7 月.set('NDVI', f.get('mean')) // reduceRegions 默认生成 mean 字段.set('Name', f.get('name')) // 保留县名.set('GB', f.get('gb')); // 保留国标代码
});
-
逻辑:
reduceRegions()
会将栅格 NDVI 汇总到矢量县界,生成每个县的平均 NDVI。map()
添加年份、月份和保留的属性字段。
-
注意事项:
scale
设为 250 米,保证与 MODIS 分辨率匹配。tileScale
可根据区域大小调整,防止内存溢出。
步骤 5:打印前 10 个县属性
// 获取前 10 个县
var first10 = countyNDVI.limit(10);// 转换为 List
var first10List = first10.toList(first10.size());// 提取属性字典
var props = first10List.map(function(f){f = ee.Feature(f);return f.toDictionary(['GB','Name','year','month','NDVI']);
});print('前10个县属性:', props);
-
逻辑:方便快速查看结果是否合理。
-
注意事项:
.limit(10)
仅用于预览。.toDictionary()
可以只提取需要的字段,便于打印。
步骤 6:导出所有县 NDVI 为 CSV
Export.table.toDrive({collection: countyNDVI, // 要导出的 FeatureCollectiondescription: 'China_County_NDVI_Jul2025', // 任务名称folder: 'GEE_Export', // Google Drive 文件夹fileNamePrefix: 'China_County_NDVI_Jul2025', // 文件名前缀fileFormat: 'CSV', // 导出格式selectors: ['GB','Name','year','month','NDVI'] // 导出字段顺序
});
-
逻辑:将每个县的 NDVI 结果导出到 Google Drive,方便 Excel 或 Python 分析。
-
注意事项:
selectors
控制 CSV 列顺序。- 导出任务需手动在 GEE 界面启动。
- 导出文件夹
GEE_Export
需存在或 GEE 会自动创建。
✅ 总结
-
数据来源:
- 栅格:MODIS MOD13Q1 NDVI、COPERNICUS 土地覆盖。
- 矢量:中国县级边界。
-
处理流程:
- 载入矢量边界。
- 获取时间段 NDVI 平均值。
- 创建耕地掩膜。
- 汇总到县级(reduceRegions)。
- 打印查看。
- 导出 CSV。
-
可扩展:
- 时间段可按月、季度、年修改。
- 可增加其他波段(如 EVI)或其他作物类型掩膜。
- 输出可按省份或其他行政单位聚合。