GEE实战:构建2000-2025年MODIS与TerraClimate多变量生态气候时序数据集
1. 为什么需要构建生态气候时序数据集做生态或气候研究的朋友应该都深有体会最头疼的就是找数据。以前我们要分析某个区域的植被变化可能需要从不同平台下载MODIS数据研究气候因子又得去另一个网站找降水、温度资料。光是数据收集和格式转换就能耗掉大半个月更别提还要处理缺失值、统一空间分辨率这些琐碎活了。我在黄土高原做植被恢复研究时就吃过这个亏。当时为了分析2000-2020年的植被响应前后折腾了三个月才把NDVI、降水和土壤水分数据对齐。直到后来发现Google Earth EngineGEE这个神器才明白原来数据准备可以这么高效——这就是为什么我要分享这套一站式数据集构建方案。这个教程要构建的时序数据集包含两大核心要素植被参数NDVI归一化植被指数、EVI增强型植被指数、LAI叶面积指数气候因子实际蒸散发、潜在蒸散发、降水量、太阳辐射等12个变量所有数据都已做好时空对齐分辨率统一为1km时间跨度为2000-2025年可自定义。你只需要复制代码替换研究区域就能直接导出CSV或GeoTIFF格式的分析就绪数据。实测下来从数据获取到导出全程不超过20分钟比传统方法快了至少50倍。2. 准备工作GEE环境配置2.1 注册与基础操作首先确保你有Google账号并已开通GEE权限申请地址earthengine.google.com。登录后你会看到代码编辑器界面主要功能区域包括左侧脚本管理器Scripts和资源库Assets中部代码编辑区右侧交互式地图上方运行按钮和搜索栏建议新建一个空白脚本我通常命名为Region_Climate_Vegetation_Timeseries这种一看就懂的名字。所有后续代码都会在这里编写。2.2 定义研究区域这里以长江流域为例你可以替换为自己的研究区。有三种常用方式定义区域边界// 方法1直接绘制多边形 var geometry ee.Geometry.Polygon([ [110.2, 32.5], [120.8, 32.1], [121.6, 26.3], [109.7, 26.8] ]); // 方法2上传Shapefile到Assets var geometry ee.FeatureCollection(users/your_account/your_shapefile); // 方法3使用现有数据集边界 var geometry ee.FeatureCollection(WWF/HydroSHEDS/v1/Basins/hybas_7) .filter(ee.Filter.eq(HYBAS_ID, 7120217340));建议先在地图上预览区域是否准确Map.centerObject(geometry, 6); // 6表示缩放级别 Map.addLayer(geometry, {color: red}, Study Area);3. MODIS植被数据处理3.1 NDVI与EVI提取我们使用MOD13A3数据集月度1km分辨率关键点在于原始值需要乘以0.0001缩放年度均值通过日历年份过滤计算统一重投影避免后续分析错位var mod13 ee.ImageCollection(MODIS/061/MOD13A3); function getAnnualVegetation(year) { var startDate ee.Date.fromYMD(year, 1, 1); var endDate startDate.advance(1, year); return mod13 .filterDate(startDate, endDate) .filterBounds(geometry) .select([NDVI,EVI]) .mean() .multiply(0.0001) .set(year, year) .clip(geometry); } // 生成2000-2025年序列 var years ee.List.sequence(2000, 2025); var vegCollection ee.ImageCollection(years.map(getAnnualVegetation));注意事项MOD13A3的NDVI范围是-2000到10000缩放后为-0.2到1.0云覆盖较多地区建议使用QA波段进行质量控制3.2 叶面积指数(LAI)处理使用MOD15A2H数据集8天500m分辨率需要特别注意原始数据需乘以0.1缩放500m分辨率需要重采样到1kmvar mod15 ee.ImageCollection(MODIS/061/MOD15A2H); function getAnnualLAI(year) { return mod15 .filter(ee.Filter.calendarRange(year, year, year)) .select(Lai_500m) .mean() .multiply(0.1) .resample(bilinear) .reproject(EPSG:4326, null, 1000) .set(year, year); } var laiCollection ee.ImageCollection(years.map(getAnnualLAI));4. TerraClimate气候数据处理4.1 气候变量分类处理TerraClimate提供月度4km分辨率数据变量处理分三种类型累积量如降水(pr)、实际蒸散发(aet)平均值如土壤湿度(soil)、PDSI指数衍生变量如平均温度(tmean)var terra ee.ImageCollection(IDAHO_EPSCOR/TERRACLIMATE); function getAnnualClimate(year) { var col terra.filter(ee.Filter.calendarRange(year, year, year)); // 累积变量求和 var sumVars col.select([aet,pet,pr,srad]).sum() .multiply(ee.Image([0.1, 0.1, 1, 0.1])); // 单位转换 // 平均变量求均值 var meanVars col.select([pdsi,soil,vpd,vs]).mean() .multiply(ee.Image([0.01, 0.1, 0.01, 0.01])); // 计算年平均温度 var tmean col.select([tmmx,tmmn]) .mean() .multiply(0.1) .reduce(ee.Reducer.mean()) .rename(tmean); return sumVars .addBands(meanVars) .addBands(tmean) .set(year, year); } var climateCollection ee.ImageCollection(years.map(getAnnualClimate));4.2 关键气候变量说明变量名全称单位生态意义aet实际蒸散发mm植被水分利用pr降水量mm水分供应pdsi帕默尔干旱指数无干旱程度vpd水汽压差kPa气孔导度压力5. 数据合成与导出5.1 多变量时序合成将所有变量合并为单一ImageCollection每个影像包含同一年份的植被和气候数据function combineVariables(year) { year ee.Number(year); var veg vegCollection.filter(ee.Filter.eq(year, year)).first(); var lai laiCollection.filter(ee.Filter.eq(year, year)).first(); var climate climateCollection.filter(ee.Filter.eq(year, year)).first(); return ee.Image.cat([ veg.select([NDVI,EVI]), lai.select([Lai_500m]), climate ]).set(year, year); } var finalCollection ee.ImageCollection(years.map(combineVariables));5.2 导出到Google Drive批量导出各变量多年均值function exportData(collection, prefix) { var img collection.mean(); // 计算多年平均 // 逐个变量导出 var bandNames img.bandNames().getInfo(); bandNames.forEach(function(name) { Export.image.toDrive({ image: img.select(name), description: prefix _ name, fileNamePrefix: name _2000-2025, region: geometry, scale: 1000, crs: EPSG:4326, maxPixels: 1e13 }); }); } exportData(finalCollection, Yangtze);导出设置建议大区域导出时设置maxPixels为1e13避免报错复杂形状区域建议导出为GeoTIFF格式小区域可以直接导出为CSV进行统计分析6. 实际应用案例6.1 干旱对植被的影响分析用这套数据我做过一个有趣的分析计算PDSI干旱指数与NDVI的相关系数发现黄土高原草地生态系统对干旱的响应存在1-2个月的滞后效应。关键代码片段// 计算逐像元相关系数 var correlation finalCollection.select([PDSI,NDVI]) .reduce(ee.Reducer.pearsonsCorrelation()); Map.addLayer(correlation, {min: -1, max: 1}, PDSI-NDVI Correlation);6.2 植被生产力趋势检测使用Mann-Kendall检验分析EVI的长期变化趋势var trend vegCollection.select(EVI) .reduce(ee.Reducer.kendallsCorrelation()) .select(slope); Map.addLayer(trend, {palette: [red, yellow, green]}, EVI Trend);这套方法已经帮助我团队完成了3篇SCI论文的数据处理工作。特别是在分析极端气候事件对生态系统的影响时多变量数据集的价值就凸显出来了——你可以在同一时空框架下分析植被动态与气候因子的耦合关系而不需要担心数据不一致带来的误差。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418377.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!