本文章是我在学习CASA模型计算NPP时的总结,主要当作是数据备忘录。总结一下CASA模型原理、使用到的GEE数据集(计算参考github的python版本代码:https://github.com/jcgloria/npp_gee)
目录
② ERA5-Land Monthly Aggregated - ECMWF Climate Reanalysis
MOD09A1.061 Terra Surface Reflectance 8-Day Global 500m
一、CASA模型原理
引用文章:CASA方法估算NPP(IDL+ENVI)_casa模型计算npp-CSDN博客
二、数据
1、FPAR数据(光合有效辐射吸收比例)
表征了植被吸收太阳辐射占太阳辐射的百分量。
2、PAR数据(光合有效辐射)
MODIS数据集:MCD18C2.061 Photosynthetically Active Radiation Daily 3-Hour
官方网址:https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD18C2
MODIS这个数据集时间分辨率为3小时,地面分辨率1000m,数据起始时间为2002年2月24日,截至2024年6月1日停止更新。(我汇总过MODIS在GEE中的数据集,可参考这篇文章:总结一下google earth engine(GEE)中的MODIS数据集_google earth engine的modis数据介绍-CSDN博客,对应的表格也可以从这里下载:https://download.csdn.net/download/zhuzhu1213812138/89686385?spm=1001.2014.3001.5501)
这个数据其实已经有v62版本,v61版本已经在2024年6月1日停止更新。但是GEE中现在只有v61,v62可以从官方data pool下载(data pool下载方法可以参考我这篇文章:MODIS数据集直接下载地址分享-CSDN博客)
下面是官方使用该数据集的代码(GEE JavaScript):
var dataset = ee.ImageCollection('MODIS/061/MCD18C2')
.filter(ee.Filter.date('2001-01-01', '2001-02-01'));
var gmt_1200_par = dataset.select('GMT_1200_PAR');
var gmt_1200_par_vis = {
min: -236,
max: 316,
palette: ['0f17ff', 'b11406', 'f1ff23'],
};
Map.setCenter(6.746, 46.529, 2);
Map.addLayer(
gmt_1200_par, gmt_1200_par_vis,
'Total PAR at GMT 12:00');
3、LUE数据(实际光能利用率)
计算LUE数据需要使用到温度数据、气候数据(蒸散量)。
1)TerraClimate数据集: Monthly Climate and Climatic Water Balance for Global Terrestrial Surfaces, University of Idaho
官方网址:https://developers.google.com/earth-engine/datasets/catalog/IDAHO_EPSCOR_TERRACLIMATE#bands
月度气候数据(monthly),波段分辨率4638.3m,更新时间从1958年1月1日到2023年12月1日,主要使用pet和aet波段。
下面是官方使用该数据集的代码(GEE JavaScript):
var dataset = ee.ImageCollection('IDAHO_EPSCOR/TERRACLIMATE')
.filter(ee.Filter.date('2017-07-01', '2017-08-01'));
var maximumTemperature = dataset.select('tmmx');
var maximumTemperatureVis = {
min: -300.0,
max: 300.0,
palette: [
'1a3678', '2955bc', '5699ff', '8dbae9', 'acd1ff', 'caebff', 'e5f9ff',
'fdffb4', 'ffe6a2', 'ffc969', 'ffa12d', 'ff7c1f', 'ca531a', 'ff0000',
'ab0000'
],
};
Map.setCenter(71.72, 52.48, 3);
Map.addLayer(maximumTemperature, maximumTemperatureVis, 'Maximum Temperature');
2)ECMWF/ERA5数据
这个温度数据我看到了有2个月度数据集:
① ERA5 Monthly Aggregates - Latest Climate Reanalysis Produced by ECMWF / Copernicus Climate Change Service
官方网址:https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_MONTHLY
这个是月度数据,更新时间到2020年6月1日就结束了(官方解释:由于现代化工作影响了哥白尼气候数据存储,ECMWF数据集的生产可能会中断。),这里使用的波段是:mean_2mair_temperature。
下面是官方使用该数据集的代码(GEE JavaScript):
var dataset = ee.ImageCollection('ECMWF/ERA5/MONTHLY');
var visualization = {
bands: ['mean_2m_air_temperature'],
min: 250.0,
max: 320.0,
palette: [
'000080', '0000d9', '4000ff', '8000ff', '0080ff', '00ffff',
'00ff80', '80ff00', 'daff00', 'ffff00', 'fff500', 'ffda00',
'ffb000', 'ffa400', 'ff4f00', 'ff2500', 'ff0a00', 'ff00ff',
]
};
Map.setCenter(22.2, 21.2, 0);
Map.addLayer(dataset, visualization, 'Monthly average air temperature [K] at 2m height');
② ERA5-Land Monthly Aggregated - ECMWF Climate Reanalysis
官方网址:https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_LAND_MONTHLY_AGGR
因为上面的数据集是github参考代码使用的,2020年就停止更新了,因此找到了一个能够更新至今的月度数据。这里使用的波段是:temperature_2m。
下面是官方使用该数据集的代码(GEE JavaScript):
var dataset = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR').first();
var visualization = {
bands: ['temperature_2m'],
min: 250,
max: 320,
palette: [
'000080', '0000d9', '4000ff', '8000ff', '0080ff', '00ffff',
'00ff80', '80ff00', 'daff00', 'ffff00', 'fff500', 'ffda00',
'ffb000', 'ffa400', 'ff4f00', 'ff2500', 'ff0a00', 'ff00ff',
]
};
Map.setCenter(70, 45, 3);
Map.addLayer(
dataset, visualization, 'Air temperature [K] at 2m height', true, 0.8);
4、NDVI数据
这个还是好计算的,只要使用有近红外和可见光波段的数据集就可以,这里使用MODIS:
MOD09A1.061 Terra Surface Reflectance 8-Day Global 500m
官方网址:https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD09A1
数据包含波段信息如下:
其中,使用到近红外波段(sur_refl_b02)和红色波段(sur_refl_b01)
NDVI计算公式:
下面是官方使用该数据集的代码(GEE JavaScript):
var dataset = ee.ImageCollection('MODIS/061/MOD09A1')
.filter(ee.Filter.date('2018-01-01', '2018-05-01'));
var trueColor =
dataset.select(['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03']);
var trueColorVis = {
min: -100.0,
max: 3000.0,
};
Map.setCenter(6.746, 46.529, 6);
Map.addLayer(trueColor, trueColorVis, 'True Color');